Files
Text-based/levels/world_state/control.gd
fatbonks 953625fd7a init
2025-10-16 05:26:03 +13:00

94 lines
2.5 KiB
GDScript
Executable File

class_name WorldState
extends Control
@export var animation_player:AnimationPlayer
@export var tilemap:Level
@export var item_list:ItemList
@export var stats_label:Label
@export var stats_ui:Control
@export var array:Array[Array] = [
["A1", "A2", "A3"],
["B1", "B2", "B3"],
["C1", "C2", "C3"],
[]
]
var world:World
var current_cords:Vector2 = Vector2(0, 0)
func do_command(command:String, input:String) -> void:
match command:
"WALK":
move(input)
"TALK":
pass
"INVENTORY":
pass
"BATTLE":
battle(input)
func start(current_world:World) -> void:
world = current_world
world.player.stats_changed.connect(update_stats)
update_stats()
func battle(input:String) -> void:
match input:
"UP":
interactable_obj_exists(world.player.global_position + Vector2(0, -10))
"DOWN":
interactable_obj_exists(world.player.global_position + Vector2(0, 10))
"LEFT":
interactable_obj_exists(world.player.global_position + Vector2(-10, 0))
"RIGHT":
interactable_obj_exists(world.player.global_position + Vector2(10, 0))
func move(input:String) -> void:
match input:
"UP":
if is_walkable(Vector2(0, -10)):
world.player.global_position.y -= 10
"DOWN":
if is_walkable(Vector2(0, 10)):
world.player.global_position.y += 10
"LEFT":
if is_walkable(Vector2(-10, 0)):
world.player.global_position.x -= 10
"RIGHT":
if is_walkable(Vector2(10, 0)):
world.player.global_position.x += 10
func is_walkable(direction:Vector2) -> bool:
var clicked_cell:Vector2i = tilemap.local_to_map(world.player.global_position + direction)
var cell:TileData = tilemap.get_cell_tile_data(clicked_cell)
if cell:
return cell.get_custom_data("walkable")
return false
func interactable_obj_exists(pos:Vector2) -> void:
if tilemap.interactble_objects.has(pos):
tilemap.interactble_objects[pos].use_object(world)
tilemap.interactble_objects[pos].queue_free()
tilemap.interactble_objects.erase(pos)
func _on_item_list_item_selected(index: int) -> void:
world.line_edit.text = item_list.get_item_text(index).to_upper()
world.line_edit.caret_column = 30
item_list.deselect(index)
item_list.release_focus()
world.line_edit.grab_focus()
func update_stats():
while(stats_ui.size.y > 0):
stats_ui.size.y -= 10
await get_tree().create_timer(0.1).timeout
var stats:String = "Health: " + str(world.player.health) \
+ "\nDamage: " + str(world.player.damage) \
+ "\nSpeed: " + str(world.player.speed)
stats_label.text = stats
while(stats_ui.size.y < 224.0):
stats_ui.size.y += 10
await get_tree().create_timer(0.1).timeout