enemies, multilevels

This commit is contained in:
torontocaper committed 2026-05-25 21:03:44 -04:00
1 parent f7c4c4b3ca
commit ae5d43d74e
11 files changed
+1101 -13

No files matched your search

+55 -3
View File
@@ -1,12 +1,42 @@
class_name GameController extends Node2D
extends Node2D
signal destroySignal(body)
signal levelChangeSignal(level)
var levels = ["res://Scenes/game.tscn","res://Scenes/level 2.tscn","res://Scenes/level3.tscn"]
var currentLevel = 0
var timers = [5,10,15]
var timeAvailable=0
var timer = Timer.new()
#player variables
var playerCurrentHealth:int = 100
#enemies
var enemiesDict = {}
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
get_window().grab_focus()
add_child(timer)
timer.wait_time = 1
timer.one_shot = false
timer.connect("timeout", secondCounter)
timer.start()
func secondCounter()->void:
print("tick")
timeAvailable-=1
if timeAvailable <=0:
print ("you loose!")
levelChangeSignal.emit(levels[currentLevel])
func reset() -> void:
timeAvailable = timers[currentLevel]
playerCurrentHealth = 100
get_window().grab_focus()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
@@ -21,3 +51,25 @@ func totalCrates(numberOfCrates:int)->void:
print("GC knows total crates: "+str(numberOfCrates))
if numberOfCrates <=0:
print("You WON!!!!")
currentLevel +=1
if currentLevel >= levels.size():
currentLevel = 0
levelChangeSignal.emit(levels[currentLevel])
func _on_slime_damage(_body, slime)->void:
print ("GC knows slime doing damage")
print("doing damage: "+str(enemiesDict[slime]["damage"]))
playerCurrentHealth -= enemiesDict[slime]["damage"]
if playerCurrentHealth <=0:
print ("U ded")
levelChangeSignal.emit(levels[currentLevel])
func addEnemyToLevel(slime)->void:
#give each enemy some health and damage
var randamage = randi_range(1,20)
var enemyStat = {
"health": 50,
"damage": 30+randamage
}
enemiesDict[slime]=enemyStat
+23 -4
View File
@@ -1,10 +1,14 @@
class_name SceneManager extends Node2D
@onready var game: Node2D = $".."
@onready var crates: Node2D = $"../Crates"
var grenade = preload("res://Scenes/grenade.tscn")
@onready var enemies: Node2D = $"../Enemies"
func _ready() -> void:
GameController.reset()
print("Scene manager is ready!")
game.destroySignal.connect(destroy)
GameController.destroySignal.connect(destroy)
GameController.levelChangeSignal.connect(changeScene)
buildLevel()
func destroy(body)->void:
@@ -13,7 +17,19 @@ func destroy(body)->void:
func buildLevel()->void:
updateCrates()
if enemies:
updateEnemies()
func updateEnemies()->void:
var totalEnemies = 0
for obj in enemies.get_children():
if obj is Slime:
totalEnemies +=1
#hook up signals
if not obj.slimeDamageSignal.is_connected(GameController._on_slime_damage):
obj.slimeDamageSignal.connect(GameController._on_slime_damage)
GameController.addEnemyToLevel(obj)
func updateCrates()->void:
#is there a crate holder?
var _crateTotal:int = 0
@@ -24,7 +40,7 @@ func updateCrates()->void:
obj.tree_exited.connect(updateCrates)
_crateTotal +=1
print("Number of crates: "+str(_crateTotal))
game.totalCrates(_crateTotal)
GameController.totalCrates(_crateTotal)
func makeGrenade(_greandePosition, _grenadeDirection)->void:
print("SM wants to make a grenade")
@@ -32,3 +48,6 @@ func makeGrenade(_greandePosition, _grenadeDirection)->void:
owner.add_child(myGrenade)
myGrenade.transform = _greandePosition
myGrenade.apply_central_impulse(Vector2(_grenadeDirection, -1)*200)
func changeScene(level)->void:
print("SM wants to change scence"+level)
get_tree().call_deferred("change_scene_to_file", level)
+35
View File
@@ -0,0 +1,35 @@
class_name Slime extends Area2D
@onready var slime_graphic: AnimatedSprite2D = $SlimeGraphic
@onready var rightcast: RayCast2D = $Rightcast
@onready var left_cast: RayCast2D = $LeftCast
@onready var left_down_cast: RayCast2D = $LeftDownCast
@onready var right_down_cast: RayCast2D = $RightDownCast
signal slimeDamageSignal(body, slime)
var speed:int = 100
var direction = 1
func _process(delta: float) -> void:
#raycast detection
if rightcast.is_colliding() and not rightcast.get_collider() is Player:
direction = -1
slime_graphic.flip_h = true
if left_cast.is_colliding() and not left_cast.get_collider() is Player:
direction = 1
slime_graphic.flip_h = false
if not right_down_cast.is_colliding():
direction = -1
slime_graphic.flip_h = true
if not left_cast.is_colliding():
direction = +1
slime_graphic.flip_h = false
position.x += direction*speed*delta
func _on_body_entered(body: Node2D) -> void:
if body is Player:
slimeDamageSignal.emit(body, self)
+1
View File
@@ -0,0 +1 @@
uid://ca13ras6c8xw3