From 632d6fd5080bc8d6e9faa5ffdb75463f826eae61 Mon Sep 17 00:00:00 2001 From: stevensoroka Date: Mon, 8 Sep 2025 20:56:39 -0400 Subject: [PATCH] changed stuff --- assets/graphics/enemies/slime_purple.png | Bin 0 -> 1030 bytes .../graphics/enemies/slime_purple.png.import | 34 ++ project.godot | 4 + scenes/game.tscn | 8 +- scenes/level2.tscn | 492 ++++++++++++++++++ scenes/level3.tscn | 492 ++++++++++++++++++ scenes/slime.tscn | 71 +++ scripts/gamecontroller.gd | 61 ++- scripts/resources/characterstats.gd | 8 + scripts/resources/characterstats.gd.uid | 1 + scripts/resources/playerStats.tres | 12 + scripts/resources/slimeStats.tres | 12 + scripts/scene_manager.gd | 39 +- scripts/slime.gd | 39 ++ scripts/slime.gd.uid | 1 + 15 files changed, 1265 insertions(+), 9 deletions(-) create mode 100644 assets/graphics/enemies/slime_purple.png create mode 100644 assets/graphics/enemies/slime_purple.png.import create mode 100644 scenes/level2.tscn create mode 100644 scenes/level3.tscn create mode 100644 scenes/slime.tscn create mode 100644 scripts/resources/characterstats.gd create mode 100644 scripts/resources/characterstats.gd.uid create mode 100644 scripts/resources/playerStats.tres create mode 100644 scripts/resources/slimeStats.tres create mode 100644 scripts/slime.gd create mode 100644 scripts/slime.gd.uid diff --git a/assets/graphics/enemies/slime_purple.png b/assets/graphics/enemies/slime_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..76f564e1d18d3f4b59c032ee8233ebf4665af431 GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<@!3HEb(?2AGr~;43Vg?3oVGw3ym^DX&fq{94 zr;B4q#hkZu_UB)A5IH_yFgSBs)oT$}vmn=*zw9@ptqPdBe?d}nV{fk>$4CBvg?)Ed z_vO50>IiWPSm-r%m!<3^wh~P~_4RS~ zpI=Gub+-QhIeq%h`RaxX{5TJNc>dLzfkEQSwe9u4|AzdIT*^2{!A86~-QWe|7ymwB zC>Ti{|81}_`+UPPl@+TN=sEg&On58UrMgnvLQXF0_ys@bQ1@EdnLWo=s>t&5b6*sD zcFMcwU?tm(D_Xg)W-Wc$-E!h}Crjk()1K3gUwWA?xq;Wdw18cHo3k~Zx-$Fb`AU$*-@DD zmGPf?jG6V$dCTQj>{2>(Zt>F0fcfj}50vb4xa*Xko3|y%e%9UPUyOMTg5ncDvEEv- z-pIj{ckVgygWdnMA2Z(bzqjb#^{`seQ^pPQ$9_6a&90O2#S*<mC1;UMyZZkxfN& z@uKHWkGnrH91Z`H^EmwCk41a3FUGWg-!^5J_|wx1K5Uz!#D3x7Zw}ELVrNTt9P8IR z_1(WOXsY%rc>^6i*W&vj&+HC_UuW8s@vbNLPX_a 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") diff --git a/scripts/resources/characterstats.gd b/scripts/resources/characterstats.gd new file mode 100644 index 0000000..5a79f08 --- /dev/null +++ b/scripts/resources/characterstats.gd @@ -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 diff --git a/scripts/resources/characterstats.gd.uid b/scripts/resources/characterstats.gd.uid new file mode 100644 index 0000000..27e6f2b --- /dev/null +++ b/scripts/resources/characterstats.gd.uid @@ -0,0 +1 @@ +uid://1inibslv874a diff --git a/scripts/resources/playerStats.tres b/scripts/resources/playerStats.tres new file mode 100644 index 0000000..50d0108 --- /dev/null +++ b/scripts/resources/playerStats.tres @@ -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" diff --git a/scripts/resources/slimeStats.tres b/scripts/resources/slimeStats.tres new file mode 100644 index 0000000..16d08b4 --- /dev/null +++ b/scripts/resources/slimeStats.tres @@ -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" diff --git a/scripts/scene_manager.gd b/scripts/scene_manager.gd index 81b0f82..074a2a7 100644 --- a/scripts/scene_manager.gd +++ b/scripts/scene_manager.gd @@ -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) diff --git a/scripts/slime.gd b/scripts/slime.gd new file mode 100644 index 0000000..ede3ff9 --- /dev/null +++ b/scripts/slime.gd @@ -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) diff --git a/scripts/slime.gd.uid b/scripts/slime.gd.uid new file mode 100644 index 0000000..39b1b86 --- /dev/null +++ b/scripts/slime.gd.uid @@ -0,0 +1 @@ +uid://dh168hjmye0c2