122 lines
2.9 KiB
GDScript
122 lines
2.9 KiB
GDScript
class_name CockpitDashboardDetailing
|
|
extends Node3D
|
|
|
|
const CockpitMaterialPalette = preload(
|
|
"res://game/presentation/cockpit/cockpit_material_palette.gd"
|
|
)
|
|
const CockpitMeshFactory = preload(
|
|
"res://game/presentation/cockpit/cockpit_mesh_factory.gd"
|
|
)
|
|
|
|
var _materials: CockpitMaterialPalette
|
|
var _control_count := 0
|
|
|
|
|
|
func _init(materials: CockpitMaterialPalette) -> void:
|
|
_materials = materials
|
|
name = "DashboardDetailing"
|
|
_build_structural_frame()
|
|
_build_switch_banks()
|
|
|
|
|
|
func control_count() -> int:
|
|
return _control_count
|
|
|
|
|
|
func apply_screen_materials(dashboard: Node3D) -> void:
|
|
for screen_name: String in ["ResourcesScreen", "NavigationScreen", "IntegrityScreen"]:
|
|
var screen := dashboard.get_node_or_null(screen_name) as MeshInstance3D
|
|
if screen != null:
|
|
screen.material_override = _materials.instrument_screen
|
|
|
|
|
|
func hide_placeholder_indicators(cockpit: Node3D) -> void:
|
|
for indicator_name: String in ["CyanIndicator", "AmberIndicator", "RedIndicator"]:
|
|
var indicator := cockpit.get_node_or_null(indicator_name) as MeshInstance3D
|
|
if indicator != null:
|
|
indicator.visible = false
|
|
|
|
|
|
func _build_structural_frame() -> void:
|
|
CockpitMeshFactory.add_box(
|
|
"TopRail",
|
|
self,
|
|
Vector3(0.0, 0.255, 0.115),
|
|
Vector3(1.50, 0.055, 0.055),
|
|
_materials.dark_steel
|
|
)
|
|
CockpitMeshFactory.add_box(
|
|
"BottomRail",
|
|
self,
|
|
Vector3(0.0, -0.205, 0.115),
|
|
Vector3(1.50, 0.050, 0.055),
|
|
_materials.dark_steel
|
|
)
|
|
for x: float in [-0.755, 0.755]:
|
|
CockpitMeshFactory.add_box(
|
|
"SideRail",
|
|
self,
|
|
Vector3(x, 0.025, 0.115),
|
|
Vector3(0.050, 0.46, 0.055),
|
|
_materials.dark_steel
|
|
)
|
|
for x: float in [-0.238, 0.238]:
|
|
CockpitMeshFactory.add_box(
|
|
"ScreenSeparator",
|
|
self,
|
|
Vector3(x, -0.075, 0.118),
|
|
Vector3(0.038, 0.16, 0.048),
|
|
_materials.brass
|
|
)
|
|
for screw_position: Vector2 in [
|
|
Vector2(-0.72, -0.18),
|
|
Vector2(-0.72, 0.23),
|
|
Vector2(0.72, -0.18),
|
|
Vector2(0.72, 0.23),
|
|
Vector2(-0.24, -0.18),
|
|
Vector2(0.24, -0.18),
|
|
]:
|
|
CockpitMeshFactory.add_cylinder(
|
|
"PanelScrew",
|
|
self,
|
|
Vector3(screw_position.x, screw_position.y, 0.151),
|
|
0.010,
|
|
0.010,
|
|
_materials.brass,
|
|
Vector3(90.0, 0.0, 0.0)
|
|
)
|
|
|
|
|
|
func _build_switch_banks() -> void:
|
|
_add_switch_bank(-0.59, "AUX")
|
|
_add_switch_bank(0.59, "POMPES")
|
|
|
|
|
|
func _add_switch_bank(center_x: float, caption: String) -> void:
|
|
CockpitMeshFactory.add_box(
|
|
"SwitchPlate",
|
|
self,
|
|
Vector3(center_x, -0.205, 0.145),
|
|
Vector3(0.25, 0.060, 0.020),
|
|
_materials.overhead_steel
|
|
)
|
|
for offset: float in [-0.075, -0.025, 0.025, 0.075]:
|
|
CockpitMeshFactory.add_cylinder(
|
|
"ToggleSwitch",
|
|
self,
|
|
Vector3(center_x + offset, -0.195, 0.171),
|
|
0.006,
|
|
0.030,
|
|
_materials.dark_steel,
|
|
Vector3(90.0, 0.0, 0.0)
|
|
)
|
|
_control_count += 1
|
|
var label := Label3D.new()
|
|
label.name = "%sLabel" % caption.to_pascal_case()
|
|
label.text = caption
|
|
label.font_size = 10
|
|
label.pixel_size = 0.00055
|
|
label.modulate = Color(0.72, 0.69, 0.56)
|
|
label.position = Vector3(center_x, -0.235, 0.165)
|
|
add_child(label)
|