mirror of
https://github.com/APercy/ap_airship.git
synced 2025-04-30 08:21:47 -04:00
352 lines
13 KiB
Lua
Executable file
352 lines
13 KiB
Lua
Executable file
ap_airship.hud_list = {}
|
|
|
|
function ap_airship.get_pointer_angle(value, maxvalue)
|
|
local angle = value/maxvalue * 180
|
|
--angle = angle - 90
|
|
--angle = angle * -1
|
|
return angle
|
|
end
|
|
|
|
function ap_airship.animate_gauge(player, ids, prefix, x, y, angle)
|
|
local angle_in_rad = math.rad(angle + 180)
|
|
local dim = 10
|
|
local pos_x = math.sin(angle_in_rad) * dim
|
|
local pos_y = math.cos(angle_in_rad) * dim
|
|
player:hud_change(ids[prefix .. "2"], "offset", {x = pos_x + x, y = pos_y + y})
|
|
dim = 20
|
|
pos_x = math.sin(angle_in_rad) * dim
|
|
pos_y = math.cos(angle_in_rad) * dim
|
|
player:hud_change(ids[prefix .. "3"], "offset", {x = pos_x + x, y = pos_y + y})
|
|
dim = 30
|
|
pos_x = math.sin(angle_in_rad) * dim
|
|
pos_y = math.cos(angle_in_rad) * dim
|
|
player:hud_change(ids[prefix .. "4"], "offset", {x = pos_x + x, y = pos_y + y})
|
|
dim = 40
|
|
pos_x = math.sin(angle_in_rad) * dim
|
|
pos_y = math.cos(angle_in_rad) * dim
|
|
player:hud_change(ids[prefix .. "5"], "offset", {x = pos_x + x, y = pos_y + y})
|
|
dim = 50
|
|
pos_x = math.sin(angle_in_rad) * dim
|
|
pos_y = math.cos(angle_in_rad) * dim
|
|
player:hud_change(ids[prefix .. "6"], "offset", {x = pos_x + x, y = pos_y + y})
|
|
dim = 60
|
|
pos_x = math.sin(angle_in_rad) * dim
|
|
pos_y = math.cos(angle_in_rad) * dim
|
|
player:hud_change(ids[prefix .. "7"], "offset", {x = pos_x + x, y = pos_y + y})
|
|
end
|
|
|
|
local hud_panel_x = 10 -- HUD left offset
|
|
local hud_panel_y = -10 -- HUD bottom offset
|
|
|
|
-- Ground speed indicator
|
|
-- left bottom corner
|
|
local gs_ind_x = hud_panel_x
|
|
local gs_ind_y = hud_panel_y
|
|
-- zero position
|
|
local gs_ind_zero_x = gs_ind_x + 83
|
|
local gs_ind_zero_y = gs_ind_y - 42
|
|
-- indicator range
|
|
local gs_ind_range_xmin = gs_ind_zero_x - 56
|
|
local gs_ind_range_xmax = gs_ind_zero_x + 58
|
|
local gs_ind_xstep = 57 / 4
|
|
local gs_ind_range_ymax = gs_ind_y - 154
|
|
local gs_ind_range_ymin = gs_ind_y - 13
|
|
local gs_ind_ystep = math.abs(gs_ind_range_ymax - gs_ind_zero_y) / 8
|
|
|
|
local function bound(min, value, max)
|
|
return math.max(math.min(value, max), min)
|
|
end
|
|
|
|
local function set_gs_indicator(player, ids, forward, right)
|
|
player:hud_change(
|
|
ids["gs_hor"],
|
|
"offset",
|
|
{
|
|
x = gs_ind_x,
|
|
y = gs_ind_zero_y - bound(-2, forward, 8) * gs_ind_ystep
|
|
}
|
|
)
|
|
player:hud_change(
|
|
ids["gs_vert"],
|
|
"offset",
|
|
{
|
|
x = gs_ind_zero_x + bound(-4, right, 4) * gs_ind_xstep,
|
|
y = gs_ind_y
|
|
}
|
|
)
|
|
end
|
|
|
|
function ap_airship.update_hud(self, coal, water, pressure, power_lever)
|
|
local player = minetest.get_player_by_name(self.driver_name)
|
|
if player == nil then return end
|
|
local player_name = player:get_player_name()
|
|
|
|
local screen_pos_y = -100
|
|
local screen_pos_x = 10
|
|
|
|
local water_gauge_x = screen_pos_x + 374
|
|
local water_gauge_y = screen_pos_y
|
|
local press_gauge_x = screen_pos_x + 85
|
|
local press_gauge_y = water_gauge_y
|
|
local coal_1_x = screen_pos_x + 182
|
|
local coal_1_y = screen_pos_y
|
|
local coal_2_x = coal_1_x + 60
|
|
local coal_2_y = screen_pos_y
|
|
local throttle_x = screen_pos_x + 395
|
|
local throttle_y = screen_pos_y + 45
|
|
|
|
local ids = ap_airship.hud_list[player_name]
|
|
if ids then
|
|
player:hud_change(ids["throttle"], "offset", {x = throttle_x, y = throttle_y - power_lever})
|
|
|
|
local yaw = self.object:get_rotation().y
|
|
local velocity = self.object:get_velocity()
|
|
local sin_yaw = math.sin(yaw)
|
|
local cos_yaw = math.cos(yaw)
|
|
|
|
set_gs_indicator(
|
|
player,
|
|
ids,
|
|
velocity.z * cos_yaw - velocity.x * sin_yaw,
|
|
velocity.z * sin_yaw + velocity.x * cos_yaw
|
|
)
|
|
|
|
--[[local coal_value = coal
|
|
if coal_value > 99 then coal_value = 99 end
|
|
if coal_value < 0 then coal_value = 0 end
|
|
player:hud_change(ids["coal_1"], "text", "ap_airship_"..(math.floor(coal_value/10))..".png")
|
|
player:hud_change(ids["coal_2"], "text", "ap_airship_"..(math.floor(coal_value%10))..".png")]]--
|
|
|
|
--[[ap_airship.animate_gauge(player, ids, "water_pt_", water_gauge_x, water_gauge_y, water)
|
|
ap_airship.animate_gauge(player, ids, "press_pt_", press_gauge_x, press_gauge_y, pressure)]]--
|
|
else
|
|
ids = {}
|
|
|
|
ids["title"] = player:hud_add({
|
|
hud_elem_type = "text",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = screen_pos_x + 240, y = screen_pos_y - 100},
|
|
text = "Airship engine state",
|
|
alignment = 0,
|
|
scale = { x = 100, y = 30},
|
|
number = 0xFFFFFF,
|
|
})
|
|
|
|
ids["bg"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = screen_pos_x, y = screen_pos_y},
|
|
text = "ap_airship_hud_panel.png",
|
|
scale = { x = 0.5, y = 0.5},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
|
|
ids["throttle"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = throttle_x, y = throttle_y},
|
|
text = "ap_airship_throttle.png",
|
|
scale = { x = 0.5, y = 0.5},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
|
|
ids["gs_bg"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = { x = 0, y = 1 },
|
|
offset = { x = gs_ind_x, y = gs_ind_y },
|
|
text = "ap_airship_ind_gs_bg.png",
|
|
scale = { x = 1, y = 1 },
|
|
alignment = { x = 1, y = -1 },
|
|
})
|
|
|
|
ids["gs_hor"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = { x = 0, y = 1 },
|
|
offset = { x = gs_ind_x, y = gs_ind_range_ymin },
|
|
text = "ap_airship_ind_gs_lh.png",
|
|
scale = { x = 170, y = 1 },
|
|
alignment = { x = 1, y = -1 },
|
|
})
|
|
|
|
ids["gs_vert"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = { x = 0, y = 1 },
|
|
offset = { x = gs_ind_range_xmin, y = gs_ind_y },
|
|
text = "ap_airship_ind_gs_lv.png",
|
|
scale = { x = 1, y = 170 },
|
|
alignment = { x = 1, y = -1 },
|
|
})
|
|
|
|
ids["gs_fg"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = { x = 0, y = 1 },
|
|
offset = { x = gs_ind_x, y = gs_ind_y },
|
|
text = "ap_airship_ind_gs_fg.png",
|
|
scale = { x = 1, y = 1 },
|
|
alignment = { x = 1, y = -1 },
|
|
})
|
|
|
|
ids["gs_caption"] = player:hud_add({
|
|
hud_elem_type = "text",
|
|
position = { x = 0, y = 1 },
|
|
offset = { x = gs_ind_zero_x, y = gs_ind_y - 170 },
|
|
text = "Ground Speed",
|
|
scale = { x = 1, y = 1 },
|
|
alignment = { x = 0, y = -1 },
|
|
number = 0xFFFFFF,
|
|
})
|
|
|
|
--[[ids["coal_1"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = coal_1_x, y = coal_1_y},
|
|
text = "ap_airship_0.png",
|
|
scale = { x = 0.5, y = 0.5},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
|
|
ids["coal_2"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = coal_2_x, y = coal_2_y},
|
|
text = "ap_airship_0.png",
|
|
scale = { x = 0.5, y = 0.5},
|
|
alignment = { x = 1, y = 0 },
|
|
})]]--
|
|
|
|
--[[ids["water_pt_1"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = water_gauge_x, y = water_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
|
|
ids["water_pt_2"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = water_gauge_x, y = water_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["water_pt_3"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = water_gauge_x, y = water_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["water_pt_4"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = water_gauge_x, y = water_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["water_pt_5"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = water_gauge_x, y = water_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["water_pt_6"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = water_gauge_x, y = water_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["water_pt_7"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = water_gauge_x, y = water_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
|
|
ids["press_pt_1"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = press_gauge_x, y = press_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["press_pt_2"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = press_gauge_x, y = press_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["press_pt_3"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = press_gauge_x, y = press_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["press_pt_4"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = press_gauge_x, y = press_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["press_pt_5"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = press_gauge_x, y = press_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["press_pt_6"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = press_gauge_x, y = press_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})
|
|
ids["press_pt_7"] = player:hud_add({
|
|
hud_elem_type = "image",
|
|
position = {x = 0, y = 1},
|
|
offset = {x = press_gauge_x, y = press_gauge_y},
|
|
text = "ap_airship_ind_box.png",
|
|
scale = { x = 6, y = 6},
|
|
alignment = { x = 1, y = 0 },
|
|
})]]--
|
|
|
|
ap_airship.hud_list[player_name] = ids
|
|
end
|
|
end
|
|
|
|
|
|
function ap_airship.remove_hud(player)
|
|
if player then
|
|
local player_name = player:get_player_name()
|
|
--minetest.chat_send_all(player_name)
|
|
local ids = ap_airship.hud_list[player_name]
|
|
if ids then
|
|
--player:hud_remove(ids["altitude"])
|
|
--player:hud_remove(ids["time"])
|
|
for key in pairs(ids) do
|
|
player:hud_remove(ids[key])
|
|
end
|
|
end
|
|
ap_airship.hud_list[player_name] = nil
|
|
end
|
|
|
|
end
|