From a4f3361048524ed0c479f7046e22d44690858a03 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Tue, 23 Feb 2021 00:48:49 +0300 Subject: [PATCH] Implement key map and unlockable abilities --- Action.gd | 7 --- Actor.gd | 6 +- ActorProcess.gd | 16 ------ AttackKey.gd | 9 +++ DashKey.gd | 11 ++++ Main.gd | 12 +++- Main.tscn | 8 +-- Mob.gd | 12 ---- Mob.tscn | 51 ----------------- OrbItem.gd | 7 +++ OrbItem.tscn | 29 ++++++++++ player.gd => Player.gd | 7 ++- test-scene.tscn => Player.tscn | 101 +++++++++++++++++++-------------- PlayerNormal.gd | 13 +++-- Timer.gd | 4 -- project.godot | 18 ++++-- test-scene.gd | 15 ----- 17 files changed, 153 insertions(+), 173 deletions(-) delete mode 100644 Action.gd delete mode 100644 ActorProcess.gd create mode 100644 AttackKey.gd create mode 100644 DashKey.gd delete mode 100644 Mob.gd delete mode 100644 Mob.tscn create mode 100644 OrbItem.gd create mode 100644 OrbItem.tscn rename player.gd => Player.gd (86%) rename test-scene.tscn => Player.tscn (64%) delete mode 100644 Timer.gd delete mode 100644 test-scene.gd diff --git a/Action.gd b/Action.gd deleted file mode 100644 index c362504..0000000 --- a/Action.gd +++ /dev/null @@ -1,7 +0,0 @@ -extends Node -class_name Action - -var action_id = -1 - -func process(actor, delta): - actor.setState(action_id) diff --git a/Actor.gd b/Actor.gd index 8d685a0..5eaaf52 100644 --- a/Actor.gd +++ b/Actor.gd @@ -3,8 +3,6 @@ class_name Actor var state = 0 var health = 100 -var state_map = {} # {STATE, Action Node} -export var speed = 200 # How fast the actor will move (pixels/sec). +var speed = 200 # How fast the actor will move (pixels/sec). -func setState(new_state): - state = new_state +var state_map = {} # {STATE, Action Node} diff --git a/ActorProcess.gd b/ActorProcess.gd deleted file mode 100644 index 1eccaec..0000000 --- a/ActorProcess.gd +++ /dev/null @@ -1,16 +0,0 @@ -extends Node - - -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" - - -# Called when the node enters the scene tree for the first time. -func _ready(): - pass # Replace with function body. - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass diff --git a/AttackKey.gd b/AttackKey.gd new file mode 100644 index 0000000..915f72b --- /dev/null +++ b/AttackKey.gd @@ -0,0 +1,9 @@ +extends Node +class_name AttackKey + +func register(actor): + actor.state_map[actor.PlayerState.ATTACKING] = PlayerAttack.new() + return self + +func trigger(actor): + actor.state = actor.PlayerState.ATTACKING diff --git a/DashKey.gd b/DashKey.gd new file mode 100644 index 0000000..cfdbfc3 --- /dev/null +++ b/DashKey.gd @@ -0,0 +1,11 @@ +extends Node +class_name DashKey + +func register(actor): + actor.state_map[actor.PlayerState.DASHING] = PlayerDash.new() + actor.state_map[actor.PlayerState.STANDING] = PlayerStanding.new() + return self + +func trigger(actor): + actor.state = actor.PlayerState.DASHING + diff --git a/Main.gd b/Main.gd index aa831c2..d6c65cb 100644 --- a/Main.gd +++ b/Main.gd @@ -4,4 +4,14 @@ func _ready(): newGame() func newGame(): - $Player.start($StartPosition.position) + var player = preload("res://Player.tscn").instance() + player.name = "Player" + player.start($StartPosition.position) + add_child(player) + + var orb = preload("res://OrbItem.tscn").instance() + orb.position.x = player.position.x + orb.position.y = player.position.y - 250 + orb.scale = Vector2(0.4, 0.4) + add_child(orb) + diff --git a/Main.tscn b/Main.tscn index a8f666e..f7a3c5a 100644 --- a/Main.tscn +++ b/Main.tscn @@ -1,6 +1,5 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=4 format=2] -[ext_resource path="res://test-scene.tscn" type="PackedScene" id=1] [ext_resource path="res://Main.gd" type="Script" id=2] [ext_resource path="res://Actor.gd" type="Script" id=3] [ext_resource path="res://Ground.tscn" type="PackedScene" id=4] @@ -12,11 +11,6 @@ script = ExtResource( 2 ) collision_layer = 2 collision_mask = 0 -[node name="Player" parent="." instance=ExtResource( 1 )] -position = Vector2( 65.481, 38.7541 ) -scale = Vector2( 1.5, 1.5 ) -collision_mask = 0 - [node name="StartPosition" type="Position2D" parent="."] position = Vector2( 240, 450 ) diff --git a/Mob.gd b/Mob.gd deleted file mode 100644 index b91e3d2..0000000 --- a/Mob.gd +++ /dev/null @@ -1,12 +0,0 @@ -extends RigidBody2D - -export var min_speed = 150 # Minimum speed range. -export var max_speed = 250 # Maximum speed range. - -func _ready(): - var mob_types = $AnimatedSprite.frames.get_animation_names() - $AnimatedSprite.animation = mob_types[randi() % mob_types.size()] - -func _on_VisibilityNotifier2D_screen_exited(): - #queue_free() - pass diff --git a/Mob.tscn b/Mob.tscn deleted file mode 100644 index 7a09032..0000000 --- a/Mob.tscn +++ /dev/null @@ -1,51 +0,0 @@ -[gd_scene load_steps=10 format=2] - -[ext_resource path="res://dodge_assets/art/enemySwimming_1.png" type="Texture" id=1] -[ext_resource path="res://dodge_assets/art/enemyWalking_1.png" type="Texture" id=2] -[ext_resource path="res://dodge_assets/art/enemySwimming_2.png" type="Texture" id=3] -[ext_resource path="res://dodge_assets/art/enemyFlyingAlt_2.png" type="Texture" id=4] -[ext_resource path="res://dodge_assets/art/enemyFlyingAlt_1.png" type="Texture" id=5] -[ext_resource path="res://dodge_assets/art/enemyWalking_2.png" type="Texture" id=6] -[ext_resource path="res://Mob.gd" type="Script" id=7] - -[sub_resource type="SpriteFrames" id=1] -animations = [ { -"frames": [ ExtResource( 5 ), ExtResource( 4 ) ], -"loop": true, -"name": "fly", -"speed": 5.0 -}, { -"frames": [ ExtResource( 2 ), ExtResource( 6 ) ], -"loop": true, -"name": "walk", -"speed": 3.0 -}, { -"frames": [ ExtResource( 1 ), ExtResource( 3 ) ], -"loop": true, -"name": "swim", -"speed": 5.0 -} ] - -[sub_resource type="CapsuleShape2D" id=2] -radius = 34.9916 -height = 29.2442 - -[node name="Mob" type="RigidBody2D"] -collision_mask = 0 -gravity_scale = 0.0 -script = ExtResource( 7 ) -__meta__ = { -"_edit_group_": true -} - -[node name="AnimatedSprite" type="AnimatedSprite" parent="."] -scale = Vector2( 0.75, 0.75 ) -frames = SubResource( 1 ) -animation = "walk" -playing = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -rotation = 1.5708 -shape = SubResource( 2 ) - -[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."] diff --git a/OrbItem.gd b/OrbItem.gd new file mode 100644 index 0000000..84f34e1 --- /dev/null +++ b/OrbItem.gd @@ -0,0 +1,7 @@ +extends Area2D + +func _on_OrbItem_area_shape_entered(area_id, area, area_shape, self_shape): + if area.name == "Player": + var dk = DashKey.new() + area.key_map[KEY_SHIFT] = dk.register(area) + get_tree().queue_delete(self) diff --git a/OrbItem.tscn b/OrbItem.tscn new file mode 100644 index 0000000..bff4e51 --- /dev/null +++ b/OrbItem.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://assets/art/red-orb.png" type="Texture" id=1] +[ext_resource path="res://OrbItem.gd" type="Script" id=2] + +[sub_resource type="CircleShape2D" id=1] +radius = 33.9555 + +[node name="OrbItem" type="Area2D"] +gravity = 0.0 +script = ExtResource( 2 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) + +[node name="Sprite" type="Sprite" parent="."] +texture = ExtResource( 1 ) + +[node name="Label" type="Label" parent="."] +margin_left = 34.3329 +margin_top = -36.8527 +margin_right = 143.333 +margin_bottom = -22.8527 +rect_scale = Vector2( 3, 3 ) +text = "PICKUP TO DASH" +__meta__ = { +"_edit_use_anchors_": false +} +[connection signal="area_shape_entered" from="." to="." method="_on_OrbItem_area_shape_entered"] diff --git a/player.gd b/Player.gd similarity index 86% rename from player.gd rename to Player.gd index feb566a..123752b 100644 --- a/player.gd +++ b/Player.gd @@ -8,12 +8,15 @@ enum PlayerState { NORMAL = 0, # < default from Actor var screen_size # Size of the game window. var last_process_velocity = Vector2() +var key_map + func start(pos): position = pos state_map = {PlayerState.NORMAL: PlayerNormal.new(), - PlayerState.DASHING: PlayerDash.new(), - PlayerState.STANDING: PlayerStanding.new(), PlayerState.ATTACKING: PlayerAttack.new()} + + var ak = AttackKey.new() + key_map = { KEY_Z: ak.register(self) } show() func _process(delta): diff --git a/test-scene.tscn b/Player.tscn similarity index 64% rename from test-scene.tscn rename to Player.tscn index 861dd48..70b7655 100644 --- a/test-scene.tscn +++ b/Player.tscn @@ -1,75 +1,77 @@ -[gd_scene load_steps=33 format=2] - -[ext_resource path="res://assets/art/forward-sheet.png" type="Texture" id=1] -[ext_resource path="res://assets/art/backwards-sheet.png" type="Texture" id=2] -[ext_resource path="res://assets/art/idle-sheet.png" type="Texture" id=3] -[ext_resource path="res://assets/art/dash/dash-04.png" type="Texture" id=4] -[ext_resource path="res://player.gd" type="Script" id=5] -[ext_resource path="res://assets/art/dash/dash-02.png" type="Texture" id=6] -[ext_resource path="res://assets/art/dash/dash-06.png" type="Texture" id=7] -[ext_resource path="res://assets/art/dash/dash-09.png" type="Texture" id=8] -[ext_resource path="res://assets/art/dash/dash-01.png" type="Texture" id=9] -[ext_resource path="res://assets/art/dash/dash-05.png" type="Texture" id=10] -[ext_resource path="res://assets/art/dash/dash-07.png" type="Texture" id=11] -[ext_resource path="res://assets/art/dash/dash-03.png" type="Texture" id=12] -[ext_resource path="res://assets/art/dash/dash-08.png" type="Texture" id=13] -[ext_resource path="res://assets/art/slash/slash-02.png" type="Texture" id=14] -[ext_resource path="res://assets/art/slash/slash-03.png" type="Texture" id=15] -[ext_resource path="res://assets/art/slash/slash-01.png" type="Texture" id=16] -[ext_resource path="res://PlayerNormal.gd" type="Script" id=17] -[ext_resource path="res://assets/art/slash/slash-04.png" type="Texture" id=18] -[ext_resource path="res://PlayerDash.gd" type="Script" id=19] -[ext_resource path="res://PlayerStanding.gd" type="Script" id=20] -[ext_resource path="res://PlayerAttack.gd" type="Script" id=21] +[gd_scene load_steps=36 format=2] + +[ext_resource path="res://Player.gd" type="Script" id=1] +[ext_resource path="res://DashKey.gd" type="Script" id=2] +[ext_resource path="res://PlayerStanding.gd" type="Script" id=3] +[ext_resource path="res://PlayerDash.gd" type="Script" id=4] +[ext_resource path="res://PlayerAttack.gd" type="Script" id=5] +[ext_resource path="res://assets/art/backwards-sheet.png" type="Texture" id=6] +[ext_resource path="res://AttackKey.gd" type="Script" id=7] +[ext_resource path="res://assets/art/forward-sheet.png" type="Texture" id=8] +[ext_resource path="res://assets/art/dash/dash-04.png" type="Texture" id=9] +[ext_resource path="res://assets/art/idle-sheet.png" type="Texture" id=10] +[ext_resource path="res://assets/art/slash/slash-03.png" type="Texture" id=11] +[ext_resource path="res://assets/art/dash/dash-05.png" type="Texture" id=12] +[ext_resource path="res://assets/art/dash/dash-06.png" type="Texture" id=13] +[ext_resource path="res://assets/art/dash/dash-02.png" type="Texture" id=14] +[ext_resource path="res://assets/art/slash/slash-02.png" type="Texture" id=15] +[ext_resource path="res://PlayerNormal.gd" type="Script" id=16] +[ext_resource path="res://assets/art/dash/dash-08.png" type="Texture" id=17] +[ext_resource path="res://assets/art/dash/dash-03.png" type="Texture" id=18] +[ext_resource path="res://assets/art/dash/dash-07.png" type="Texture" id=19] +[ext_resource path="res://assets/art/dash/dash-09.png" type="Texture" id=20] +[ext_resource path="res://assets/art/dash/dash-01.png" type="Texture" id=21] +[ext_resource path="res://assets/art/slash/slash-01.png" type="Texture" id=22] +[ext_resource path="res://assets/art/slash/slash-04.png" type="Texture" id=23] [sub_resource type="AtlasTexture" id=1] flags = 4 -atlas = ExtResource( 3 ) +atlas = ExtResource( 10 ) region = Rect2( 0, 0, 45, 47 ) [sub_resource type="AtlasTexture" id=2] flags = 4 -atlas = ExtResource( 3 ) +atlas = ExtResource( 10 ) region = Rect2( 45, 0, 45, 47 ) [sub_resource type="AtlasTexture" id=3] flags = 4 -atlas = ExtResource( 3 ) +atlas = ExtResource( 10 ) region = Rect2( 90, 0, 45, 47 ) [sub_resource type="AtlasTexture" id=4] flags = 4 -atlas = ExtResource( 3 ) +atlas = ExtResource( 10 ) region = Rect2( 135, 0, 45, 47 ) [sub_resource type="AtlasTexture" id=5] flags = 4 -atlas = ExtResource( 1 ) +atlas = ExtResource( 8 ) region = Rect2( 0, 0, 45, 47 ) [sub_resource type="AtlasTexture" id=6] flags = 4 -atlas = ExtResource( 1 ) +atlas = ExtResource( 8 ) region = Rect2( 45, 0, 45, 47 ) [sub_resource type="AtlasTexture" id=7] flags = 4 -atlas = ExtResource( 1 ) +atlas = ExtResource( 8 ) region = Rect2( 90, 0, 45, 47 ) [sub_resource type="AtlasTexture" id=8] flags = 4 -atlas = ExtResource( 2 ) +atlas = ExtResource( 6 ) region = Rect2( 0, 0, 44, 47 ) [sub_resource type="AtlasTexture" id=9] flags = 4 -atlas = ExtResource( 2 ) +atlas = ExtResource( 6 ) region = Rect2( 44, 0, 44, 47 ) [sub_resource type="AtlasTexture" id=10] flags = 4 -atlas = ExtResource( 2 ) +atlas = ExtResource( 6 ) region = Rect2( 88, 0, 44, 47 ) [sub_resource type="SpriteFrames" id=11] @@ -79,7 +81,7 @@ animations = [ { "name": "idle", "speed": 5.0 }, { -"frames": [ ExtResource( 16 ), ExtResource( 14 ), ExtResource( 15 ), ExtResource( 18 ) ], +"frames": [ ExtResource( 22 ), ExtResource( 15 ), ExtResource( 11 ), ExtResource( 23 ) ], "loop": true, "name": "slash", "speed": 5.0 @@ -89,7 +91,7 @@ animations = [ { "name": "forward", "speed": 5.0 }, { -"frames": [ ExtResource( 9 ), ExtResource( 6 ), ExtResource( 12 ), ExtResource( 4 ), ExtResource( 4 ), ExtResource( 10 ), ExtResource( 7 ), ExtResource( 7 ), ExtResource( 11 ) ], +"frames": [ ExtResource( 21 ), ExtResource( 14 ), ExtResource( 18 ), ExtResource( 9 ), ExtResource( 9 ), ExtResource( 12 ), ExtResource( 13 ), ExtResource( 13 ), ExtResource( 19 ) ], "loop": true, "name": "dash", "speed": 5.0 @@ -99,34 +101,47 @@ animations = [ { "name": "backward", "speed": 5.0 }, { -"frames": [ ExtResource( 13 ), ExtResource( 13 ), ExtResource( 8 ) ], +"frames": [ ExtResource( 17 ), ExtResource( 17 ), ExtResource( 20 ) ], "loop": true, "name": "standing up", "speed": 5.0 } ] +[sub_resource type="CapsuleShape2D" id=12] +radius = 8.82094 +height = 0.0 + [node name="Player" type="Area2D"] -script = ExtResource( 5 ) +gravity = 0.0 +script = ExtResource( 1 ) __meta__ = { "_edit_group_": true } [node name="AnimatedSprite" type="AnimatedSprite" parent="."] frames = SubResource( 11 ) -animation = "slash" +animation = "idle" frame = 2 playing = true [node name="PlayerNormal" type="Node" parent="."] -script = ExtResource( 17 ) +script = ExtResource( 16 ) [node name="PlayerDash" type="Node" parent="."] -script = ExtResource( 19 ) +script = ExtResource( 4 ) [node name="PlayerStanding" type="Node" parent="."] -script = ExtResource( 20 ) +script = ExtResource( 3 ) [node name="PlayerAttack" type="Node" parent="."] -script = ExtResource( 21 ) -[connection signal="body_entered" from="." to="." method="_on_Player_body_entered"] +script = ExtResource( 5 ) + +[node name="DashKey" type="Node" parent="."] +script = ExtResource( 2 ) + +[node name="AttackKey" type="Node" parent="."] +script = ExtResource( 7 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 12 ) [connection signal="animation_finished" from="AnimatedSprite" to="." method="_on_AnimatedSprite_animation_finished"] diff --git a/PlayerNormal.gd b/PlayerNormal.gd index 888a1ad..8a3f9dc 100644 --- a/PlayerNormal.gd +++ b/PlayerNormal.gd @@ -3,11 +3,13 @@ class_name PlayerNormal func run(actor, delta): - var velocity = Vector2() # The player's movement vector. - if Input.is_key_pressed(KEY_SHIFT): - actor.setState(actor.PlayerState.DASHING) - if Input.is_key_pressed(KEY_Z): - actor.setState(actor.PlayerState.ATTACKING) + var velocity = Vector2() # The player's movement vector. + + var keys = actor.key_map.keys() + for i in keys: + if Input.is_key_pressed(i): + actor.key_map[i].trigger(actor) + if Input.is_action_pressed("ui_right"): velocity.x += 1 if Input.is_action_pressed("ui_left"): @@ -34,4 +36,5 @@ func run(actor, delta): actor.last_process_velocity = velocity func spriteFinished(actor): + actor.show() pass diff --git a/Timer.gd b/Timer.gd deleted file mode 100644 index 56aaee5..0000000 --- a/Timer.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends Timer - -func _ready(): - Timer.wait_time(2.0) diff --git a/project.godot b/project.godot index b30fff9..176650d 100644 --- a/project.godot +++ b/project.godot @@ -9,17 +9,22 @@ config_version=4 _global_script_classes=[ { -"base": "Node", -"class": "Action", -"language": "GDScript", -"path": "res://Action.gd" -}, { "base": "Area2D", "class": "Actor", "language": "GDScript", "path": "res://Actor.gd" }, { "base": "Node", +"class": "AttackKey", +"language": "GDScript", +"path": "res://AttackKey.gd" +}, { +"base": "Node", +"class": "DashKey", +"language": "GDScript", +"path": "res://DashKey.gd" +}, { +"base": "Node", "class": "PlayerAttack", "language": "GDScript", "path": "res://PlayerAttack.gd" @@ -40,8 +45,9 @@ _global_script_classes=[ { "path": "res://PlayerStanding.gd" } ] _global_script_class_icons={ -"Action": "", "Actor": "", +"AttackKey": "", +"DashKey": "", "PlayerAttack": "", "PlayerDash": "", "PlayerNormal": "", diff --git a/test-scene.gd b/test-scene.gd deleted file mode 100644 index 3dff8b4..0000000 --- a/test-scene.gd +++ /dev/null @@ -1,15 +0,0 @@ -extends Control - -# Called when the node enters the scene tree for the first time. -func _ready(): - $Label.text = "Press me, senpai!" - - -func _on_Button_pressed(): - $Label.text = "HELLO!" - $Timer.stop() - $Timer.start() - - -func _on_Timer_timeout(): - $Label.text = "Press me, senpai!"