autoload, timer, win condition, lose condition, custom resources, enemy, multi-levels
This commit is contained in:
1 parent
c2f329ac60
commit
92e989c331
16 files changed
+1294
-29
No files matched your search
@@ -1,4 +1,4 @@
|
||||
extends CharacterBody2D
|
||||
class_name Player extends CharacterBody2D
|
||||
|
||||
|
||||
const SPEED = 300.0
|
||||
@@ -134,3 +134,10 @@ func _on_animation_finished() -> void:
|
||||
match current_state:
|
||||
State.JUMP:
|
||||
upJump = false
|
||||
|
||||
func playerTakesDamage(health):
|
||||
print("Player sees remaining health "+str(health))
|
||||
|
||||
func playerDies():
|
||||
print("Player sees they died.")
|
||||
|
||||
@@ -2,11 +2,47 @@ extends Node2D
|
||||
|
||||
var totalCoinsAvailable
|
||||
|
||||
var timer = Timer.new()
|
||||
var timeAvailable = 5
|
||||
var level="res://Scenes/game.tscn"
|
||||
var levelTwo = "res://Scenes/level2.tscn"
|
||||
|
||||
var levels = ["res://Scenes/game.tscn", "res://Scenes/level2.tscn", "res://Scenes/level3.tscn"]
|
||||
var timers = [10,15,9]
|
||||
var currentLevel = 0
|
||||
|
||||
signal destroySignal(body)
|
||||
signal levelChangeSignal(level)
|
||||
signal playerTakesDamageSignal(health)
|
||||
signal playerDiesSignal
|
||||
|
||||
var player:CharacterStats
|
||||
var enemy:CharacterStats
|
||||
|
||||
var playerHealth:int
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
player = load("res://Scripts/rscs/playerStats.tres")
|
||||
enemy = load("res://Scripts/rscs/slimeStats.tres")
|
||||
|
||||
playerHealth = player.starting_health
|
||||
|
||||
add_child(timer)
|
||||
timer.wait_time = 1
|
||||
timer.one_shot = false
|
||||
timer.connect("timeout", secondCounter)
|
||||
timer.start()
|
||||
|
||||
func secondCounter() -> void:
|
||||
timeAvailable -=1
|
||||
if timeAvailable <= 0:
|
||||
print("LOSE")
|
||||
#reload the current scene
|
||||
levelChangeSignal.emit(levels[currentLevel])
|
||||
func reset() -> void:
|
||||
timeAvailable = timers[currentLevel]
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
@@ -17,12 +53,29 @@ func _on_areatrigger(effect, body) -> void:
|
||||
if effect == "destroy":
|
||||
print("Destroy this thing")
|
||||
body.queue_free()
|
||||
if effect == "powerup":
|
||||
print("Power up the player")
|
||||
if effect == "lavaBurn":
|
||||
if body is Player:
|
||||
playerHealth -= 10
|
||||
print("Player health is now "+str(playerHealth))
|
||||
|
||||
|
||||
func totalCoinCount(totalCoins):
|
||||
print("GC knows total coins"+str(totalCoins) )
|
||||
print("GC knows the total coins is "+str(totalCoins) )
|
||||
totalCoinsAvailable = totalCoins
|
||||
func coinCollected(body, coin):
|
||||
print("GC knows coin collected")
|
||||
coin.queue_free()
|
||||
destroySignal.emit(coin)
|
||||
totalCoinsAvailable -=1
|
||||
if totalCoinsAvailable <= 0:
|
||||
currentLevel +=1
|
||||
if currentLevel >= levels.size():
|
||||
currentLevel = 0
|
||||
levelChangeSignal.emit(levels[currentLevel])
|
||||
|
||||
func playerAttacked(body, slime):
|
||||
print("GC knows player attacked")
|
||||
playerHealth -= enemy.meleeDamage
|
||||
if playerHealth <=0:
|
||||
playerDiesSignal.emit()
|
||||
else:
|
||||
print("Received damage...")
|
||||
playerTakesDamageSignal.emit(playerHealth)
|
||||
@@ -0,0 +1,9 @@
|
||||
class_name CharacterStats extends Resource
|
||||
|
||||
@export var max_health:int = 100
|
||||
@export var starting_health:int = 100
|
||||
@export var health:int = 100
|
||||
|
||||
#damage dealing
|
||||
@export var meleeDamage:int = 10
|
||||
@export var rangeDamage:int = 0
|
||||
@@ -0,0 +1 @@
|
||||
uid://b4t8cviiuvt18
|
||||
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://bui3rirgh7w6h"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b4t8cviiuvt18" path="res://Scripts/rscs/characterstats.gd" id="1_eiyfu"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_eiyfu")
|
||||
max_health = 100
|
||||
starting_health = 100
|
||||
health = 100
|
||||
meleeDamage = 5
|
||||
rangeDamage = 10
|
||||
metadata/_custom_type_script = "uid://b4t8cviiuvt18"
|
||||
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://dtrmy5w0xcd0u"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b4t8cviiuvt18" path="res://Scripts/rscs/characterstats.gd" id="1_g41dv"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_g41dv")
|
||||
max_health = 50
|
||||
starting_health = 50
|
||||
health = 50
|
||||
meleeDamage = 10
|
||||
rangeDamage = 0
|
||||
metadata/_custom_type_script = "uid://b4t8cviiuvt18"
|
||||
@@ -4,20 +4,43 @@ var bullet = preload("res://Scenes/bullet.tscn")
|
||||
var bulletArray =[]
|
||||
var totalAllowedBullets = 7
|
||||
@onready var triggers: Node2D = $"../Triggers"
|
||||
@onready var gameController: Node2D = $".."
|
||||
@onready var coins: Node2D = $"../Coins"
|
||||
@onready var enemies: Node2D = $"../Enemies"
|
||||
@onready var player: Player = $"../Player"
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Gamecontroller.reset()
|
||||
|
||||
for obj in triggers.get_children():
|
||||
obj.areatrigger.connect(gameController._on_areatrigger)
|
||||
obj.areatrigger.connect(Gamecontroller._on_areatrigger)
|
||||
|
||||
if enemies:
|
||||
for obj in enemies.get_children():
|
||||
if obj is Slime:
|
||||
obj.playerDamageSignal.connect(Gamecontroller.playerAttacked)
|
||||
|
||||
updateCoins()
|
||||
|
||||
Gamecontroller.destroySignal.connect(destroyItem)
|
||||
Gamecontroller.levelChangeSignal.connect(changeScene)
|
||||
Gamecontroller.playerTakesDamageSignal.connect(player.playerTakesDamage)
|
||||
Gamecontroller.playerDiesSignal.connect(player.playerDies)
|
||||
|
||||
#call this any time the coins change
|
||||
func updateCoins() -> void:
|
||||
var coinCount = 0
|
||||
for obj in coins.get_children():
|
||||
obj.coinCollectedSignal.connect(gameController.coinCollected)
|
||||
#connect coin collected to game controller
|
||||
if not obj.coinCollectedSignal.is_connected(Gamecontroller.coinCollected):
|
||||
obj.coinCollectedSignal.connect(Gamecontroller.coinCollected)
|
||||
#connect tree_exited signal for updates
|
||||
if not obj.tree_exited.is_connected(updateCoins):
|
||||
obj.tree_exited.connect(updateCoins)
|
||||
coinCount +=1
|
||||
#send information to the game controller
|
||||
gameController.totalCoinCount(coinCount)
|
||||
|
||||
Gamecontroller.totalCoinCount(coinCount)
|
||||
|
||||
#makes bullets
|
||||
func bulletFactory():
|
||||
var mybullet
|
||||
@@ -42,3 +65,8 @@ func makeBullet(position, speed):
|
||||
#position the bullet
|
||||
mybullet.transform = position
|
||||
|
||||
func destroyItem(body):
|
||||
body.queue_free()
|
||||
func changeScene(level):
|
||||
get_tree().call_deferred("change_scene_to_file", level)
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
class_name Slime extends Area2D
|
||||
@onready var slime_graphic: AnimatedSprite2D = $slimeGraphic
|
||||
@onready var right_side_cast: RayCast2D = $RightSideCast
|
||||
@onready var left_side_cast: RayCast2D = $LeftSideCast
|
||||
@onready var left_down_cast: RayCast2D = $LeftDownCast
|
||||
@onready var right_down_cast: RayCast2D = $RightDownCast
|
||||
|
||||
var speed:int = 100
|
||||
var direction = 1
|
||||
|
||||
signal playerDamageSignal(body, slime)
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
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
|
||||
|
||||
if right_side_cast.is_colliding():
|
||||
direction = -1
|
||||
slime_graphic.flip_h = true
|
||||
|
||||
if left_side_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:
|
||||
print("Slime attack")
|
||||
playerDamageSignal.emit(body,self)
|
||||
@@ -0,0 +1 @@
|
||||
uid://vjdcp0a4i0j8
|
||||
Reference in new issue
Block a user