extends Control const FONT := preload("res://assets/fonts/font2.ttf") const CYAN := Color("91dbea") const WEAPON_DISPLAY_ORDER := [0, 2, 1] const AMBER := Color("efb568") var player: CharacterBody2D var game: Node2D var _inventory: ShipInventory func _ready() -> void: mouse_filter = Control.MOUSE_FILTER_IGNORE _inventory = player.get_node("ShipInventory") func _process(delta: float) -> void: if is_instance_valid(player): var screen := get_viewport().get_canvas_transform() * player.global_position var local := get_global_transform().affine_inverse() * screen var overlaps := Rect2(Vector2.ZERO, size).grow(36).has_point(local) modulate.a = move_toward(modulate.a, 0.18 if overlaps else 1.0, delta * 4.0) queue_redraw() func _text(value: String, point: Vector2, width: float, font_size: int, color: Color) -> void: draw_string(FONT, point, value, HORIZONTAL_ALIGNMENT_CENTER, width, font_size, color) func _draw() -> void: if _inventory == null or not is_instance_valid(player) or size.x < 50 or size.y < 50: return var outline := PackedVector2Array([Vector2(24, 0), Vector2(size.x - 24, 0), Vector2(size.x, 24), Vector2(size.x, size.y - 12), Vector2(size.x - 12, size.y), Vector2(12, size.y), Vector2(0, size.y - 12), Vector2(0, 24)]) draw_colored_polygon(outline, Color(0.025, 0.041, 0.063, 0.96)) var closed := outline.duplicate() closed.append(outline[0]) draw_polyline(closed, Color("376779"), 1.5, true) draw_line(Vector2(28, 2), Vector2(size.x - 28, 2), CYAN, 2, true) var cell := (size.x - 40) / 3.0 var values := [_inventory.missile_ammunition, _inventory.ammunition, int(game.call("get_remaining_enemies"))] var captions := ["RAKIETY", "AMUNICJA", "WROGOWIE"] for index in 3: var x := 20.0 + index * cell var color := AMBER if index == 0 else (CYAN if index == 1 else Color("ff8989")) _text(captions[index], Vector2(x, 21), cell, 9, Color("8aa9bb")) _text(str(values[index]).pad_zeros(2), Vector2(x, 45), cell, 21, color) if index < 2: draw_line(Vector2(x + cell, 14), Vector2(x + cell, 45), Color("2b4354"), 1) var card := Rect2(x + cell * 0.5 - 32, 52, 64, 64) var slot_index: int = WEAPON_DISPLAY_ORDER[index] var item := _inventory.weapon_slots[slot_index] var border := item.get_type_color() if item != null else Color("344657") draw_style_box(_card_style(border), card) var binding: String = ["LPM", "PPM", "ŚPM"][slot_index] _text(binding, card.position + Vector2(0, 14), card.size.x, 9, CYAN) if item != null and item.definition.icon != null: draw_texture_rect(item.definition.icon, Rect2(card.position + Vector2(11, 18), Vector2(42, 42)), false) else: _text("—", card.position + Vector2(0, 40), card.size.x, 14, Color("637d90")) var ratio := float(player.get(["hull", "shields", "energy"][index])) / maxf(1, float(player.get(["max_hull", "max_shields", "max_energy"][index]))) var gauge := Rect2(x + 5, 121, cell - 10, 3) draw_rect(gauge, Color("172632")) gauge.size.x *= clampf(ratio, 0, 1) draw_rect(gauge, [Color("ea9277"), CYAN, AMBER][index]) func _card_style(color: Color) -> StyleBoxFlat: var style := StyleBoxFlat.new() style.bg_color = Color("0b1520") style.border_color = color style.set_border_width_all(1) style.set_corner_radius_all(4) return style