#include "ActiveObject.h"

void ActiveObject::SetPosition(VecFPos3 pos)
{
    BaseObject::SetPosition(pos);
    BaseObject::SetRenderZOrder(this->Position.y);
}

void ActiveObject::SetYpos(float y)
{
    BaseObject::SetYpos(y);
    BaseObject::SetRenderZOrder(this->Position.y);
}

void ActiveObject::SetSpeed(VecSpeed3 speed)
{
    this->Speed = speed;
}

VecSpeed3 ActiveObject::GetSpeed()
{
    return this->Speed;
}

void ActiveObject::Update(float deltaTime)
{
    // X Y 轴方向的加速度计算
    if (Speed.x != 0 || Speed.y != 0)
    {
        MoveBy(Speed.x * deltaTime, Speed.y * deltaTime, 0);
    }
    // Z轴只在Z轴大于0时 或者 Z轴速度向上时才会有重力
    if (Position.z > 0 || Speed.z > 0)
    {
        // TODO 还没有写角色属性 要读了角色属性以后才是正确的
        float Gravity = 68000.0 / 1000.0 * 15.0;
        Speed.z -= Gravity * deltaTime;
        MoveBy(0, 0, Speed.z * deltaTime);
    }
    // Z轴小于0时要修正
    else if (Position.z < 0)
    {
        Position.z = 0;
        Speed.z = 0;
        SetPosition(Position);
        SDL_LogError(0, "修正Z轴");
    }
    // 执行父类的更新
    BaseObject::Update(deltaTime);
}
