diff --git a/godot/local_map/LocalMap.tscn b/godot/local_map/LocalMap.tscn index 37330c2062487c61a0251859eabee353dd26f105..162a4737adff7677b742d644564d7188721bb4ec 100644 --- a/godot/local_map/LocalMap.tscn +++ b/godot/local_map/LocalMap.tscn @@ -1,17 +1,20 @@ -[gd_scene load_steps=13 format=2] +[gd_scene load_steps=15 format=2] [ext_resource path="res://local_map/LocalMap.gd" type="Script" id=1] [ext_resource path="res://local_map/tilesets/grid_lines/grid_lines_tileset.tres" type="TileSet" id=2] [ext_resource path="res://local_map/tilesets/grid/grid_tileset.tres" type="TileSet" id=3] -[ext_resource path="res://local_map/grid/grid.gd" type="Script" id=4] -[ext_resource path="res://local_map/pawns/Actor.tscn" type="PackedScene" id=5] -[ext_resource path="res://local_map/pawns/pawn.gd" type="Script" id=6] -[ext_resource path="res://combat/battlers/formations/PorcupineFormation001.tscn" type="PackedScene" id=7] -[ext_resource path="res://local_map/pawns/sprites/character_grey.png" type="Texture" id=8] -[ext_resource path="res://local_map/pawns/sprites/star.png" type="Texture" id=9] -[ext_resource path="res://dialogue/Dialogue.tscn" type="PackedScene" id=10] -[ext_resource path="res://local_map/DialogueBox.gd" type="Script" id=11] -[ext_resource path="res://dialogue/dialogue_player/DialoguePlayer.tscn" type="PackedScene" id=12] +[ext_resource path="res://local_map/grid/Grid.gd" type="Script" id=4] +[ext_resource path="res://local_map/grid/PawnContainer.gd" type="Script" id=5] +[ext_resource path="res://local_map/pawns/Actor.tscn" type="PackedScene" id=6] +[ext_resource path="res://local_map/pawns/Pawn.gd" type="Script" id=7] +[ext_resource path="res://combat/battlers/formations/PorcupineFormation001.tscn" type="PackedScene" id=8] +[ext_resource path="res://local_map/pawns/sprites/character_grey.png" type="Texture" id=9] +[ext_resource path="res://local_map/pawns/sprites/star.png" type="Texture" id=10] +[ext_resource path="res://dialogue/Dialogue.tscn" type="PackedScene" id=11] +[ext_resource path="res://local_map/pawns/Follower.tscn" type="PackedScene" id=12] +[ext_resource path="res://local_map/DialogueBox.gd" type="Script" id=13] +[ext_resource path="res://dialogue/dialogue_player/DialoguePlayer.tscn" type="PackedScene" id=14] + [node name="LocalMap" type="Node2D"] script = ExtResource( 1 ) @@ -64,52 +67,49 @@ __meta__ = { "_edit_lock_": true } -[node name="Actor" parent="Grid" instance=ExtResource( 5 )] +[node name="Pawns" type="YSort" parent="Grid"] +sort_enabled = true +script = ExtResource( 5 ) + +[node name="Actor" parent="Grid/Pawns" instance=ExtResource( 6 )] +editor/display_folded = true position = Vector2( 416, 288 ) -formation = null - -[node name="AnimationPlayer" parent="Grid/Actor" index="0"] -root_node = NodePath("..") -autoplay = "" -playback_process_mode = 1 -playback_default_blend_time = 0.0 -playback_speed = 1.0 -blend_times = [ ] - -[node name="Tween" parent="Grid/Actor" index="1"] -repeat = false -playback_process_mode = 1 -playback_speed = 1.0 -playback/active = false -playback/repeat = false -playback/speed = 1.0 - -[node name="Actor2" type="Node2D" parent="Grid" groups=[ + +[node name="Actor2" type="Node2D" parent="Grid/Pawns" groups=[ "enemy", ]] +editor/display_folded = true position = Vector2( 480, 480 ) z_index = 1 -script = ExtResource( 6 ) +script = ExtResource( 7 ) type = 0 -formation = ExtResource( 7 ) +formation = ExtResource( 8 ) -[node name="Sprite" type="Sprite" parent="Grid/Actor2"] -texture = ExtResource( 8 ) +[node name="Sprite" type="Sprite" parent="Grid/Pawns/Actor2"] +texture = ExtResource( 9 ) -[node name="Object" type="Node2D" parent="Grid"] +[node name="Object" type="Node2D" parent="Grid/Pawns"] +editor/display_folded = true position = Vector2( 544, 288 ) -script = ExtResource( 6 ) +script = ExtResource( 7 ) type = 2 -formation = ExtResource( 7 ) +formation = ExtResource( 8 ) -[node name="Sprite" type="Sprite" parent="Grid/Object"] -texture = ExtResource( 9 ) +[node name="Sprite" type="Sprite" parent="Grid/Pawns/Object"] +texture = ExtResource( 10 ) -[node name="Dialogue" parent="Grid/Object" instance=ExtResource( 10 )] +[node name="Dialogue" parent="Grid/Pawns/Object" instance=ExtResource( 11 )] file_path = "res://dialogue/dialogue_data/object.json" +[node name="Follower" parent="Grid/Pawns" instance=ExtResource( 12 )] +position = Vector2( 356, 290 ) + +[node name="Follower2" parent="Grid/Pawns" instance=ExtResource( 12 )] +position = Vector2( 293, 290 ) + [node name="MapInterface" type="CanvasLayer" parent="."] pause_mode = 2 +editor/display_folded = true layer = 1 offset = Vector2( 0, 0 ) rotation = 0.0 @@ -128,7 +128,7 @@ mouse_filter = 0 mouse_default_cursor_shape = 0 size_flags_horizontal = 1 size_flags_vertical = 1 -script = ExtResource( 11 ) +script = ExtResource( 13 ) [node name="Panel" type="Panel" parent="MapInterface/Dialogue"] anchor_left = 0.0 @@ -223,7 +223,7 @@ text = "Next" flat = false align = 1 -[node name="DialoguePlayer" parent="MapInterface/Dialogue" instance=ExtResource( 12 )] - +[node name="DialoguePlayer" parent="MapInterface/Dialogue" instance=ExtResource( 14 )] -[editable path="Grid/Actor"] +[connection signal="moved" from="Grid/Pawns/Actor" to="Grid/Pawns/Follower" method="_on_Actor_moved"] +[connection signal="moved" from="Grid/Pawns/Follower" to="Grid/Pawns/Follower2" method="_on_Actor_moved"] diff --git a/godot/local_map/grid/grid.gd b/godot/local_map/grid/Grid.gd similarity index 87% rename from godot/local_map/grid/grid.gd rename to godot/local_map/grid/Grid.gd index 7d72b8a47f630aa59261e5ffad25870b249390f6..9dba4055a1469030b9847fd8e12b567835fc56e6 100644 --- a/godot/local_map/grid/grid.gd +++ b/godot/local_map/grid/Grid.gd @@ -2,18 +2,18 @@ extends TileMap enum CELL_TYPES {EMPTY = -1, ACTOR, OBSTACLE, OBJECT} +onready var pawns = get_node("Pawns") func _ready(): - for child in get_children(): + for child in pawns.get_children(): + child.position = request_move(child, Vector2(0, 0)) set_cellv(world_to_map(child.position), child.type) - func get_cell_pawn(coordinates): - for node in get_children(): + for node in pawns.get_children(): if world_to_map(node.position) == coordinates: return(node) - func request_move(pawn, direction): var cell_start = world_to_map(pawn.position) var cell_target = cell_start + direction @@ -35,7 +35,6 @@ func request_move(pawn, direction): var enemy = get_cell_pawn(cell_target) get_parent().emit_signal("encounter" , enemy.formation.instance()) - func update_pawn_position(pawn, cell_start, cell_target): set_cellv(cell_target, pawn.type) set_cellv(cell_start, CELL_TYPES.EMPTY) diff --git a/godot/local_map/grid/PawnContainer.gd b/godot/local_map/grid/PawnContainer.gd new file mode 100644 index 0000000000000000000000000000000000000000..615f88ff612ced75145fb6ee4d4126395a9b655a --- /dev/null +++ b/godot/local_map/grid/PawnContainer.gd @@ -0,0 +1,4 @@ +extends Node2D + +func request_move(pawn, direction): + return get_parent().request_move(pawn, direction) diff --git a/godot/local_map/pawns/actor.gd b/godot/local_map/pawns/Actor.gd similarity index 63% rename from godot/local_map/pawns/actor.gd rename to godot/local_map/pawns/Actor.gd index c4bb024ca4e28059116b982fd5e1ba0584b5abc6..84c801943d747e5040a75152cee521ef09c8f1ff 100644 --- a/godot/local_map/pawns/actor.gd +++ b/godot/local_map/pawns/Actor.gd @@ -1,36 +1,17 @@ -extends "pawn.gd" +extends "Pawn.gd" onready var Grid = get_parent() +signal moved(last_position, current_position) + func _ready(): update_look_direction(Vector2(1, 0)) - -func _process(delta): - var input_direction = get_input_direction() - if not input_direction: - return - update_look_direction(input_direction) - - var target_position = Grid.request_move(self, input_direction) - if target_position: - move_to(target_position) - else: - bump() - - -func get_input_direction(): - return Vector2( - int(Input.is_action_pressed("ui_right")) - int(Input.is_action_pressed("ui_left")), - int(Input.is_action_pressed("ui_down")) - int(Input.is_action_pressed("ui_up")) - ) - - func update_look_direction(direction): $Pivot/Sprite.rotation = direction.angle() - func move_to(target_position): + emit_signal("moved", position, target_position) set_process(false) $AnimationPlayer.play("walk") @@ -46,8 +27,7 @@ func move_to(target_position): yield($AnimationPlayer, "animation_finished") set_process(true) - - + func bump(): set_process(false) $AnimationPlayer.play("bump") diff --git a/godot/local_map/pawns/Actor.tscn b/godot/local_map/pawns/Actor.tscn index a19f106e5fdc87fcc99129f6eb664ad40789be93..27a71665d8d10079fabaa2b169a058428af88385 100644 --- a/godot/local_map/pawns/Actor.tscn +++ b/godot/local_map/pawns/Actor.tscn @@ -1,12 +1,13 @@ [gd_scene load_steps=5 format=2] -[ext_resource path="res://local_map/pawns/actor.gd" type="Script" id=1] +[ext_resource path="res://local_map/pawns/Leader.gd" type="Script" id=1] [ext_resource path="res://local_map/pawns/sprites/character.png" type="Texture" id=2] [sub_resource type="Animation" id=1] resource_name = "bump" length = 0.1 +loop = false step = 0.01 tracks/0/type = "value" tracks/0/path = NodePath("Pivot/Sprite:position") @@ -25,6 +26,7 @@ tracks/0/keys = { resource_name = "walk" length = 0.25 +loop = false step = 0.05 tracks/0/type = "value" tracks/0/path = NodePath("Pivot/Sprite:self_modulate") @@ -70,14 +72,26 @@ script = ExtResource( 1 ) __meta__ = { "_edit_group_": true } -_sections_unfolded = [ "Offset", "Transform", "Z Index" ] type = 0 +formation = null [node name="AnimationPlayer" type="AnimationPlayer" parent="."] +root_node = NodePath("..") +autoplay = "" +playback_process_mode = 1 +playback_default_blend_time = 0.0 +playback_speed = 1.0 anims/bump = SubResource( 1 ) anims/walk = SubResource( 2 ) +blend_times = [ ] [node name="Tween" type="Tween" parent="."] +repeat = false +playback_process_mode = 1 +playback_speed = 1.0 +playback/active = false +playback/repeat = false +playback/speed = 1.0 [node name="Pivot" type="Position2D" parent="."] diff --git a/godot/local_map/pawns/Follower.gd b/godot/local_map/pawns/Follower.gd new file mode 100644 index 0000000000000000000000000000000000000000..e0f32d9f2d4d791a8c5323a8db96cd98c75a71e6 --- /dev/null +++ b/godot/local_map/pawns/Follower.gd @@ -0,0 +1,11 @@ +extends "Actor.gd" + +func _on_Actor_moved(last_position, current_position): + follow(last_position) + +func follow(to_position): + var direction = (to_position - position).normalized() + update_look_direction(direction) + + Grid.request_move(self, direction) + move_to(to_position) diff --git a/godot/local_map/pawns/Follower.tscn b/godot/local_map/pawns/Follower.tscn new file mode 100644 index 0000000000000000000000000000000000000000..882b0b04fbb8bcf5d98de18caf72c029d46035e6 --- /dev/null +++ b/godot/local_map/pawns/Follower.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://local_map/pawns/Actor.tscn" type="PackedScene" id=1] +[ext_resource path="res://local_map/pawns/Follower.gd" type="Script" id=2] + +[node name="Follower" instance=ExtResource( 1 )] +script = ExtResource( 2 ) + diff --git a/godot/local_map/pawns/Leader.gd b/godot/local_map/pawns/Leader.gd new file mode 100644 index 0000000000000000000000000000000000000000..7a9c0673205dec9beb049f279bb9a19968f5b214 --- /dev/null +++ b/godot/local_map/pawns/Leader.gd @@ -0,0 +1,20 @@ +extends "Actor.gd" + +func _process(delta): + var input_direction = get_input_direction() + if not input_direction: + return + update_look_direction(input_direction) + + var target_position = Grid.request_move(self, input_direction) + if target_position: + move_to(target_position) + else: + bump() + +func get_input_direction(): + return Vector2( + int(Input.is_action_pressed("ui_right")) - int(Input.is_action_pressed("ui_left")), + int(Input.is_action_pressed("ui_down")) - int(Input.is_action_pressed("ui_up")) + ) + diff --git a/godot/local_map/pawns/pawn.gd b/godot/local_map/pawns/Pawn.gd similarity index 100% rename from godot/local_map/pawns/pawn.gd rename to godot/local_map/pawns/Pawn.gd