added painting system

master
Alexsandro Percy 2021-11-26 17:37:15 -03:00
parent 731bc554b4
commit 74eb2ea4a6
8 changed files with 192 additions and 49 deletions

View File

@ -7,6 +7,69 @@ ju52.min_speed = 5
ju52.max_engine_acc = 9 --5
ju52.lift = 11 --12
ju52.colors ={
black='#2b2b2b',
blue='#0063b0',
brown='#8c5922',
cyan='#07B6BC',
dark_green='#567a42',
dark_grey='#6d6d6d',
green='#4ee34c',
grey='#9f9f9f',
magenta='#ff0098',
orange='#ff8b0e',
pink='#ff62c6',
red='#dc1818',
violet='#a437ff',
white='#FFFFFF',
yellow='#ffe400',
}
ju52.skin_texture = "ju52_painting.png"
ju52.textures = {
"ju52_metal.png", --bequilha
"ju52_brown.png", --assentos pilotos
"ju52_brown.png", --assentos passageiros
"ju52_brown.png", --assentos passageiros
"ju52_brown.png", --assentos passageiros
"ju52_brown.png", --assentos passageiros
"ju52_brown.png", --assentos passageiros
ju52.skin_texture, --proteção motor
"ju52_metal.png", "ju52_black.png", --escapamento
ju52.skin_texture, --superficies controle
"ju52_compass.png", --bussola
"ju52_white.png", --ponteiros
"ju52_metal.png", "ju52_black.png", --manetes potencia
ju52.skin_texture, --porta exterior
"ju52_glass.png", -- vidro porta
"ju52_bege.png", -- interno porta
"ju52_engine.png", "ju52_black.png", --motor
"ju52_engine.png", "ju52_black.png", --motores
ju52.skin_texture, --fuselagem
"ju52_black.png", -- aros mostradores
"ju52_climber.png", --climbers
"ju52_speed.png", --indicadores de velocidade
"ju52_altimeter.png", --altimetros
"ju52_fuel.png", --combustivel
"ju52_compass_ind.png", --indicador da bussola
"ju52_glass.png", -- vidros laterais
ju52.skin_texture, -- estabilizador horizontal
"ju52_bege.png", -- interior
"ju52_metal.png", "ju52_black.png", --assoalho
"ju52_metal.png", -- interno cabine - pes
"ju52_bege.png", -- interior cauda
ju52.skin_texture, --trem de pouso
"ju52_panel_color.png", "ju52_black.png", --painel
"ju52_panel_color.png", "ju52_black.png", --console de manetes
"ju52_black.png", "ju52_metal.png", --pneu da bequilha
ju52.skin_texture, --estabilizador vertical
"ju52_black.png", "ju52_metal.png", --pneus do trem principal
"ju52_glass.png", "ju52_metal.png", -- vidros parabrisa
ju52.skin_texture, --asas
--"ju52_red.png", --
--"ju52_white.png", --asas
}
dofile(minetest.get_modpath("ju52") .. DIR_DELIM .. "ju52_global_definitions.lua")
dofile(minetest.get_modpath("ju52") .. DIR_DELIM .. "ju52_crafts.lua")
dofile(minetest.get_modpath("ju52") .. DIR_DELIM .. "ju52_control.lua")

View File

