Compare commits

...

3 Commits

Author SHA1 Message Date
Ervan Lefevre 65369ec029 🧱: Level 4 and 5 are done ! 2 years ago
Ervan Lefevre 1adc44150b 🧱: Level 3 2 years ago
Ervan Lefevre 5024b58f39 🧱: Level 3.1 is ready 2 years ago
  1. 1
      nodes/npc/npc.gd
  2. 1
      nodes/npc_factory/npc_factory.gd
  3. 2
      nodes/npc_factory/npc_factory.tscn
  4. 1
      nodes/obstacle/obstacle.gd
  5. 1
      nodes/obstacle/rock.tscn
  6. 42
      nodes/player/player.gd
  7. 1
      nodes/player/player.tscn
  8. 27
      nodes/triggers/level_trigger.gd
  9. 7
      nodes/triggers/level_trigger.tscn
  10. 11
      nodes/triggers/win_trigger.gd
  11. 8
      nodes/triggers/win_trigger.tscn
  12. 43
      scenes/lose_screen.tscn
  13. 117
      scenes/poc.tscn
  14. 43
      scenes/win_screen.tscn
  15. 2
      scripts/ia/fsm.gd

@ -54,6 +54,7 @@ func grabbed(by):
$shape.disabled = true
$fsm.set_physics_process(false)
reparent(by)
position.y = 0
func dropped():
$shape.disabled = false

@ -9,6 +9,7 @@ var current_spawn_duration = 0
func _ready():
if !NPC_SCENE:
push_error("npc scene is null")
set_physics_process(false)
func _physics_process(delta):
current_spawn_duration += delta

@ -8,7 +8,7 @@
[node name="npc_factory" type="Node2D"]
script = ExtResource("1_p5cuf")
NPC_SCENE = ExtResource("2_exj6u")
SPAWN_DELAY = 2.0
SPAWN_DELAY = 8.0
[node name="factory_death" type="Area2D" parent="." groups=["factory_death"]]
monitoring = false

@ -9,6 +9,7 @@ func grabbed(by):
sleeping = true
gravity_scale = 0
reparent(by)
position.y = 0
func dropped():
$shape.disabled = false

@ -7,7 +7,6 @@
size = Vector2(32, 32)
[node name="rock" type="RigidBody2D" groups=["obstacle"]]
can_sleep = false
script = ExtResource("1_pft6b")
[node name="shape" type="CollisionShape2D" parent="."]

