Small updates
This commit is contained in:
@@ -99,13 +99,14 @@ func _do_anchored(delta: float) -> void:
|
|||||||
_shot_timer = SHOT_COOLDOWN
|
_shot_timer = SHOT_COOLDOWN
|
||||||
|
|
||||||
func _fire_at_player() -> void:
|
func _fire_at_player() -> void:
|
||||||
|
# Fire at player's current position (not homing - player can dodge)
|
||||||
var dir := (_player.global_position - global_position).normalized()
|
var dir := (_player.global_position - global_position).normalized()
|
||||||
var proj = ENEMY_PROJECTILE.instantiate()
|
var proj = ENEMY_PROJECTILE.instantiate()
|
||||||
proj.position = (get_parent() as Node2D).to_local(global_position)
|
proj.position = (get_parent() as Node2D).to_local(global_position)
|
||||||
proj.direction = dir
|
proj.direction = dir
|
||||||
proj.speed = 120.0
|
proj.speed = 180.0 # faster since not homing
|
||||||
proj.damage = 1.0
|
proj.damage = 1.0
|
||||||
proj.max_range = 720.0
|
proj.max_range = 720.0
|
||||||
proj.homing = true
|
proj.homing = false
|
||||||
proj.homing_target = _player
|
AudioManager.play("enemy_shoot")
|
||||||
get_parent().call_deferred("add_child", proj)
|
get_parent().call_deferred("add_child", proj)
|
||||||
+8
-11
@@ -107,7 +107,6 @@ func activate() -> void:
|
|||||||
_spawn_shop()
|
_spawn_shop()
|
||||||
data.cleared = true
|
data.cleared = true
|
||||||
RoomData.RoomType.START:
|
RoomData.RoomType.START:
|
||||||
_spawn_entry_door()
|
|
||||||
data.cleared = true
|
data.cleared = true
|
||||||
_:
|
_:
|
||||||
data.cleared = true
|
data.cleared = true
|
||||||
@@ -377,15 +376,6 @@ func _on_floor_exit_entered(body: Node) -> void:
|
|||||||
get_tree().call_deferred("change_scene_to_file", "res://scenes/run/floor.tscn")
|
get_tree().call_deferred("change_scene_to_file", "res://scenes/run/floor.tscn")
|
||||||
|
|
||||||
|
|
||||||
func _spawn_entry_door() -> void:
|
|
||||||
# Decorative open door behind spawn point - shows "you entered from here"
|
|
||||||
# Positioned at bottom of room (player spawns in center, door behind them)
|
|
||||||
var entry_door := StationDoor.new()
|
|
||||||
entry_door.position = Vector2(0, ROOM_H / 2.0 - 80) # near bottom wall
|
|
||||||
entry_door.setup_entry_door()
|
|
||||||
contents.add_child(entry_door)
|
|
||||||
|
|
||||||
|
|
||||||
func _spawn_body_part_drop() -> void:
|
func _spawn_body_part_drop() -> void:
|
||||||
# 50% drop chance so body parts feel more valuable
|
# 50% drop chance so body parts feel more valuable
|
||||||
if randf() > 0.5:
|
if randf() > 0.5:
|
||||||
@@ -407,7 +397,14 @@ func _spawn_body_part_drop() -> void:
|
|||||||
contents.add_child(pickup)
|
contents.add_child(pickup)
|
||||||
|
|
||||||
func _spawn_run_item() -> void:
|
func _spawn_run_item() -> void:
|
||||||
var chosen: String = ALL_ITEM_PATHS[randi() % ALL_ITEM_PATHS.size()]
|
# Exclude Patch Kit from item rooms (shop-only item)
|
||||||
|
const PATCH_KIT_PATH := "res://data/run_items/patch_kit.tres"
|
||||||
|
var item_pool: Array[String] = []
|
||||||
|
for p in ALL_ITEM_PATHS:
|
||||||
|
if p != PATCH_KIT_PATH:
|
||||||
|
item_pool.append(p)
|
||||||
|
|
||||||
|
var chosen: String = item_pool[randi() % item_pool.size()]
|
||||||
var pickup = RUN_ITEM_PICKUP.instantiate()
|
var pickup = RUN_ITEM_PICKUP.instantiate()
|
||||||
pickup.item = load(chosen)
|
pickup.item = load(chosen)
|
||||||
pickup.position = Vector2.ZERO
|
pickup.position = Vector2.ZERO
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ var _grid_min: Vector2i = Vector2i.ZERO
|
|||||||
var _grid_max: Vector2i = Vector2i.ZERO
|
var _grid_max: Vector2i = Vector2i.ZERO
|
||||||
var _parallax_offset: Vector2 = Vector2.ZERO
|
var _parallax_offset: Vector2 = Vector2.ZERO
|
||||||
var _player: Node2D = null
|
var _player: Node2D = null
|
||||||
|
var _revealed_positions: Array[Vector2i] = [] # rooms revealed by Fragmented Map
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Setup
|
# Setup
|
||||||
@@ -59,6 +60,7 @@ func _ready() -> void:
|
|||||||
EventBus.floor_map_ready.connect(_on_floor_map_ready)
|
EventBus.floor_map_ready.connect(_on_floor_map_ready)
|
||||||
EventBus.room_entered_at.connect(_on_room_entered)
|
EventBus.room_entered_at.connect(_on_room_entered)
|
||||||
EventBus.run_ended.connect(_on_run_ended)
|
EventBus.run_ended.connect(_on_run_ended)
|
||||||
|
EventBus.room_revealed.connect(_on_room_revealed)
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Signal handlers
|
# Signal handlers
|
||||||
@@ -76,10 +78,22 @@ func _on_room_entered(grid_pos: Vector2i) -> void:
|
|||||||
|
|
||||||
func _on_run_ended(_reached_hub: bool) -> void:
|
func _on_run_ended(_reached_hub: bool) -> void:
|
||||||
_rooms_data.clear()
|
_rooms_data.clear()
|
||||||
|
_revealed_positions.clear()
|
||||||
_player = null
|
_player = null
|
||||||
queue_redraw()
|
queue_redraw()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_room_revealed() -> void:
|
||||||
|
# Fragmented Map effect: reveal types of adjacent unvisited rooms
|
||||||
|
if not _rooms_data.has(_current_pos):
|
||||||
|
return
|
||||||
|
var current_room: RoomData = _rooms_data[_current_pos]
|
||||||
|
for conn_pos in current_room.connections.values():
|
||||||
|
if conn_pos not in _revealed_positions:
|
||||||
|
_revealed_positions.append(conn_pos)
|
||||||
|
queue_redraw()
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
if _rooms_data.is_empty():
|
if _rooms_data.is_empty():
|
||||||
return
|
return
|
||||||
@@ -195,9 +209,13 @@ func _draw() -> void:
|
|||||||
var rect := Rect2(map_pos, ROOM_SIZE)
|
var rect := Rect2(map_pos, ROOM_SIZE)
|
||||||
|
|
||||||
# Fog of war: unvisited rooms show as generic grey (hide type info)
|
# Fog of war: unvisited rooms show as generic grey (hide type info)
|
||||||
|
# Exception: revealed rooms (Fragmented Map) show their type dimmed
|
||||||
var color: Color
|
var color: Color
|
||||||
if is_visited:
|
if is_visited:
|
||||||
color = ROOM_COLORS.get(room.type, ROOM_COLORS[RoomData.RoomType.COMBAT])
|
color = ROOM_COLORS.get(room.type, ROOM_COLORS[RoomData.RoomType.COMBAT])
|
||||||
|
elif pos in _revealed_positions:
|
||||||
|
color = ROOM_COLORS.get(room.type, ROOM_COLORS[RoomData.RoomType.COMBAT])
|
||||||
|
color.a = UNVISITED_ALPHA
|
||||||
else:
|
else:
|
||||||
color = UNVISITED_COLOR
|
color = UNVISITED_COLOR
|
||||||
color.a = UNVISITED_ALPHA
|
color.a = UNVISITED_ALPHA
|
||||||
|
|||||||
Reference in New Issue
Block a user