changed stuff
This commit is contained in:
15 files changed
+1265
-9
No files matched your search
@@ -1,6 +1,44 @@
|
||||
extends Node2D
|
||||
|
||||
signal playerDamage
|
||||
signal destroySignal(body)
|
||||
signal levelChangeSignal(level: String)
|
||||
|
||||
var coinCount : int = 0
|
||||
var score:int = 0
|
||||
var timer = Timer.new()
|
||||
var timeAvailable:int = 5
|
||||
|
||||
var levels = [
|
||||
"res://scenes/game.tscn",
|
||||
"res://scenes/level2.tscn",
|
||||
"res://scenes/level3.tscn"
|
||||
]
|
||||
|
||||
var timers = [30, 50, 30]
|
||||
var currentLevel: int = 0
|
||||
|
||||
var enemy: CharacterStats
|
||||
var playerStats: CharacterStats
|
||||
|
||||
func _ready():
|
||||
enemy = load("res://scripts/resources/slimeStats.tres")
|
||||
playerStats = load("res://scripts/resources/playerStats.tres")
|
||||
|
||||
add_child(timer)
|
||||
timer.wait_time = 1
|
||||
timer.one_shot = false
|
||||
timer.connect("timeout", secondCounter)
|
||||
timer.start()
|
||||
timeAvailable = timers[currentLevel]
|
||||
|
||||
func secondCounter():
|
||||
timeAvailable -= 1
|
||||
print("second")
|
||||
if timeAvailable <= 0:
|
||||
print("dead")
|
||||
levelChangeSignal.emit(levels[currentLevel])
|
||||
Gamecontroller.reset()
|
||||
|
||||
func _on_area_2d_area_trigger_signal(effect: String, body: Node2D) -> void:
|
||||
if body.name == "world-boundary":
|
||||
@@ -21,4 +59,25 @@ func bulletDamage(target: Node2D, bullet: Node2D):
|
||||
bullet.visible = false
|
||||
|
||||
func coin_collected(coin: Coin):
|
||||
coin.queue_free()
|
||||
#coin.queue_free()
|
||||
destroySignal.emit(coin)
|
||||
score += 1
|
||||
coinCount -= 1
|
||||
if coinCount == 0:
|
||||
currentLevel = (currentLevel + 1) % len(levels)
|
||||
levelChangeSignal.emit(levels[currentLevel])
|
||||
print("Win!")
|
||||
|
||||
func totalCoinCount(count: int):
|
||||
print("count is "+ str(count))
|
||||
coinCount = count
|
||||
|
||||
func reset():
|
||||
score = 0
|
||||
timeAvailable = timers[currentLevel]
|
||||
|
||||
func playerAttacked(body, slime):
|
||||
playerStats.health -= enemy.meleDamage
|
||||
|
||||
print("enemy did " + str(enemy.meleDamage) + " damage, player has " + str(playerStats.health) + " health")
|
||||
print("GC knows slime attacked")
|
||||
@@ -0,0 +1,8 @@
|
||||
class_name CharacterStats extends Resource
|
||||
|
||||
@export var health: float = 100.0
|
||||
@export var max_health: float = 100.0
|
||||
@export var starting_health: float = 100.0
|
||||
|
||||
@export var meleDamage: float = 10
|
||||
@export var rangeDamage: float = 0
|
||||
@@ -0,0 +1 @@
|
||||
uid://1inibslv874a
|
||||
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://rc5t6lf31v5e"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://1inibslv874a" path="res://scripts/resources/characterstats.gd" id="1_tsub5"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_tsub5")
|
||||
health = 100.0
|
||||
max_health = 100.0
|
||||
starting_health = 100.0
|
||||
meleDamage = 10.0
|
||||
rangeDamage = 0.0
|
||||
metadata/_custom_type_script = "uid://1inibslv874a"
|
||||
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://deddwp54e2uu5"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://1inibslv874a" path="res://scripts/resources/characterstats.gd" id="1_v5vo6"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_v5vo6")
|
||||
health = 100.0
|
||||
max_health = 100.0
|
||||
starting_health = 100.0
|
||||
meleDamage = 10.0
|
||||
rangeDamage = 0.0
|
||||
metadata/_custom_type_script = "uid://1inibslv874a"
|
||||
@@ -1,9 +1,9 @@
|
||||
class_name SceneManager extends Node2D
|
||||
|
||||
const BulletScn = preload("res://scenes/bullet.tscn")
|
||||
@onready var game: Node2D = $".."
|
||||
@onready var triggers: Node2D = $"../triggers"
|
||||
@onready var coins: Node = $"../coins"
|
||||
@onready var enemies: Node = $"../Enemies"
|
||||
|
||||
var bullets: Array[Bullet] = []
|
||||
const MAX_BULLETS = 10
|
||||
@@ -13,18 +13,40 @@ func _ready() -> void:
|
||||
if triggers:
|
||||
for obj in triggers.get_children():
|
||||
if obj is Trigger:
|
||||
obj.areaTriggerSignal.connect(game._on_area_2d_area_trigger_signal)
|
||||
obj.areaTriggerSignal.connect(Gamecontroller._on_area_2d_area_trigger_signal)
|
||||
if coins:
|
||||
for obj in coins.get_children():
|
||||
if obj is Coin:
|
||||
obj.coin_collected.connect(game.coin_collected)
|
||||
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 !obj.slimeAttacked.is_connected(Gamecontroller.playerAttacked):
|
||||
obj.slimeAttacked.connect(Gamecontroller.playerAttacked)
|
||||
|
||||
func updateCoins():
|
||||
var coinCount: int = 0
|
||||
for obj in coins.get_children():
|
||||
if obj is Coin:
|
||||
if not obj.coin_collected.is_connected(Gamecontroller.coin_collected):
|
||||
obj.coin_collected.connect(Gamecontroller.coin_collected)
|
||||
# connect tree exit
|
||||
if not obj.tree_exited.is_connected(updateCoins):
|
||||
obj.tree_exited.connect(updateCoins)
|
||||
coinCount += 1
|
||||
Gamecontroller.totalCoinCount(coinCount)
|
||||
|
||||
# makes and recycles bullets
|
||||
func bulletFactory() -> Bullet:
|
||||
if len(bullets) < MAX_BULLETS:
|
||||
# create new
|
||||
var b = BulletScn.instantiate()
|
||||
b.bulletDamageSignal.connect(game.bulletDamage)
|
||||
b.bulletDamageSignal.connect(Gamecontroller.bulletDamage)
|
||||
add_child(b)
|
||||
bullets.append(b)
|
||||
return b
|
||||
@@ -35,6 +57,8 @@ func bulletFactory() -> Bullet:
|
||||
bullets[i].visible = true
|
||||
return bullets[i]
|
||||
|
||||
func destroy(body):
|
||||
body.queue_free()
|
||||
|
||||
func makeBullet(pos: Transform2D, dir: int) -> Node2D:
|
||||
var b = bulletFactory()
|
||||
@@ -42,3 +66,6 @@ func makeBullet(pos: Transform2D, dir: int) -> Node2D:
|
||||
b.transform = pos
|
||||
b.setSpeed(dir * 700)
|
||||
return b
|
||||
|
||||
func changeScene(level: String):
|
||||
get_tree().call_deferred("change_scene_to_file", level)
|
||||
@@ -0,0 +1,39 @@
|
||||
class_name Slime extends Area2D
|
||||
|
||||
@onready var left_cast: RayCast2D = $LeftCast
|
||||
@onready var left_cliff_cast: RayCast2D = $LeftCliffCast
|
||||
@onready var right_cast: RayCast2D = $RightCast
|
||||
@onready var right_cliff_cast: RayCast2D = $RightCliffCast
|
||||
@onready var slime_sprite: AnimatedSprite2D = $SlimeSprite
|
||||
|
||||
@export var direction: int = -1
|
||||
@export var speed: float = 100
|
||||
|
||||
signal slimeAttacked(body, slime)
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
func cast_is_colliding(cast: RayCast2D) -> bool:
|
||||
return cast.is_colliding() && cast.get_collider() is not Player
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
position.x += direction * speed * delta
|
||||
if cast_is_colliding(left_cast) && direction == -1:
|
||||
direction = 1
|
||||
elif cast_is_colliding(right_cast) && direction == 1:
|
||||
direction = -1
|
||||
elif direction == -1 && !cast_is_colliding(left_cliff_cast):
|
||||
direction = 1
|
||||
elif direction == 1 && !cast_is_colliding(right_cliff_cast):
|
||||
direction = -1
|
||||
|
||||
slime_sprite.flip_h = direction == -1
|
||||
|
||||
|
||||
func _on_body_entered(body: Node2D) -> void:
|
||||
if body is Player:
|
||||
print("slime attack!")
|
||||
slimeAttacked.emit(body, self)
|
||||
@@ -0,0 +1 @@
|
||||
uid://dh168hjmye0c2
|
||||
Reference in new issue
Block a user