added multiple levels, added slime and player damage and death
This commit is contained in:
1 parent
293f106379
commit
3a76ac8145
12 files changed
+1109
-14
No files matched your search
@@ -1,10 +1,41 @@
|
||||
class_name GameController extends Node2D
|
||||
extends Node2D
|
||||
|
||||
signal destroy(body)
|
||||
signal level_change_signal(level)
|
||||
|
||||
var levels = ["res://scenes/level1.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"]
|
||||
var current_level_index = 0
|
||||
var level_times = [15,20,25]
|
||||
var time_available = 0
|
||||
|
||||
var timer = Timer.new()
|
||||
var player:Player;
|
||||
var enemies = {}
|
||||
|
||||
func _ready():
|
||||
get_window().grab_focus() # Replace with function body.
|
||||
reset()
|
||||
add_child(timer)
|
||||
timer.wait_time = 1
|
||||
timer.one_shot = false
|
||||
timer.connect("timeout", timer_tick)
|
||||
timer.start()
|
||||
|
||||
func timer_tick():
|
||||
time_available -= 1
|
||||
if time_available <= 0:
|
||||
print("you lose")
|
||||
level_change_signal.emit(levels[current_level_index])
|
||||
reset()
|
||||
|
||||
func reset():
|
||||
time_available = level_times[current_level_index]
|
||||
if player:
|
||||
player.health = 5
|
||||
|
||||
func stop():
|
||||
timer.stop()
|
||||
|
||||
func _process(delta):
|
||||
pass
|
||||
|
||||
@@ -16,6 +47,29 @@ func _on_area_2d_trigger_active_signal(body, intentMessage):
|
||||
var crate_num : int = 0
|
||||
func set_crate_num(count: int):
|
||||
crate_num = count
|
||||
print("number of crates: " + str(crate_num))
|
||||
# print("number of crates: " + str(crate_num))
|
||||
if crate_num <= 0:
|
||||
print("You Win!")
|
||||
current_level_index += 1
|
||||
if current_level_index == levels.size():
|
||||
print("You Win!")
|
||||
stop()
|
||||
else:
|
||||
level_change_signal.emit(levels[current_level_index])
|
||||
reset()
|
||||
|
||||
func _on_slime_damage(body, slime):
|
||||
print("game controller sees slime damage")
|
||||
player.health -= enemies[slime]["damage"]
|
||||
if player.health <= 0:
|
||||
print("dead")
|
||||
level_change_signal.emit(levels[current_level_index])
|
||||
|
||||
func add_enemy(slime):
|
||||
var enemy_stat = {
|
||||
"health": 5,
|
||||
"damage": 3
|
||||
}
|
||||
enemies[slime] = enemy_stat
|
||||
|
||||
func _on_slime_struck(body, slime):
|
||||
print("game controller sees slime struck")
|
||||
@@ -6,6 +6,8 @@ class_name Player extends CharacterBody2D
|
||||
@onready var right_marker: Marker2D = $right_marker
|
||||
@onready var graphic: AnimatedSprite2D = $graphic
|
||||
|
||||
signal new_player(player)
|
||||
|
||||
const SPEED = 300.0
|
||||
const JUMP_VELOCITY = -400.0
|
||||
var direction : float = 0
|
||||
@@ -15,6 +17,10 @@ var shove_target: RigidBody2D
|
||||
enum State { IDLE, RUN, JUMP, APEX, FALL }
|
||||
var state: State = State.IDLE
|
||||
var up_jump:bool = false
|
||||
var health:int = 4
|
||||
|
||||
func _ready():
|
||||
new_player.emit(self)
|
||||
|
||||
func _physics_process(delta: float):
|
||||
handle_input()
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
class_name SceneManager extends Node2D
|
||||
|
||||
@onready var game_node: Node2D = $".."
|
||||
@onready var crates: Node2D = $"../crates"
|
||||
var grenade = preload("res://scenes/grenade.tscn")
|
||||
@onready var enemies = $"../Enemies"
|
||||
@onready var player = $"../player"
|
||||
|
||||
func _ready() -> void:
|
||||
print("scene manager is ready")
|
||||
game_node.destroy.connect(destroy)
|
||||
GameController.destroy.connect(destroy)
|
||||
GameController.level_change_signal.connect(change_scene)
|
||||
build_level()
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
@@ -14,6 +16,21 @@ func _process(delta: float) -> void:
|
||||
|
||||
func build_level() -> void:
|
||||
update_crates()
|
||||
if enemies:
|
||||
update_enemies()
|
||||
if player:
|
||||
GameController.player = player
|
||||
|
||||
func update_enemies():
|
||||
for enemy in enemies.get_children():
|
||||
if not enemy.slime_damage.is_connected(GameController._on_slime_damage):
|
||||
enemy.slime_damage.connect(GameController._on_slime_damage)
|
||||
enemy.slime_struck.connect(GameController._on_slime_struck)
|
||||
GameController.add_enemy(enemy)
|
||||
|
||||
func change_scene(level):
|
||||
print("changing scene to ", level)
|
||||
get_tree().call_deferred("change_scene_to_file", level)
|
||||
|
||||
func make_grenade(grenade_pos: Transform2D, grenade_dir: int) -> void:
|
||||
print("scene manager making grenade")
|
||||
@@ -30,7 +47,7 @@ func update_crates() -> void:
|
||||
if not obj.tree_exited.is_connected(update_crates):
|
||||
obj.tree_exited.connect(update_crates)
|
||||
crate_total += 1
|
||||
game_node.set_crate_num(crate_total)
|
||||
GameController.set_crate_num(crate_total)
|
||||
|
||||
func destroy(body):
|
||||
if body is BrownBox:
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
class_name Slime extends Area2D
|
||||
|
||||
@onready var animated_sprite_2d = $AnimatedSprite2D
|
||||
@onready var left_cast = $LeftCast
|
||||
@onready var right_cast = $RightCast
|
||||
@onready var left_down_cast = $LeftDownCast
|
||||
@onready var right_down_cast = $RightDownCast
|
||||
|
||||
signal slime_damage(body, slime)
|
||||
signal slime_struck(body, slime)
|
||||
|
||||
var speed:int = 100
|
||||
var direction = 1
|
||||
|
||||
func _ready():
|
||||
pass
|
||||
|
||||
func turn_right():
|
||||
direction = 1
|
||||
animated_sprite_2d.flip_h = false
|
||||
|
||||
func turn_left():
|
||||
direction = -1
|
||||
animated_sprite_2d.flip_h = true
|
||||
|
||||
func _process(delta: float):
|
||||
if right_cast.is_colliding() and not right_cast.get_collider() is Player:
|
||||
turn_left()
|
||||
elif left_cast.is_colliding() and not left_cast.get_collider() is Player:
|
||||
turn_right()
|
||||
if not right_down_cast.is_colliding():
|
||||
turn_left()
|
||||
elif not left_down_cast.is_colliding():
|
||||
turn_right()
|
||||
position.x += direction*speed*delta
|
||||
|
||||
func _on_body_entered(body):
|
||||
if body is Player:
|
||||
slime_damage.emit(body, self)
|
||||
if body is Grenade:
|
||||
slime_struck.emit(body, self)
|
||||
@@ -0,0 +1 @@
|
||||
uid://bl1mwmhvr6pcx
|
||||
Reference in new issue
Block a user