The beginning of public history
This commit is contained in:
193
Scripts/PlayerManager.gd
Normal file
193
Scripts/PlayerManager.gd
Normal file
@@ -0,0 +1,193 @@
|
||||
extends KinematicBody2D
|
||||
|
||||
|
||||
|
||||
|
||||
#----------- Equipment
|
||||
var currentlyEquiped = "none"
|
||||
var sheathed = "saber"
|
||||
|
||||
|
||||
#----------- misc movement
|
||||
const UP = Vector2(0, -1)
|
||||
const BASE_GRAVITY = 20
|
||||
const BASE_SPEED = 150
|
||||
var motion = Vector2()
|
||||
|
||||
#----------- Jumping related variables
|
||||
const BASE_JUMP = -250 #Motion added for a jump
|
||||
var extra_jumps = 0 #Number of double jumps a player has
|
||||
var current_jumps = 0 #Number of jumps a player has left
|
||||
var jumpHeight = 0
|
||||
var coins = 0
|
||||
var GAMEOVER = false
|
||||
|
||||
const JUMP_PLATFORM = preload("res://Nodes/jump_platform.tscn")
|
||||
|
||||
func _ready():
|
||||
extra_jumps = SaveManager.get_action_value('jump')/4
|
||||
jumpHeight = SaveManager.get_action_value('jump') * -2
|
||||
sheathed = SaveManager.get_equiped()
|
||||
updateEquipment()
|
||||
|
||||
func victoryCondition():
|
||||
SaveManager.change_upgrade_points(coins)
|
||||
slide_out()
|
||||
|
||||
|
||||
const VICTORY_SCREEN = "res://Nodes/Victory.tscn"
|
||||
var slide_progress = 0
|
||||
var slide_timer
|
||||
const SLIDE_SPEED = 0.0125
|
||||
const PIXELS_PER = 32
|
||||
func slide_out():
|
||||
$CanvasLayer/GUI/SlideRect.rect_size.y = slide_progress
|
||||
if slide_progress < 600:
|
||||
slide_progress += PIXELS_PER
|
||||
if(!slide_timer):
|
||||
slide_timer = Timer.new()
|
||||
add_child(slide_timer)
|
||||
slide_timer.connect("timeout", self, "slide_out")
|
||||
slide_timer.start(SLIDE_SPEED)
|
||||
else:
|
||||
get_tree().change_scene(VICTORY_SCREEN)
|
||||
|
||||
func done_sliding():
|
||||
return slide_progress >= 600
|
||||
|
||||
signal unequip
|
||||
|
||||
var waitingToUpdate = 0
|
||||
func _process(delta):
|
||||
if(Input.is_action_just_pressed("sheath")):
|
||||
switch_sheath()
|
||||
if(Input.is_action_pressed("attack") and currentlyEquiped == "none"):
|
||||
switch_sheath()
|
||||
|
||||
func deal_damage(dmg = 1):
|
||||
playAudio("Hero_Hurt.wav")
|
||||
updateHealth(-dmg)
|
||||
print(getHealth())
|
||||
|
||||
func switch_sheath():
|
||||
if(sheathed == "none"):
|
||||
sheathed = currentlyEquiped
|
||||
currentlyEquiped = "none"
|
||||
else:
|
||||
currentlyEquiped = sheathed
|
||||
sheathed = "none"
|
||||
emit_signal("unequip")
|
||||
updateEquipment()
|
||||
|
||||
var audioPlayer
|
||||
func playAudio(track):
|
||||
if !audioPlayer:
|
||||
audioPlayer = AudioStreamPlayer.new()
|
||||
self.add_child(audioPlayer)
|
||||
audioPlayer.stream = load("res://Sound/" + track)
|
||||
audioPlayer.volume_db = -30
|
||||
audioPlayer.play()
|
||||
|
||||
func pickupCoin():
|
||||
coins += 1
|
||||
$CanvasLayer/GUI/Label.text = String(coins)
|
||||
|
||||
var maxHP = 25
|
||||
var health
|
||||
func updateHealth(val):
|
||||
if !health:
|
||||
health = maxHP
|
||||
$CanvasLayer/GUI/Healthbar.max_value = maxHP
|
||||
health += val
|
||||
$CanvasLayer/GUI/Healthbar.value = health
|
||||
if(health <= 0):
|
||||
game_over()
|
||||
|
||||
func getHealth():
|
||||
if !health:
|
||||
health = maxHP
|
||||
return health
|
||||
|
||||
func game_over():
|
||||
GAMEOVER = true
|
||||
$CanvasLayer/GUI.hide()
|
||||
$CanvasLayer/GameOver.show()
|
||||
|
||||
var tileMap
|
||||
|
||||
func _physics_process(delta):
|
||||
if GAMEOVER:
|
||||
hide()
|
||||
else:
|
||||
#Implement the force of gravity!
|
||||
motion.y += BASE_GRAVITY
|
||||
|
||||
#Moves the player left & right
|
||||
if(Input.is_action_pressed("right")):
|
||||
motion.x = BASE_SPEED
|
||||
elif (Input.is_action_pressed("left")):
|
||||
motion.x = -BASE_SPEED
|
||||
else:
|
||||
motion.x = 0
|
||||
|
||||
if is_on_floor():
|
||||
motion.y = 0
|
||||
|
||||
if !tileMap:
|
||||
var childs = get_parent().get_children()
|
||||
for child in childs:
|
||||
if typeof(child) == typeof(TileMap):
|
||||
tileMap = child
|
||||
break
|
||||
|
||||
#Handle the jumpings
|
||||
if (Input.is_action_just_pressed("up")):
|
||||
if is_on_floor():
|
||||
if(Input.is_action_pressed("down")):
|
||||
var tilePos = tileMap.world_to_map(position)
|
||||
tilePos.y += 1
|
||||
if(tileMap.get_cell(tilePos.x, tilePos.y) == 1):
|
||||
position.y += 4
|
||||
else:
|
||||
motion.y = BASE_JUMP + jumpHeight
|
||||
#Reset number of jumps
|
||||
current_jumps = extra_jumps
|
||||
elif current_jumps > 0:
|
||||
motion.y = BASE_JUMP + jumpHeight
|
||||
playAudio("Sword.wav")
|
||||
spawn_jump_platform()
|
||||
current_jumps -= 1
|
||||
|
||||
|
||||
#Do animations
|
||||
$AnimatedSprite.flip_h = get_global_mouse_position().x < position.x
|
||||
|
||||
if is_on_floor():
|
||||
if($AnimatedSprite.animation == "jump"):
|
||||
playAudio("Sword2.wav")
|
||||
if abs(motion.x) > 0:
|
||||
if(motion.x > 0):
|
||||
$AnimatedSprite.play("walk", true)
|
||||
else:
|
||||
$AnimatedSprite.play("walk", false)
|
||||
else:
|
||||
$AnimatedSprite.play("idle")
|
||||
else:
|
||||
$AnimatedSprite.play("jump")
|
||||
|
||||
motion = move_and_slide(motion, UP)
|
||||
|
||||
func spawn_jump_platform():
|
||||
var platform = JUMP_PLATFORM.instance()
|
||||
get_parent().add_child(platform)
|
||||
platform.position = Vector2(position.x, position.y + 4)
|
||||
|
||||
pass
|
||||
|
||||
func updateEquipment():
|
||||
var equipmentNode = get_child(3)
|
||||
if(equipmentNode.get_children().size() + 1 > 0):
|
||||
for enode in equipmentNode.get_children():
|
||||
enode.queue_free()
|
||||
var equipment = load("res://Nodes/Equipment/" + currentlyEquiped + ".tscn").instance()
|
||||
equipmentNode.add_child(equipment)
|
||||
Reference in New Issue
Block a user