rebuild project

This commit is contained in:
JayisonDevadas committed 2025-09-22 21:30:18 -04:00
1 parent ceb9ab77cf
commit 11b72a72f8
59 files changed
+1795 -324

No files matched your search

+11 -5
View File
@@ -3,7 +3,7 @@ class_name Bullet extends Area2D
var speed:float = 700
signal bulletDamageSignal(body,bullet)
signal bulletDamageSignal(body, bullet)
func setSpeed(value:float):
speed = value
@@ -17,8 +17,14 @@ func _physics_process(delta: float) -> void:
func _on_body_entered(body: Node2D) -> void:
print("Bullet hitting")
if body.is_in_group("shootables"):
bulletDamageSignal.emit(body,self)
print("This is shootable")
bulletDamageSignal.emit(body, self)
func _on_area_entered(area: Area2D) -> void:
print("Bullet hitting")
if area.is_in_group("shootables"):
print("This is shootable")
bulletDamageSignal.emit(area, self)
+1 -1
View File
@@ -1 +1 @@
uid://p7brl4n4miw6
uid://bhh178vuo5bgo
+2 -2
View File
@@ -2,7 +2,7 @@ class_name Coin extends Area2D
signal coinCollectedSignal(body, coin)
func _on_body_entered(body: Node2D) -> void:
print("coin collision")
coinCollectedSignal.emit(body, self)
if body is Player:
coinCollectedSignal.emit(body, self)
+1
View File
@@ -0,0 +1 @@
uid://nqigicsb4oqh
+1 -1
View File
@@ -1 +1 @@
uid://bv1u5eyjco2m8
uid://c5gjsxgxmjfki
+135 -17
View File
@@ -1,30 +1,148 @@
extends Node2D
signal playerDeathSignal
signal playerDamageSignal(health, maxhealth)
signal destroySignal(body)
signal levelChangeSignal(level)
signal playerDamage
var loadIntent = false
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
var enemiesDict = {}
var saveObject = {}
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
func _ready() -> void:
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():
enemiesDict.clear()
timeAvailable = timers[currentLevel]
playerCurrentHealth = player.max_health
if loadIntent:
var saved_game:SavedGame = load("res://scripts/rscs/gameSaveStats.tres")
saveObject = saved_game.gameData
playerCurrentHealth = saveObject ["PlayerHealth"]
timeAvailable = saveObject["TimeAvailable"]
loadIntent = false
return saveObject
return{}
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
if Input.is_action_just_pressed("save"):
saveGame()
if Input.is_action_just_pressed("load"):
loadGame()
func _on_trigger(effect: Variant, body:Variant) -> void:
func _on_trigger(effect: Variant, body: Variant) -> void:
print("GC sees trigger "+effect)
match effect:
"player_hurt":
if body is Player:
print("ouch")
playerDamage.emit()
if not body is Player:
body.queue_free()
print("hurt the player")
#playerDamage.emit()
#if not body is Player:
# body.queue_free()
func bulletDamage(body, bullet):
print("gc knows about bullet hit")
body.queue_free()
#apply_central_impulse(Vector2(shoveDirection,0)*700)
print("GC know about bullet hit")
if body is Slime:
#give damage to this individual enemy
enemiesDict[body]["health"] -= player.rangeDamage
if enemiesDict[body]["health"] <=0:
print ("enemy is dead")
removeEnemyFromLevel(body)
destroySignal.emit(body)
else:
print("enemy is damaged")
body.handle_damage()
func coinCollected(body,coin):
print("gc knows coin collected")
func removeEnemyFromLevel(body)->void:
enemiesDict.erase(body)
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(enemiesDict[slime]["damage"]) )
print("Player health : "+str(playerCurrentHealth))
playerCurrentHealth -= enemiesDict[slime]["damage"]
if playerCurrentHealth <=0:
print("YOU DEAD")
playerDeathSignal.emit()
else:
print("taking damage")
playerDamageSignal.emit(playerCurrentHealth, player.max_health)
func deathComplete()->void:
levelChangeSignal.emit(levels[currentLevel])
func addEnemyToLevel(slime)->void:
var randHealth:int= randi() % 20
var randDamage:int = randi() % 10
var enemyState= {"health": enemy.health + randHealth,
"damage": enemy.meleeDamage + randDamage
}
enemiesDict[slime]= enemyState
func saveGame()->void:
saveObject["enemies"]={}
var index = 0
# create an object with all critical game data
print("game Level"+str(currentLevel))
print("time Remaining"+str(timeAvailable))
print("player Health"+str(playerCurrentHealth))
#bad guys stuff
for key in enemiesDict:
var tempObj = {}
tempObj["health"]= enemiesDict[key]["health"]
tempObj ["damage"]=enemiesDict[key]["damage"]
tempObj["global_position"]= key.global_position
saveObject["enemies"]["slime"+str(index)] = tempObj
index +=1
saveObject["GameLevel"]= currentLevel
saveObject["TimeAvailable"]= timeAvailable
saveObject["PlayerHealth"]= playerCurrentHealth
var saved_game:SavedGame = SavedGame.new()
saved_game.gameData = saveObject
ResourceSaver.save(saved_game, "res://scripts/rscs/gameSaveStats.tres")
func loadGame()->void:
loadIntent = true
levelChangeSignal.emit(levels[saveObject["GameLevel"]])
+1 -1
View File
@@ -1 +1 @@
uid://cpua8fr5bby78
uid://bblqtronap0j4
+45 -28
View File
@@ -4,34 +4,41 @@ class_name Player extends CharacterBody2D
@onready var left_cast: RayCast2D = $LeftCast
@onready var right_spawn: Node2D = $RightSpawn
@onready var left_spawn: Node2D = $LeftSpawn
@onready var jump_buffer_timer: Timer = $jumpBufferTimer
@onready var jump_buffer_timer: Timer = $JumpBufferTimer
@onready var player_graphic: AnimatedSprite2D = $PlayerGraphic
const SPEED = 300
const SPEED = 300.0
const JUMP_VELOCITY = -400.0
@export var acceleration:int = 15
@export var acceleration:int = 5
var upJump:bool = false
var direction
var direction
enum FaceDirection{LEFT, RIGHT}
var facing:FaceDirection = FaceDirection.RIGHT
enum State{IDLE,RUN,JUMP,FALLING}
enum State{IDLE, RUN,JUMP,FALLING,HURT, DEATH}
var current_state:State = State.IDLE
var pushTarget
var pushEnabled := false
signal playerDeathCompleteSignal
func _physics_process(delta:float) -> void:
func _physics_process(delta: float) -> void:
# Add the gravity.
handle_input()
if current_state != State.HURT and current_state != State.DEATH:
handle_input()
handle_movement(delta)
handle_states()
handle_animation()
move_and_slide()
handle_collisions()
func handle_damage(health, maxhealth)->void:
print("player takes damage")
current_state = State.HURT
func handle_death()->void:
print("player is dead")
current_state = State.DEATH
func handle_states() -> void:
match current_state:
State.IDLE when velocity.x !=0:
@@ -39,8 +46,9 @@ func handle_states() -> void:
State.RUN:
if velocity.x == 0:
current_state = State.IDLE
#player steps off ledge
if not is_on_floor() && velocity.y > 0:
current_state = State.FALLING
current_state = State.FALLING
State.FALLING when is_on_floor():
if velocity.x == 0:
current_state = State.IDLE
@@ -48,6 +56,8 @@ func handle_states() -> void:
current_state = State.RUN
State.JUMP when velocity.y >0:
current_state = State.FALLING
func handle_animation() -> void:
match current_state:
State.IDLE:
@@ -59,13 +69,16 @@ func handle_animation() -> void:
State.JUMP:
if upJump:
player_graphic.play("jump")
func handle_movement(delta:float) -> void:
State.HURT:
player_graphic.play("hurt")
State.DEATH:
player_graphic.play("death")
func handle_movement(delta:float) -> void:
if direction == 0:
#not moving
velocity.x = move_toward(velocity.x,0, acceleration)
else:
velocity.x = move_toward(velocity.x,SPEED * direction, acceleration)
velocity.x = move_toward(velocity.x, SPEED * direction, acceleration)
if not is_on_floor():
velocity += get_gravity() * delta
@@ -74,54 +87,54 @@ func handle_movement(delta:float) -> void:
jump_buffer_timer.stop()
current_state = State.JUMP
upJump = true
func handle_input():
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
#velocity.y = JUMP_VELOCITY
jump_buffer_timer.start()
direction = Input.get_axis("ui_left", "ui_right")
if direction <0:
facing =FaceDirection.LEFT
if direction < 0:
facing = FaceDirection.LEFT
player_graphic.flip_h = true
if direction > 0:
facing = FaceDirection.RIGHT
player_graphic.flip_h = false
if Input.is_action_just_pressed("shove") && pushEnabled:
var shoveDirection:int
match facing:
FaceDirection.RIGHT:
#this is where tabbing does'nt work
shoveDirection = 1
FaceDirection.LEFT:
shoveDirection = -1
pushTarget.apply_central_impulse(Vector2(shoveDirection,0)*700)
if Input.is_action_just_pressed("shoot"):
print("Ima shoot")
match facing:
FaceDirection.RIGHT:
%SceneManager.makeBullet(right_spawn.global_transform,700)
print("shoot to right")
%SceneManager.makeBullet(right_spawn.global_transform, 700)
FaceDirection.LEFT:
%SceneManager.makeBullet(left_spawn.global_transform,-700)
%SceneManager.makeBullet(left_spawn.global_transform, -700)
func handle_collisions():
for i in get_slide_collision_count():
var c = get_slide_collision(i)
if c.get_collider() is RigidBody2D:
c.get_collider().apply_central_impulse(-c.get_normal() * 100)
# i?
if right_cast.is_colliding() && facing == FaceDirection.RIGHT:
if right_cast.is_colliding() && facing==FaceDirection.RIGHT:
print("RC is colliding")
var collider = right_cast.get_collider()
if collider is Node && collider is RigidBody2D && collider.is_in_group("pushables"):
pushTarget = collider
pushEnabled = true
if left_cast.is_colliding() && facing == FaceDirection.LEFT:
if left_cast.is_colliding() && facing==FaceDirection.LEFT:
var collider = left_cast.get_collider()
if collider is Node && collider is RigidBody2D && collider.is_in_group("pushables"):
pushTarget = collider
pushEnabled = true
if not right_cast.is_colliding() && not left_cast.is_colliding():
pushEnabled = false
@@ -130,3 +143,7 @@ func _on_animation_finished() -> void:
match current_state:
State.JUMP:
upJump = false
State.HURT:
current_state = State.IDLE
State.DEATH:
playerDeathCompleteSignal.emit()
+1 -1
View File
@@ -1 +1 @@
uid://cnwga6l2btdbk
uid://b7rahgxxw1yuw
+9
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
uid://r408skwtvisy
+18
View File
@@ -0,0 +1,18 @@
[gd_resource type="Resource" script_class="SavedGame" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/rscs/savedgame.gd" id="1_v2d26"]
[resource]
script = ExtResource("1_v2d26")
gameData = {
"GameLevel": 0,
"PlayerHealth": 100,
"TimeAvailable": 7,
"enemies": {
"slime0": {
"damage": 31,
"global_position": Vector2(606.127, 280),
"health": 68
}
}
}
+12
View File
@@ -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 = 30
metadata/_custom_type_script = "uid://r408skwtvisy"
+3
View File
@@ -0,0 +1,3 @@
class_name SavedGame extends Resource
@export var gameData:Dictionary
+1
View File
@@ -0,0 +1 @@
uid://b0iyohv2ch6yg
+12
View File
@@ -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 = 50
max_health = 50
starting_health = 50
meleeDamage = 25
rangeDamage = 0
metadata/_custom_type_script = "uid://r408skwtvisy"
+67 -10
View File
@@ -1,43 +1,100 @@
class_name SceneManager extends Node2D
var bulletArray = []
var bulletArray =[]
var totalAllowedBullets = 7
var bullet = preload("res://scenes/bullet.tscn")
@onready var game: Node2D = $".."
var slime = preload("res://scenes/slime.tscn")
@onready var triggers: Node2D = $"../triggers"
@onready var coins: Node2D = $"../coins"
@onready var enemies: Node2D = $"../enemies"
@onready var player: Player = $"../Player"
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
var loadObject = Gamecontroller.reset()
print("LOAD OBECT")
print(loadObject)
loadSceneInfo(loadObject)
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:
print("found coins")
for obj in coins.get_children():
updateCoins()
if enemies:
updateEnemies()
Gamecontroller.destroySignal.connect(destroy)
Gamecontroller.levelChangeSignal.connect(changeScene)
Gamecontroller.playerDamageSignal.connect(player.handle_damage)
Gamecontroller.playerDeathSignal.connect(player.handle_death)
player.playerDeathCompleteSignal.connect(Gamecontroller.deathComplete)
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)
Gamecontroller.addEnemyToLevel(obj)
func updateCoins():
var coinCount = 0
for obj in coins.get_children():
if obj is Coin:
print("coin collected")
obj.coinCollectedSignal.connect(game.coinCollected)
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:
pass
# makes and recycles bullets
func bulletFactory():
var myBullet:Bullet
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()
bulletArray.push_front(myBullet)
return myBullet
func makeBullet(position, speed):
var someBullet = bulletFactory()
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)
func loadSceneInfo(loadObject)->void:
print("make the scene")
if loadObject.size()<1:
print("bailing out")
return
if enemies:
for obj in enemies.get_children():
if obj is Slime:
obj.queue_free()
#build and place save game badguys
var enemiesList = loadObject["enemies"]
for key in enemiesList:
print(enemiesList[key])
var badguy = slime.instantiate()
enemies.add_child(badguy)
badguy.global_position = enemiesList[key]["global_position"]
+1 -1
View File
@@ -1 +1 @@
uid://chu805lvjnh7s
uid://d1daji4xwuj03
+51
View File
@@ -0,0 +1,51 @@
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)
enum State {IDLE, HURT, DEATH}
var currentState = State.IDLE
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
func updateAnimation()->void:
match currentState:
State.IDLE:
slime_graphic.play("idle")
State.HURT:
slime_graphic.play("hurt")
func handle_damage()->void:
currentState = State.HURT
# 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
updateAnimation()
position.x += direction * speed * delta
func _on_body_entered(body: Node2D) -> void:
if body is Player:
print("Slime attack!")
playerDamageSignal.emit(body, self)
func _on_slime_graphic_animation_finished() -> void:
match currentState:
State.HURT:
currentState = State.IDLE
+1
View File
@@ -0,0 +1 @@
uid://cuaxw7eh73a1i
+5 -2
View File
@@ -7,6 +7,9 @@ signal areaTriggerSignal(effect, Object)
func _on_body_entered(body: Node2D) -> void:
print("trigger sees a body")
print("Trigger sees reaction")
areaTriggerSignal.emit(effect, body)
func _on_area_trigger_signal(effect: Variant, Object: Variant) -> void:
pass # Replace with function body.
+1 -1
View File
@@ -1 +1 @@
uid://c57chsew3r87y
uid://ditcg54u4c1lr