enemies, multi levels
This commit is contained in:
1 parent
b40dad2de0
commit
fd6ad5e001
12 files changed
+1119
-12
No files matched your search
@@ -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
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
uid://q6eb2oqg3vvo
|
||||
Reference in new issue
Block a user