Work
Set up logic for collision with guard. Some resizing of the DungeonEntrance scene.
This commit is contained in:
parent
9ff2eb1867
commit
c180b0312c
3 changed files with 101 additions and 12 deletions
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=4 format=3 uid="uid://b55f770t7xs6a"]
|
[gd_scene load_steps=7 format=3 uid="uid://b55f770t7xs6a"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://npjqgc3tdgs1" path="res://gimp/DungeonEntrance.png" id="1_vo6aq"]
|
[ext_resource type="Texture2D" uid="uid://npjqgc3tdgs1" path="res://gimp/DungeonEntrance.png" id="1_vo6aq"]
|
||||||
[ext_resource type="Texture2D" uid="uid://nocjsuuft8qx" path="res://gimp/DungeonGuard.png" id="2_nujkm"]
|
[ext_resource type="Texture2D" uid="uid://nocjsuuft8qx" path="res://gimp/DungeonGuard.png" id="2_nujkm"]
|
||||||
|
@ -7,24 +7,60 @@
|
||||||
radius = 15.0
|
radius = 15.0
|
||||||
height = 32.0
|
height = 32.0
|
||||||
|
|
||||||
|
[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_ocep5"]
|
||||||
|
normal = Vector2(1, 0)
|
||||||
|
|
||||||
|
[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_gq7j0"]
|
||||||
|
|
||||||
|
[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_xvl4y"]
|
||||||
|
normal = Vector2(-1, 0)
|
||||||
|
|
||||||
[node name="Node2D" type="Node2D"]
|
[node name="Node2D" type="Node2D"]
|
||||||
|
|
||||||
[node name="DungeonEntrance" type="Sprite2D" parent="."]
|
[node name="DungeonEntrance" type="Sprite2D" parent="."]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
position = Vector2(-1, -320)
|
position = Vector2(2, -784)
|
||||||
|
scale = Vector2(1.995, 1.995)
|
||||||
texture = ExtResource("1_vo6aq")
|
texture = ExtResource("1_vo6aq")
|
||||||
|
|
||||||
[node name="StaticBody2D" type="StaticBody2D" parent="DungeonEntrance"]
|
[node name="StaticBody2D" type="StaticBody2D" parent="DungeonEntrance"]
|
||||||
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="DungeonEntrance/StaticBody2D"]
|
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="DungeonEntrance/StaticBody2D"]
|
||||||
|
visible = false
|
||||||
polygon = PackedVector2Array(-160, 127, -159, -129, 160, -126, 161, 127, 21, 127, 21, 79, -19, 79, -19, 127)
|
polygon = PackedVector2Array(-160, 127, -159, -129, 160, -126, 161, 127, 21, 127, 21, 79, -19, 79, -19, 127)
|
||||||
|
|
||||||
[node name="DungeonGuard" type="Sprite2D" parent="."]
|
[node name="DungeonGuard" type="Sprite2D" parent="."]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
position = Vector2(0, -208)
|
position = Vector2(2, -552)
|
||||||
|
scale = Vector2(1.71, 1.71)
|
||||||
texture = ExtResource("2_nujkm")
|
texture = ExtResource("2_nujkm")
|
||||||
|
|
||||||
[node name="StaticBody2D" type="StaticBody2D" parent="DungeonGuard"]
|
[node name="DungeonGuardStaticBody" type="StaticBody2D" parent="DungeonGuard"]
|
||||||
|
visible = false
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="DungeonGuard/StaticBody2D"]
|
[node name="DungeonGuardCollider" type="CollisionShape2D" parent="DungeonGuard/DungeonGuardStaticBody"]
|
||||||
|
visible = false
|
||||||
shape = SubResource("CapsuleShape2D_18p8i")
|
shape = SubResource("CapsuleShape2D_18p8i")
|
||||||
|
|
||||||
|
[node name="StaticBody2D" type="StaticBody2D" parent="."]
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
|
||||||
|
position = Vector2(-307, -1)
|
||||||
|
shape = SubResource("WorldBoundaryShape2D_ocep5")
|
||||||
|
|
||||||
|
[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"]
|
||||||
|
position = Vector2(0, 210)
|
||||||
|
shape = SubResource("WorldBoundaryShape2D_gq7j0")
|
||||||
|
|
||||||
|
[node name="CollisionShape2D3" type="CollisionShape2D" parent="StaticBody2D"]
|
||||||
|
position = Vector2(314, 5)
|
||||||
|
shape = SubResource("WorldBoundaryShape2D_xvl4y")
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="."]
|
||||||
|
z_index = 5
|
||||||
|
offset_left = -111.0
|
||||||
|
offset_top = 152.0
|
||||||
|
offset_right = 111.0
|
||||||
|
offset_bottom = 175.0
|
||||||
|
text = "The Dungeon is to the north!"
|
||||||
|
|
59
MainLogic.gd
59
MainLogic.gd
|
@ -10,6 +10,10 @@ extends Node2D
|
||||||
|
|
||||||
@onready var music_player = $MusicPlayer
|
@onready var music_player = $MusicPlayer
|
||||||
|
|
||||||
|
@onready var camera = $Camera2D
|
||||||
|
|
||||||
|
const camera_move_speed = 80.0
|
||||||
|
|
||||||
const text_speed = 0.08
|
const text_speed = 0.08
|
||||||
|
|
||||||
const start_text = "You seek the elementals?\nProve your worth!\nShow the elements your mastery over summoning, and they are yours!"
|
const start_text = "You seek the elementals?\nProve your worth!\nShow the elements your mastery over summoning, and they are yours!"
|
||||||
|
@ -46,12 +50,16 @@ enum StateT {
|
||||||
Introduction_05_post,
|
Introduction_05_post,
|
||||||
Introduction_06,
|
Introduction_06,
|
||||||
Introduction_06_post,
|
Introduction_06_post,
|
||||||
Dungeon_Entrance
|
Dungeon_Entrance_pre,
|
||||||
|
Dungeon_Entrance_loading,
|
||||||
|
Dungeon_Entrance,
|
||||||
|
Dungeon_Entrance_Battle,
|
||||||
}
|
}
|
||||||
|
|
||||||
static var state_dict = {}
|
static var state_dict = {}
|
||||||
|
|
||||||
var tween_volume
|
var tween_volume
|
||||||
|
var tween_text
|
||||||
|
|
||||||
var diamonds_gone = false
|
var diamonds_gone = false
|
||||||
|
|
||||||
|
@ -59,6 +67,9 @@ var music_file
|
||||||
|
|
||||||
var gander
|
var gander
|
||||||
|
|
||||||
|
var level
|
||||||
|
var level_guard = null
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready():
|
func _ready():
|
||||||
if not state_dict.has("state"):
|
if not state_dict.has("state"):
|
||||||
|
@ -149,6 +160,23 @@ func _process(delta):
|
||||||
update_text(intro_text_06, StateT.Introduction_06_post)
|
update_text(intro_text_06, StateT.Introduction_06_post)
|
||||||
StateT.Introduction_06_post:
|
StateT.Introduction_06_post:
|
||||||
pass
|
pass
|
||||||
|
StateT.Dungeon_Entrance_loading:
|
||||||
|
gander.player_controlled = true
|
||||||
|
gander.current_scene_type = gander.GanderSceneT.Gameplay
|
||||||
|
var dungeon_scene = load("res://DungeonEntrance.tscn")
|
||||||
|
level = dungeon_scene.instantiate()
|
||||||
|
add_child(level)
|
||||||
|
state_dict["state"] = StateT.Dungeon_Entrance
|
||||||
|
lower_label.text = "Arrow keys/WASD/Left-Stick to move."
|
||||||
|
tween_text = get_tree().create_tween()
|
||||||
|
tween_text.tween_property(lower_label, "self_modulate", Color(1, 1, 1, 0), 5)
|
||||||
|
StateT.Dungeon_Entrance:
|
||||||
|
camera_to_gander(delta)
|
||||||
|
if level_guard == null:
|
||||||
|
level_guard = level.find_child("DungeonGuardStaticBody")
|
||||||
|
if level_guard != null and gander.last_collided_id == level_guard.get_instance_id():
|
||||||
|
print("collided with guard.")
|
||||||
|
gander.last_collided_id = null
|
||||||
_:
|
_:
|
||||||
pass
|
pass
|
||||||
if gander is MainCharacter and not gander.player_controlled and gander.current_scene_type == gander.GanderSceneT.Introduction:
|
if gander is MainCharacter and not gander.player_controlled and gander.current_scene_type == gander.GanderSceneT.Introduction:
|
||||||
|
@ -170,7 +198,10 @@ func _unhandled_input(event):
|
||||||
state_dict["state"] = StateT.Start_Stopping
|
state_dict["state"] = StateT.Start_Stopping
|
||||||
tween_volume = get_tree().create_tween()
|
tween_volume = get_tree().create_tween()
|
||||||
tween_volume.tween_property(music_player, "volume_db", -80.0, 4.0)
|
tween_volume.tween_property(music_player, "volume_db", -80.0, 4.0)
|
||||||
tween_volume.tween_callback(start_volume_tween_callback)
|
tween_volume.tween_callback(func():
|
||||||
|
music_player.stop()
|
||||||
|
state_dict["state"] = StateT.MainMenu
|
||||||
|
)
|
||||||
main_label.text = ""
|
main_label.text = ""
|
||||||
lower_label.text = ""
|
lower_label.text = ""
|
||||||
StateT.Introduction_00:
|
StateT.Introduction_00:
|
||||||
|
@ -239,17 +270,20 @@ func _unhandled_input(event):
|
||||||
state_dict["text_idx"] = 0
|
state_dict["text_idx"] = 0
|
||||||
main_label.text = intro_text_06
|
main_label.text = intro_text_06
|
||||||
StateT.Introduction_06_post:
|
StateT.Introduction_06_post:
|
||||||
state_dict["state"] = StateT.Dungeon_Entrance
|
state_dict["state"] = StateT.Dungeon_Entrance_pre
|
||||||
state_dict["timer"] = 0.0
|
state_dict["timer"] = 0.0
|
||||||
state_dict["text_idx"] = 0
|
state_dict["text_idx"] = 0
|
||||||
main_label.text = ""
|
main_label.text = ""
|
||||||
|
tween_volume = get_tree().create_tween()
|
||||||
|
tween_volume.tween_property(music_player, "volume_db", -80.0, 4.0)
|
||||||
|
tween_volume.tween_callback(func():
|
||||||
|
music_player.stop()
|
||||||
|
state_dict["state"] = StateT.Dungeon_Entrance_loading
|
||||||
|
music_player.volume_db = 0.0
|
||||||
|
)
|
||||||
_:
|
_:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func start_volume_tween_callback():
|
|
||||||
music_player.stop()
|
|
||||||
state_dict["state"] = StateT.MainMenu
|
|
||||||
|
|
||||||
func diamond_position_update():
|
func diamond_position_update():
|
||||||
fire_diamond.position.x = cos(state_dict["start_diamonds"]["angle"]) * state_dict["start_diamonds"]["dist"]
|
fire_diamond.position.x = cos(state_dict["start_diamonds"]["angle"]) * state_dict["start_diamonds"]["dist"]
|
||||||
fire_diamond.position.y = sin(state_dict["start_diamonds"]["angle"]) * state_dict["start_diamonds"]["dist"]
|
fire_diamond.position.y = sin(state_dict["start_diamonds"]["angle"]) * state_dict["start_diamonds"]["dist"]
|
||||||
|
@ -288,3 +322,14 @@ func update_stop_diamonds(delta):
|
||||||
state_dict["start_diamonds"]["angle"] -= TAU
|
state_dict["start_diamonds"]["angle"] -= TAU
|
||||||
|
|
||||||
diamond_position_update()
|
diamond_position_update()
|
||||||
|
|
||||||
|
func camera_to_gander(delta):
|
||||||
|
var diff = gander.position - camera.position
|
||||||
|
if diff.length() > 0.04:
|
||||||
|
var move_vec = diff.normalized() * camera_move_speed * delta
|
||||||
|
if diff.length() < move_vec.length():
|
||||||
|
camera.position = gander.position
|
||||||
|
else:
|
||||||
|
camera.position += move_vec
|
||||||
|
else:
|
||||||
|
camera.position = gander.position
|
||||||
|
|
|
@ -10,7 +10,10 @@ enum GanderSceneT {
|
||||||
var current_scene_type = GanderSceneT.Introduction
|
var current_scene_type = GanderSceneT.Introduction
|
||||||
var auto_control_action = "facing_front"
|
var auto_control_action = "facing_front"
|
||||||
|
|
||||||
|
var last_collided_id = null
|
||||||
|
|
||||||
@onready var animated = $AnimatedSprite2D
|
@onready var animated = $AnimatedSprite2D
|
||||||
|
@onready var guard = $DungeonGuard
|
||||||
|
|
||||||
const SPEED = 150.0
|
const SPEED = 150.0
|
||||||
const ANIM_DEADZONE = 0.3
|
const ANIM_DEADZONE = 0.3
|
||||||
|
@ -58,3 +61,8 @@ func _physics_process(delta):
|
||||||
animated.play(auto_control_action)
|
animated.play(auto_control_action)
|
||||||
|
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
|
var last_collision = get_last_slide_collision()
|
||||||
|
if last_collision != null:
|
||||||
|
last_collided_id = last_collision.get_collider_id()
|
||||||
|
else:
|
||||||
|
last_collided_id = null
|
||||||
|
|
Loading…
Reference in a new issue