enemies, multi levels

This commit is contained in:
OddlyTimbot committed 2026-05-25 21:03:43 -04:00
1 parent b40dad2de0
commit fd6ad5e001
12 files changed
+1119 -12

No files matched your search

+51 -1
View File
@@ -1,11 +1,40 @@
class_name GameController extends Node2D
extends Node2D
signal destroySignal(body)
signal levelChangeSignal(level)
var levels=["res://Scenes/game.tscn","res://Scenes/level2.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()
reset()
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 lose baby!")
levelChangeSignal.emit(levels[currentLevel])
func reset()->void:
timeAvailable = timers[currentLevel]
playerCurrentHealth = 100
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
@@ -21,3 +50,24 @@ 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
+2 -2
View File
@@ -70,13 +70,13 @@ func handle_movement(delta)->void:
velocity.x = move_toward(velocity.x, 0, SPEED)
func handle_collisions()->void:
if right_cast.is_colliding() and facing==FaceDirection.RIGHT:
if right_cast.is_colliding() and facing==FaceDirection.RIGHT and right_cast.get_collider() is RigidBody2D:
print("Right raycast contact!!")
pushEnabled = true
var collider = right_cast.get_collider()
pushTarget = collider
if left_cast.is_colliding() and facing==FaceDirection.LEFT:
if left_cast.is_colliding() and facing==FaceDirection.LEFT and left_cast.get_collider() is RigidBody2D:
print("Left raycast contact!!")
pushEnabled = true
var collider = left_cast.get_collider()
+20 -4
View File
@@ -1,11 +1,13 @@
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:
@@ -14,7 +16,18 @@ 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
@@ -25,7 +38,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(_grenadePosition, _grenadeDirection)->void:
print("SM wants to make a grenade")
@@ -34,3 +47,6 @@ func makeGrenade(_grenadePosition, _grenadeDirection)->void:
myGrenade.transform = _grenadePosition
myGrenade.apply_central_impulse(Vector2(_grenadeDirection,-1)*200)
func changeScene(level)->void:
print("SM wants to change scene "+level)
get_tree().call_deferred("change_scene_to_file",level)
+33
View File
@@ -0,0 +1,33 @@
class_name Slime extends Area2D
@onready var slime_graphic: AnimatedSprite2D = $SlimeGraphic
@onready var right_cast: 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 right_cast.is_colliding() and not right_cast.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_down_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://q6eb2oqg3vvo