Attempt2/src/actors/players/playerE/PlayerE.gd

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