@ -2,9 +2,14 @@ extends CharacterBody2D
class_name Player
@export_file('*.tscn') var LOSE_SCREEN;
const SPEED = 100.0
const JUMP_VELOCITY = 200.0
const APNEA_DURATION = 10
const DURATION_BEFORE_LOSE_SCREEN = 2
const STATES= [
"climb",
@ -27,7 +32,7 @@ var use_gravity = {
}
var can_grab_obstacles = {
"climb": false,
"climb": true,
"die": false,
"idle": true,
"jump": false,
@ -114,7 +119,7 @@ func climb_state(_delta):
if is_on_ceiling():
var direction = Input.get_axis("player_left", "player_right")
velocity = Vector2(direction * SPEED, 0)
velocity = Vector2(direction * SPEED, -1)
if Input.is_action_just_pressed("player_jump") and is_on_wall():
var wall_position = get_slide_collision(0).get_normal().x
@ -132,6 +137,8 @@ func climb_state(_delta):
func after_state(delta):
move_and_slide()
if is_dead():
return
if use_gravity[$fsm.current_state] == true:
handle_gravity(delta)
@ -164,9 +171,15 @@ func handle_grab():
drop_obstacle()
func do_grab(obstacle):
# BUGFIX : When grabbing a rock, allows other rocks to fall
for ob in get_tree().get_nodes_in_group("obstacle"):
if ob.has_method("set_sleeping"):
ob.sleeping = false
grabbed_obstacle = obstacle
obstacle.grabbed($oriented_container)
func drop_obstacle():
grabbed_obstacle.dropped()
grabbed_obstacle = null
@ -185,8 +198,9 @@ func handle_sprite_orientation():
elif is_on_ceiling_only():
if velocity.x != 0:
$oriented_container.rotation = PI if (velocity.x > 0) else -PI
sprite.flip_h = velocity.x > 0
$oriented_container.rotation = 0 if (velocity.x > 0) else PI
sprite.flip_v = velocity.x > 0
sprite.flip_h = false
else:
if velocity.x != 0:
$oriented_container.rotation = 0 if (velocity.x > 0) else PI
@ -214,15 +228,31 @@ func on_exit_swim_state():
sprite.modulate = Color(1,1,1)
func swim():
if is_dead():
return
$fsm.set_next_state("swim")
func unswim():
if is_dead():
return
$fsm.set_next_state("idle")
func die():
$fsm.set_next_state("die")
func is_dead():
return $fsm.current_state == "die"
func on_enter_die_state():
velocity = Vector2(0, -500)
velocity = Vector2(0, 0)
$shape.disabled = true
# $AnimationPlayer.play("die")
$oriented_container.rotation = 0
sprite.flip_v = true
func die_state(_delta):
prints("die_state", $fsm.state_duration)
if $fsm.state_duration > DURATION_BEFORE_LOSE_SCREEN:
get_tree().change_scene_to_file(LOSE_SCREEN)

@ -10,6 +10,7 @@ height = 24.0
[node name="player" type="CharacterBody2D"]
script = ExtResource("1_exx2i")
LOSE_SCREEN = "res://scenes/lose_screen.tscn"
[node name="fsm" type="Node2D" parent="." node_paths=PackedStringArray("root")]
script = ExtResource("2_ix1o4")

@ -0,0 +1,27 @@
extends Area2D
@export var KILL_ALL_NPCS = false
@export var LEVEL_MESSAGE : String = ''
@export var ENABLED_NODES : Array[Node] = []
@export var DISABLED_NODES : Array[Node] = []
# Called when the node enters the scene tree for the first time.
func _ready():
body_entered.connect(on_body_entered)
func on_body_entered(body):
if !body.is_in_group('player'):
return
if KILL_ALL_NPCS:
if body.is_in_group("npc"):
body.queue_free()
if LEVEL_MESSAGE:
# TODO
print(LEVEL_MESSAGE)
pass
for node in ENABLED_NODES:
node.set_physics_process(true)
for node in DISABLED_NODES:
node.set_physics_process(false)

@ -0,0 +1,7 @@
[gd_scene load_steps=2 format=3 uid="uid://cdq58egi0j65h"]
[ext_resource type="Script" path="res://nodes/triggers/level_trigger.gd" id="1_amwjw"]
[node name="level_trigger" type="Area2D"]
monitorable = false
script = ExtResource("1_amwjw")

@ -0,0 +1,11 @@
extends Area2D
@export_file('*.tscn') var WIN_SCENE;
# Called when the node enters the scene tree for the first time.
func _ready():
body_entered.connect(on_body_entered)
func on_body_entered(body):
if body.is_in_group('player'):
get_tree().change_scene_to_file(WIN_SCENE)

@ -0,0 +1,8 @@
[gd_scene load_steps=2 format=3 uid="uid://de7ehbowni47v"]
[ext_resource type="Script" path="res://nodes/triggers/win_trigger.gd" id="1_jk7wd"]
[node name="win_trigger" type="Area2D"]
monitorable = false
script = ExtResource("1_jk7wd")
WIN_SCENE = "res://scenes/win_screen.tscn"

@ -0,0 +1,43 @@
[gd_scene load_steps=3 format=3 uid="uid://ckt2twwgcgwtt"]
[ext_resource type="Script" path="res://scripts/ui/change_scene_button.gd" id="1_oyu1u"]
[ext_resource type="Script" path="res://scripts/ui/quit_button.gd" id="2_7spq8"]
[node name="lose_screen" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Panel" type="Panel" parent="."]
layout_mode = 0
offset_right = 1920.0
offset_bottom = 1080.0
[node name="Label" type="Label" parent="Panel"]
layout_mode = 0
offset_right = 1912.0
offset_bottom = 376.0
text = "You lose"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Button" type="Button" parent="Panel"]
layout_mode = 0
offset_left = 800.0
offset_top = 744.0
offset_right = 1144.0
offset_bottom = 840.0
text = "Play Again"
script = ExtResource("1_oyu1u")
TARGET_SCENE = "res://scenes/main_menu.tscn"
[node name="quit" type="Button" parent="Panel"]
offset_left = 629.0
offset_top = 875.0
offset_right = 1284.0
offset_bottom = 952.0
text = "Quit"
script = ExtResource("2_7spq8")

File diff suppressed because one or more lines are too long

@ -0,0 +1,43 @@
[gd_scene load_steps=3 format=3 uid="uid://tb03t1t5hcxs"]
[ext_resource type="Script" path="res://scripts/ui/change_scene_button.gd" id="1_ajo3i"]
[ext_resource type="Script" path="res://scripts/ui/quit_button.gd" id="2_6iycq"]
[node name="win_screen" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Panel" type="Panel" parent="."]
layout_mode = 0
offset_right = 1920.0
offset_bottom = 1080.0
[node name="Label" type="Label" parent="Panel"]
layout_mode = 0
offset_right = 1912.0
offset_bottom = 376.0
text = "You won"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Button" type="Button" parent="Panel"]
layout_mode = 0
offset_left = 800.0
offset_top = 744.0
offset_right = 1144.0
offset_bottom = 840.0
text = "Play Again"
script = ExtResource("1_ajo3i")
TARGET_SCENE = "res://scenes/main_menu.tscn"
[node name="quit" type="Button" parent="Panel"]
offset_left = 629.0
offset_top = 875.0
offset_right = 1284.0
offset_bottom = 952.0
text = "Quit"
script = ExtResource("2_6iycq")

@ -41,7 +41,7 @@ func _transition():
previous_state = current_state
current_state = next_state
next_state = null
print(self.name + " transitioning to " + current_state)
print(get_parent().name + " transitioning to " + current_state)
if previous_state:
var on_exit_state_method = "on_exit_" + previous_state + "_state"

Loading…
Cancel
Save