rebuild project
This commit is contained in:
1 parent
ceb9ab77cf
commit
11b72a72f8
59 files changed
+1795
-324
No files matched your search
+11
-5
@@ -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 @@
|
||||
uid://p7brl4n4miw6
|
||||
uid://bhh178vuo5bgo
|
||||
+2
-2
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
uid://nqigicsb4oqh
|
||||
@@ -1 +1 @@
|
||||
uid://bv1u5eyjco2m8
|
||||
uid://c5gjsxgxmjfki
|
||||
+135
-17
@@ -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 @@
|
||||
uid://cpua8fr5bby78
|
||||
uid://bblqtronap0j4
|
||||
+45
-28
@@ -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 @@
|
||||
uid://cnwga6l2btdbk
|
||||
uid://b7rahgxxw1yuw
|
||||
@@ -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,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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
@@ -0,0 +1,3 @@
|
||||
class_name SavedGame extends Resource
|
||||
|
||||
@export var gameData:Dictionary
|
||||
@@ -0,0 +1 @@
|
||||
uid://b0iyohv2ch6yg
|
||||
@@ -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
@@ -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 @@
|
||||
uid://chu805lvjnh7s
|
||||
uid://d1daji4xwuj03
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://cuaxw7eh73a1i
|
||||
+5
-2
@@ -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 @@
|
||||
uid://c57chsew3r87y
|
||||
uid://ditcg54u4c1lr
|
||||
Reference in new issue
Block a user