legacy-of-the-ancient-questor/scripts/game/maps/Map.gd

71 lines
1.6 KiB
GDScript

extends TileMap
class_name Map
enum Direction { North, East, South, West }
@export var defaultPlayerStartPosition:Vector2i
@export var stepIncrement:float = 1.0
var player
func _ready():
CommandDispatcher.PLAYER_MOVE.connect(onPlayerMove)
CommandDispatcher.TOGGLE_TILEMAP_LAYER.connect(onToggleRequest)
CommandDispatcher.PLAYER_SPEAK.connect(onSpeak)
@warning_ignore("unused_parameter")
func spawnPlayerAtPosition(newPosition, facing):
var spawnposition:Vector2i
if (newPosition == null):
spawnposition = defaultPlayerStartPosition
else:
spawnposition = newPosition
player.position = Vector2(spawnposition.x * 16, spawnposition.y * 16)
func onPlayerMove(direction):
var newPos = Vector2(player.position)
var moveIncrement = tile_set.tile_size.x * stepIncrement
match(direction):
Direction.North:
newPos.y -= moveIncrement
Direction.South:
newPos.y += moveIncrement
Direction.West:
newPos.x -= moveIncrement
Direction.East:
newPos.x += moveIncrement
if (playerCanMoveTo(newPos)):
player.position = newPos
player.updateAnimation(direction)
@warning_ignore("unused_parameter")
func playerCanMoveTo(newPosition) -> bool:
return false
func onToggleRequest(layerName, visible):
for layer in range(get_layers_count()):
if(get_layer_name(layer) == layerName):
set_layer_enabled(layer, visible)
func onSpeak():
var interactables:Array = player.speechCollider.get_overlapping_areas()
if (interactables.size() > 0):
for interactable in interactables:
interactable.get_parent().interact()
else:
CommandDispatcher.DISPLAY_MESSAGE.emit("There is no one to speak to.")