97 lines
3.1 KiB
GDScript3
97 lines
3.1 KiB
GDScript3
extends Actor
|
|
|
|
export var player_number: int = 1
|
|
|
|
# Declare member variables here. Examples:
|
|
# var a = 2
|
|
# var b = "text"
|
|
|
|
onready var player_inventory :InventoryManager = InventoryManager.new()
|
|
|
|
var punch_item :Item = preload("res://assets/items/punch.tres")
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
PlayerInfo.player_health = $Health_Component.health
|
|
PlayerInfo.player_inventory = player_inventory
|
|
# Set initial player position in world.
|
|
global_position = LevelInfo.player_start_position
|
|
|
|
player_inventory.add_to_inventory(punch_item)
|
|
player_inventory.select_primary(punch_item)
|
|
|
|
|
|
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta):
|
|
PlayerInfo.player_position = global_position.round()
|
|
|
|
func hit_Receiver(damage):
|
|
$Hurtbox_Component.set_hurtbox(false)
|
|
$Health_Component.take_damage(damage)
|
|
if $Health_Component.health > 0:
|
|
movement_state_machine.change_to_known_state('hurt')
|
|
PlayerInfo.player_health = $Health_Component.health
|
|
if PlayerInfo.player_health <= 0:
|
|
return
|
|
yield( get_tree().create_timer(2 + movement_state_machine.get_state_reference('hurt').timeout_seconds), "timeout")
|
|
$Hurtbox_Component.set_hurtbox(true)
|
|
|
|
func touch_the_thing(the_thing: Interactable) -> bool:
|
|
print("You see! a THING...", the_thing.name)
|
|
if the_thing is HealthPickup:
|
|
# Do some healthy stuff.
|
|
the_thing.trigger_interaction()
|
|
return false
|
|
if the_thing is LevelTransition:
|
|
if movement_state_machine.current_state.name != 'enter_right':
|
|
if the_thing._transition_type == 'door_right':
|
|
# Make sure we're facing right.
|
|
transform.x.x = movement_component.RIGHT
|
|
movement_state_machine.change_to_known_state('enter_right')
|
|
elif the_thing._transition_type == 'door_left':
|
|
transform.x.x = movement_component.LEFT
|
|
movement_state_machine.change_to_known_state('enter_right')
|
|
the_thing.trigger_interaction()
|
|
if the_thing is ItemPickup:
|
|
player_inventory.add_to_inventory(the_thing.item)
|
|
player_inventory.select_secondary(the_thing.item)
|
|
the_thing.trigger_interaction()
|
|
return true
|
|
|
|
var state_to_item_map :Dictionary = {
|
|
"sword": "attack_sword" ,
|
|
"gun": "attack_shoot",
|
|
"punch" : "attack_punch",
|
|
"mushroom" : "attack_shoot"
|
|
}
|
|
|
|
##TODO: We need to find a way to 'use' the item.
|
|
func primary_item() -> String:
|
|
if player_inventory.primary_selection.consumable == false:
|
|
if state_to_item_map.has(player_inventory.primary_selection.name):
|
|
player_inventory.remove_from_inventory(player_inventory.primary_selection)
|
|
return state_to_item_map[player_inventory.primary_selection.name]
|
|
return ''
|
|
|
|
func secondary_item() -> String:
|
|
if player_inventory.secondary_selection != null: # Have to make sure we even have a second
|
|
var _item_name :String = player_inventory.secondary_selection.name
|
|
if state_to_item_map.has(_item_name):
|
|
player_inventory.remove_from_inventory(player_inventory.secondary_selection)
|
|
return state_to_item_map[_item_name]
|
|
|
|
return ''
|
|
|
|
func check_state_change(_new_state_name: String) -> bool:
|
|
match _new_state_name:
|
|
"attack_sword":
|
|
print("nope.")
|
|
return false
|
|
"attack_shoot":
|
|
return true
|
|
_: # None
|
|
return true
|
|
return true
|