26 lines
786 B
GDScript
26 lines
786 B
GDScript
class_name MovementSystem
|
|
extends System
|
|
|
|
func query():
|
|
# Find all entities that have both transform and velocity
|
|
return q.with_all([C_Velocity])
|
|
|
|
func process(entities: Array[Entity], _components: Array, delta: float):
|
|
for entity in entities:
|
|
var c_velocity = entity.get_component(C_Velocity) as C_Velocity
|
|
|
|
if entity.velocity.length() == 0:
|
|
entity.velocity = c_velocity.velocity
|
|
|
|
# Add the gravity.
|
|
if not entity.is_on_floor():
|
|
entity.velocity += entity.get_gravity() * delta
|
|
|
|
# Bounce off screen edges (simple example)
|
|
if entity.global_position.x > 10 && entity.velocity.x > 0:
|
|
entity.velocity = -c_velocity.velocity
|
|
if entity.global_position.x < -10 && entity.velocity.x < 0:
|
|
entity.velocity = c_velocity.velocity
|
|
|
|
entity.move_and_slide()
|