runic-godot/data/character/character.gd

57 lines
1.4 KiB
GDScript

extends CharacterBody2D
var speed = 150
var accel = 10
var immobile = false
var inventory = {
"stone": 0,
"wood": 0,
"food": 0
}
var status = {
"health": 100,
"stamina": 100
}
var current_tool = "none"
func change_tool(tool):
current_tool = tool
$body_pivot/body/tool.texture = load(game_data.tools[tool].image)
$body_pivot/body/tool.position = game_data.tools[tool].offset
func _ready():
change_tool("stick")
func _physics_process(delta):
var pre_velocity = Vector2(0, 0)
if !immobile:
pre_velocity = Input.get_vector("move_left", "move_right", "move_up", "move_down")
velocity = lerp(velocity, pre_velocity * speed, accel*delta)
move_and_slide()
func _process(delta):
if Input.is_action_pressed("game_interact"):
if !$animation.is_playing():
$animation.play("hit")
if $body_pivot/raycast.is_colliding():
var hit_object = $body_pivot/raycast.get_collider()
if hit_object.type == "resource":
inventory[hit_object.resource_type] += 1
hit_object.get_node("animation").play("hit")
#update inventory HUD
$hud/inventory/stone_label.text = str(inventory.stone)
$hud/inventory/wood_label.text = str(inventory.wood)
#update status HUD
$hud/bars/health.value = status.health
$hud/bars/stamina.value = status.stamina
func _input(event):
if event is InputEventMouseMotion:
var mouse_pos = get_global_mouse_position()
$body_pivot.rotation = atan2((mouse_pos.y-position.y), (mouse_pos.x-position.x)) + (PI * 0.5)