You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.0 KiB
GDScript

1 year ago
extends KinematicBody2D
# Variables
## Speed
export (int) var base_speed = 200 setget set_base_speed, get_base_speed # Character's speed (scalar)
export (int) var speed setget , get_speed # Character's speed (scalar)
var speed_mod = 1
var speed_ceil = 5
var speed_floor = .01
## Velocity
var can_move = true setget set_can_move, get_can_move
export (Vector2) var velocity = Vector2(0,0) setget set_velocity, get_velocity # Character's directional velocity (vector)
var internal_velocity = Vector2(0,0) setget set_internal_velocity, get_internal_velocity
var external_velocity = Vector2(0,0) setget set_external_velocity, get_external_velocity
var velocity_mod = 1
# Setters + Getters
func set_base_speed(new_speed):
base_speed = new_speed
func get_base_speed():
return base_speed
func set_can_move(new_bool):
can_move = new_bool
func get_can_move():
return can_move
func set_external_velocity(new_velocity):
external_velocity = new_velocity
func get_external_velocity():
return external_velocity
1 year ago
func get_gpos():
return global_position
1 year ago
func set_internal_velocity(new_velocity):
internal_velocity = new_velocity
func get_internal_velocity():
if not get_can_move():
return Vector2(0.0,0.0)
return internal_velocity
func get_speed():
if !get_can_move():
return 0
else:
return base_speed * get_speed_mod()
func get_speed_mod():
if speed_mod < speed_floor:
return speed_floor
elif speed_mod > speed_ceil:
return speed_ceil
else:
return speed_mod
func set_velocity(new_velocity):
velocity = new_velocity
func get_velocity():
return get_internal_velocity().normalized()
func get_velocity_angle():
return get_velocity().angle()
func get_velocity_length():
return get_velocity().length()
func get_user():
return get_parent()
# Logic
func _process(delta):
var v = get_velocity() * get_speed() * delta * KnowledgeBase.logic_time
1 year ago
move_and_collide(v)
1 year ago
if v != Vector2(0,0):
MessageBus.publish("moved", get_user())
1 year ago
#func _setup():
#set_process(true)
1 year ago
1 year ago
#func _ready():
# set_process(false)