itrpg/scripts/isometric_player_controller.gd

75 lines
2.3 KiB
GDScript

extends Node
class_name IsometricPlayerController
var player_node
var map_data
var map_renderer
func _init(player, map_data_ref, renderer):
player_node = player
map_data = map_data_ref
map_renderer = renderer
# Initialize player at a specific position
func init_player(x=10, y=10, z=1):
var tile = map_data.get_tile(x, y, z)
if tile:
tile["visibility"] = true
tile["unit"] = player_node
tile["unit_type"] = "PC"
# Use renderer to position the player
map_renderer.position_unit(player_node, tile["x"], tile["y"], tile["z"])
return true
return false
# Move player up or down a layer
func move_vertical(direction = "up"):
var z_offset = 0
if direction == "up":
z_offset = 1
elif direction == "down":
z_offset = -1
# Find current player position
var player_position = map_data.find_unit_tile("PC")
if not player_position:
print("Cannot find player position")
return false
var current_x = player_position.x
var current_y = player_position.y
var current_z = player_position.z
var new_z = current_z + z_offset
# Check if new position is valid
if new_z < 0 or new_z >= map_data.GRID_SIZE_HEIGHT:
print("New Z position out of bounds: ", new_z)
return false
# Check if destination tile exists
var destination_tile = map_data.get_tile(current_x, current_y, new_z)
if destination_tile == null:
print("Destination tile doesn't exist at: ", current_x, ", ", current_y, ", ", new_z)
return false
# Debug the current tile before moving
var current_tile = map_data.get_tile(current_x, current_y, current_z)
print("Current tile before move: ", current_tile)
# Set up the destination tile to receive the player
destination_tile["unit"] = current_tile["unit"]
destination_tile["unit_type"] = "PC"
destination_tile["visibility"] = true
# Clear the current tile's unit data
current_tile["unit"] = null
current_tile["unit_type"] = null
destination_tile["visibility"] = false
# Update visual position
map_renderer.position_unit(player_node, destination_tile["x"], destination_tile["y"], destination_tile["z"])
print("Player moved to: ", current_x, ", ", current_y, ", ", new_z)
return true