/** component for orbit motion around a point */

module re.util.orbit;

import re.ecs;
import re.math;
import re.time;

/// orbits an entity around a point
class Orbit : Component, Updatable {
    public float angle;
    public float speed;
    public float radius;
    public Vector3 center;

    this(Vector3 center, float radius, float speed, float initial_angle = 0) {
        this.angle = initial_angle;
        this.radius = radius;
        this.speed = speed;
        this.center = center;
    }

    void update() {
        import std.math : sin, cos;

        angle -= speed * Time.delta_time;
        entity.position = center + Vector3(cos(angle) * radius, 0, sin(angle) * radius);
    }
}