@ -58,7 +58,14 @@ initial_properties = {
})
ju52.skin_texture = "ju52_skin_war1.png"
function ju52.textures_copy()
local tablecopy = {}
for k, v in pairs(ju52.textures) do
tablecopy[k] = v
end
return tablecopy
end
minetest.register_entity("ju52:ju52", {
initial_properties = {
physical = true,
@ -69,49 +76,7 @@ minetest.register_entity("ju52:ju52", {
backface_culling = true,
mesh = "ju52_mine.b3d",
stepheight = 0.6,
textures = {
"ju52_metal.png", --bequilha
"ju52_brown.png", --assentos pilotos
"ju52_brown.png", --assentos passageiros
"ju52_brown.png", --assentos passageiros
"ju52_brown.png", --assentos passageiros
"ju52_brown.png", --assentos passageiros
"ju52_brown.png", --assentos passageiros
ju52.skin_texture, --proteção motor
"ju52_metal.png", "ju52_black.png", --escapamento
ju52.skin_texture, --superficies controle
"ju52_compass.png", --bussola
"ju52_white.png", --ponteiros
"ju52_metal.png", "ju52_black.png", --manetes potencia
ju52.skin_texture, --porta exterior
"ju52_glass.png", -- vidro porta
"ju52_bege.png", -- interno porta
"ju52_engine.png", "ju52_black.png", --motor
"ju52_engine.png", "ju52_black.png", --motores
ju52.skin_texture, --fuselagem
"ju52_black.png", -- aros mostradores
"ju52_climber.png", --climbers
"ju52_speed.png", --indicadores de velocidade
"ju52_altimeter.png", --altimetros
"ju52_fuel.png", --combustivel
"ju52_compass_ind.png", --indicador da bussola
"ju52_glass.png", -- vidros laterais
ju52.skin_texture, -- estabilizador horizontal
"ju52_bege.png", -- interior
"ju52_metal.png", "ju52_black.png", --assoalho
"ju52_metal.png", -- interno cabine - pes
"ju52_bege.png", -- interior cauda
ju52.skin_texture, --trem de pouso
"ju52_panel_color.png", "ju52_black.png", --painel
"ju52_panel_color.png", "ju52_black.png", --console de manetes
"ju52_black.png", "ju52_metal.png", --pneu da bequilha
ju52.skin_texture, --estabilizador vertical
"ju52_black.png", "ju52_metal.png", --pneus do trem principal
"ju52_glass.png", "ju52_metal.png", -- vidros parabrisa
ju52.skin_texture, --asas
--"ju52_red.png", --
--"ju52_white.png", --asas
},
textures = ju52.textures_copy(),
},
textures = {},
driver_name = nil,
@ -141,6 +106,8 @@ minetest.register_entity("ju52:ju52", {
_wing_configuration = ju52.wing_angle_of_attack,
_passengers_base = {},
_passengers = {},
_color = nil,
_skin = 'ju52_skin_lufthansa.png',
get_staticdata = function(self) -- unloaded/unloads ... is now saved
return minetest.serialize({
@ -150,6 +117,8 @@ minetest.register_entity("ju52:ju52", {
stored_power_lever = self._power_lever,
stored_driver_name = self.driver_name,
stored_flap = self._flap,
stored_color = self._color,
stored_skin = self._skin,
})
end,
@ -163,6 +132,8 @@ minetest.register_entity("ju52:ju52", {
self._power_lever = data.stored_power_lever
self.driver_name = data.stored_driver_name
self._flap = data.stored_flap
self._color = data.stored_color
self._skin = data.stored_skin
--minetest.debug("loaded: ", self._energy)
end
ju52.setText(self)
@ -217,6 +188,12 @@ minetest.register_entity("ju52:ju52", {
self._passengers_base[10]=minetest.add_entity(pos,'ju52:seat_base')
self._passengers_base[10]:set_attach(self.object,'',{x=6.5,y=6.7,z=-30.5},{x=0,y=0,z=0})
if self._color ~= nil then
ju52.paint(self.object, self._color, ju52.skin_texture)
else
ju52.set_skin(self.object, self._skin, ju52.skin_texture)
end
self.object:set_armor_groups({immortal=1})
end,
@ -271,7 +248,11 @@ minetest.register_entity("ju52:ju52", {
end
local is_attached = false
if puncher:get_attach() == self.object then is_attached = true end
local seat = puncher:get_attach()
if seat then
local plane = seat:get_attach()
if plane == self.object then is_attached = true end
end
local itmstck=puncher:get_wielded_item()
local item_name = ""
@ -320,7 +301,13 @@ minetest.register_entity("ju52:ju52", {
if self.hp_max <= 0 then
ju52.destroy(self)
end
else
local _,indx = item_name:find('dye:')
if indx and self._engine_running == false then
ju52.paint_formspec(self.owner)
itmstck:set_count(itmstck:get_count()-1)
puncher:set_wielded_item(itmstck)
end
end
end,
@ -359,11 +346,13 @@ minetest.register_entity("ju52:ju52", {
local passenger = minetest.get_player_by_name(self._passenger)
if passenger then ju52.dettach_pax(self, passenger) end
end
for i = 10,1,-1
for i = 10,1,-1
do
if self._passengers[i] then
local passenger = minetest.get_player_by_name(self._passengers[i])
if passenger then ju52.dettach_pax(self, passenger) end
if self._passengers[i] then
local passenger = minetest.get_player_by_name(self._passengers[i])
if passenger then ju52.dettach_pax(self, passenger) end
end
end
end

View File

@ -42,7 +42,64 @@ function ju52.pilot_formspec(name)
minetest.show_formspec(name, "ju52:pilot_main", basic_form)
end
function ju52.paint_formspec(name)
local basic_form = table.concat({
"formspec_version[3]",
"size[8.1, 11.8]",
},"")
basic_form = basic_form.."image_button[1,1.0;3,1;ju52_p_lufthansa.png;lufthansa;Lufthansa;false;true;]"
basic_form = basic_form.."image_button[1,2.1;3,1;ju52_p_luftwaffe.png;luftwaffe;Luftwaffe;false;true;]"
basic_form = basic_form.."image_button[1,3.2;3,1;ju52_white.png^[multiply:#2b2b2b;black;Black;false;true;]"
basic_form = basic_form.."image_button[1,4.3;3,1;ju52_white.png^[multiply:#0063b0;blue;Blue;false;true;]"
basic_form = basic_form.."image_button[1,5.4;3,1;ju52_white.png^[multiply:#8c5922;brown;Brown;false;true;]"
basic_form = basic_form.."image_button[1,6.5;3,1;ju52_white.png^[multiply:#07B6BC;cyan;Cyan;false;true;]"
basic_form = basic_form.."image_button[1,7.6;3,1;ju52_white.png^[multiply:#567a42;dark_green;Dark Green;false;true;]"
basic_form = basic_form.."image_button[1,8.7;3,1;ju52_white.png^[multiply:#6d6d6d;dark_grey;Dark Gray;false;true;]"
basic_form = basic_form.."image_button[1,9.8;3,1;ju52_white.png^[multiply:#4ee34c;green;Green;false;true;]"
basic_form = basic_form.."image_button[4.1,1.0;3,1;ju52_white.png^[multiply:#9f9f9f;grey;Gray;false;true;]"
basic_form = basic_form.."image_button[4.1,2.1;3,1;ju52_white.png^[multiply:#ff0098;magenta;Magenta;false;true;]"
basic_form = basic_form.."image_button[4.1,3.2;3,1;ju52_white.png^[multiply:#ff8b0e;orange;Orange;false;true;]"
basic_form = basic_form.."image_button[4.1,4.3;3,1;ju52_white.png^[multiply:#ff62c6;pink;Pink;false;true;]"
basic_form = basic_form.."image_button[4.1,5.4;3,1;ju52_white.png^[multiply:#dc1818;red;Red;false;true;]"
basic_form = basic_form.."image_button[4.1,6.5;3,1;ju52_white.png^[multiply:#a437ff;violet;Violet;false;true;]"
basic_form = basic_form.."image_button[4.1,7.6;3,1;ju52_white.png^[multiply:#ffe400;yellow;Yellow;false;true;]"
basic_form = basic_form.."image_button[4.1,8.7;3,1;ju52_white.png^[multiply:#ffffff;white;White;false;true;]"
minetest.show_formspec(name, "ju52:paint", basic_form)
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname == "ju52:paint" then
local name = player:get_player_name()
local plane_obj = ju52.getPlaneFromPlayer(player)
local ent = plane_obj:get_luaentity()
ent.initial_properties.textures = ju52.textures_copy() --reset the textures first
local search_string = ju52.skin_texture --then set to find the defaults
if fields.lufthansa then ju52.set_skin(plane_obj, "ju52_skin_lufthansa.png", search_string) end
if fields.luftwaffe then ju52.set_skin(plane_obj, "ju52_skin_luftwaffe.png", search_string) end
if fields.black then ju52.paint(plane_obj, "#2b2b2b", search_string) end
if fields.blue then ju52.paint(plane_obj, "#0063b0", search_string) end
if fields.brown then ju52.paint(plane_obj, "#8c5922", search_string) end
if fields.cyan then ju52.paint(plane_obj, "#07B6BC", search_string) end
if fields.dark_green then ju52.paint(plane_obj, "#567a42", search_string) end
if fields.dark_grey then ju52.paint(plane_obj, "#6d6d6d", search_string) end
if fields.green then ju52.paint(plane_obj, "#4ee34c", search_string) end
if fields.grey then ju52.paint(plane_obj, "#9f9f9f", search_string) end
if fields.magenta then ju52.paint(plane_obj, "#ff0098", search_string) end
if fields.orange then ju52.paint(plane_obj, "#ff8b0e", search_string) end
if fields.pink then ju52.paint(plane_obj, "#ff62c6", search_string) end
if fields.red then ju52.paint(plane_obj, "#dc1818", search_string) end
if fields.violet then ju52.paint(plane_obj, "#a437ff", search_string) end
if fields.yellow then ju52.paint(plane_obj, "#ffe400", search_string) end
if fields.white then ju52.paint(plane_obj, "#ffffff", search_string) end
minetest.close_formspec(name, "ju52:paint")
end
if formname == "ju52:passenger_main" then
local name = player:get_player_name()
local plane_obj = ju52.getPlaneFromPlayer(player)

View File

@ -249,6 +249,40 @@ function ju52.checkAttach(self, player)
return false
end
--painting
function ju52.paint(object, colstr, search_string)
if colstr then
local entity = object:get_luaentity()
entity._color = colstr
entity._skin = ju52.skin_texture
local l_textures = ju52.textures_copy()
for _, texture in ipairs(l_textures) do
local indx = texture:find(search_string)
if indx then
l_textures[_] = search_string .."^[multiply:".. colstr
end
end
object:set_properties({textures=l_textures})
end
end
function ju52.set_skin(object, skin_image_name, search_string)
if skin_image_name then
local entity = object:get_luaentity()
entity._color = nil
entity._skin = skin_image_name
local l_textures = ju52.textures_copy()
for _, texture in ipairs(l_textures) do
local indx = texture:find(search_string)
if indx then
l_textures[_] = skin_image_name
--minetest.chat_send_all(l_textures[_])
end
end
object:set_properties({textures=l_textures})
end
end
function ju52.start_engine(self)
if self._engine_running then
self._engine_running = false

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB