better coin collecting, level timer, multilevels, badguys with characterstats
This commit is contained in:
1 parent
53bae7b109
commit
68b998652c
18 files changed
+1240
-21
No files matched your search
@@ -0,0 +1,8 @@
|
||||
class_name Coin extends Area2D
|
||||
|
||||
signal coinCollectedSignal(body, coin)
|
||||
|
||||
func _on_body_entered(body: Node2D) -> void:
|
||||
print("coin collision")
|
||||
if body is Player:
|
||||
coinCollectedSignal.emit(body, self)
|
||||
@@ -0,0 +1 @@
|
||||
uid://nqigicsb4oqh
|
||||
@@ -1,11 +1,43 @@
|
||||
extends Node2D
|
||||
|
||||
signal playerDamage
|
||||
signal destroySignal(body)
|
||||
signal levelChangeSignal(level)
|
||||
|
||||
var timer = Timer.new()
|
||||
var timeAvailable:int = 5
|
||||
|
||||
var levels = ["res://scenes/game.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"]
|
||||
var timers = [15,10,9]
|
||||
var currentLevel = 0
|
||||
|
||||
#character stats
|
||||
var enemy:CharacterStats
|
||||
var player:CharacterStats
|
||||
var playerCurrentHealth:int
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
enemy = load("res://scripts/rscs/slimeStats.tres")
|
||||
player = load("res://scripts/rscs/playerStats.tres")
|
||||
playerCurrentHealth = player.starting_health
|
||||
|
||||
add_child(timer)
|
||||
timer.wait_time = 1
|
||||
timer.one_shot = false
|
||||
timer.connect("timeout", secondCounter)
|
||||
timer.start()
|
||||
|
||||
func reset():
|
||||
timeAvailable = timers[currentLevel]
|
||||
|
||||
func secondCounter():
|
||||
timeAvailable -=1
|
||||
#check for time running out
|
||||
if timeAvailable <=0:
|
||||
print("You lose")
|
||||
levelChangeSignal.emit(levels[currentLevel])
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
@@ -18,8 +50,8 @@ func _on_trigger(effect: Variant, body: Variant) -> void:
|
||||
if body is Player:
|
||||
print("hurt the player")
|
||||
playerDamage.emit()
|
||||
if not body is Player:
|
||||
body.queue_free()
|
||||
#if not body is Player:
|
||||
# body.queue_free()
|
||||
|
||||
func bulletDamage(body, bullet):
|
||||
print("GC know about bullet hit")
|
||||
@@ -27,4 +59,21 @@ func bulletDamage(body, bullet):
|
||||
|
||||
func coinCollected(body, coin):
|
||||
print("GC knows coin collected")
|
||||
|
||||
destroySignal.emit(coin)
|
||||
|
||||
func totalCoinCount(count):
|
||||
print("GC knows total coins "+str(count))
|
||||
if count == 0:
|
||||
currentLevel +=1
|
||||
if currentLevel >= levels.size():
|
||||
currentLevel = 0
|
||||
levelChangeSignal.emit(levels[currentLevel])
|
||||
|
||||
func playerAttacked(body, slime):
|
||||
print("GC knows slime attack")
|
||||
print("Damge : "+str(enemy.meleeDamage) )
|
||||
print("Player health : "+str(playerCurrentHealth))
|
||||
playerCurrentHealth -= enemy.meleeDamage
|
||||
if playerCurrentHealth <=0:
|
||||
print("YOU DEAD")
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
class_name CharacterStats extends Resource
|
||||
|
||||
@export var health:int = 100
|
||||
@export var max_health: int =100
|
||||
@export var starting_health:int = 100
|
||||
|
||||
# damage dealing
|
||||
@export var meleeDamage:int = 10
|
||||
@export var rangeDamage:int = 0
|
||||
@@ -0,0 +1 @@
|
||||
uid://r408skwtvisy
|
||||
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://bff0fewekswn"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://r408skwtvisy" path="res://scripts/rscs/characterstats.gd" id="1_sqkfu"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_sqkfu")
|
||||
health = 100
|
||||
max_health = 100
|
||||
starting_health = 100
|
||||
meleeDamage = 10
|
||||
rangeDamage = 0
|
||||
metadata/_custom_type_script = "uid://r408skwtvisy"
|
||||
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://r5hx4gu0mtog"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://r408skwtvisy" path="res://scripts/rscs/characterstats.gd" id="1_ppipo"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_ppipo")
|
||||
health = 100
|
||||
max_health = 100
|
||||
starting_health = 100
|
||||
meleeDamage = 25
|
||||
rangeDamage = 0
|
||||
metadata/_custom_type_script = "uid://r408skwtvisy"
|
||||
@@ -2,21 +2,47 @@ class_name SceneManager extends Node2D
|
||||
var bulletArray =[]
|
||||
var totalAllowedBullets = 7
|
||||
var bullet = preload("res://scenes/bullet.tscn")
|
||||
@onready var game: Node2D = $".."
|
||||
@onready var triggers: Node2D = $"../triggers"
|
||||
@onready var coins: Node2D = $"../coins"
|
||||
@onready var enemies: Node2D = $"../enemies"
|
||||
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
Gamecontroller.reset()
|
||||
|
||||
if triggers:
|
||||
for obj in triggers.get_children():
|
||||
if obj is Trigger:
|
||||
obj.areaTriggerSignal.connect(game._on_trigger)
|
||||
obj.areaTriggerSignal.connect(Gamecontroller._on_trigger)
|
||||
if coins:
|
||||
for obj in coins.get_children():
|
||||
if obj is Coin:
|
||||
obj.coinCollectedSignal.connect(game.coinCollected)
|
||||
updateCoins()
|
||||
|
||||
if enemies:
|
||||
updateEnemies()
|
||||
|
||||
Gamecontroller.destroySignal.connect(destroy)
|
||||
Gamecontroller.levelChangeSignal.connect(changeScene)
|
||||
|
||||
func updateEnemies():
|
||||
for obj in enemies.get_children():
|
||||
if obj is Slime:
|
||||
if not obj.playerDamageSignal.is_connected(Gamecontroller.playerAttacked):
|
||||
obj.playerDamageSignal.connect(Gamecontroller.playerAttacked)
|
||||
|
||||
|
||||
func updateCoins():
|
||||
var coinCount = 0
|
||||
for obj in coins.get_children():
|
||||
if obj is Coin:
|
||||
if not obj.coinCollectedSignal.is_connected(Gamecontroller.coinCollected):
|
||||
obj.coinCollectedSignal.connect(Gamecontroller.coinCollected)
|
||||
#connect tree exit
|
||||
if not obj.tree_exited.is_connected(updateCoins):
|
||||
obj.tree_exited.connect(updateCoins)
|
||||
coinCount +=1
|
||||
Gamecontroller.totalCoinCount(coinCount)
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
@@ -28,7 +54,7 @@ func bulletFactory():
|
||||
if bulletArray.size() < totalAllowedBullets:
|
||||
#make a new bullet
|
||||
myBullet = bullet.instantiate()
|
||||
myBullet.bulletDamageSignal.connect(game.bulletDamage)
|
||||
myBullet.bulletDamageSignal.connect(Gamecontroller.bulletDamage)
|
||||
owner.add_child(myBullet)
|
||||
else:
|
||||
myBullet = bulletArray.pop_back()
|
||||
@@ -41,3 +67,8 @@ func makeBullet(position, speed):
|
||||
someBullet.setSpeed(speed)
|
||||
# postition the bullet
|
||||
someBullet.transform = position
|
||||
|
||||
func destroy(body):
|
||||
body.queue_free()
|
||||
func changeScene(level):
|
||||
get_tree().call_deferred("change_scene_to_file", level)
|
||||
@@ -0,0 +1,34 @@
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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://cuaxw7eh73a1i
|
||||
Reference in new issue
Block a user