Object.Mover : components.Mover::Mover {
local safe:
	bool get_inFTL() const;
	bool get_isMoving() const;
	double get_maxAcceleration() const;

restricted local:
	vec3d get_moveDestination() const;
	safe bool get_hasMovePath() const;
	Object@[] getMovePath() const;

	Object@ getLockedOrbit(bool requireLock = true);
	Object@ getAroundLockedOrbit();
	safe bool isLockedOrbit(Object@ at, bool requireLock = true);
	safe bool hasLockedOrbit(bool requireLock = true);

server:
	safe double get_ftlSpeed() const;
	safe quaterniond get_targetRotation() const;
	void set_ftlSpeed(double value);
	safe bool get_isColliding() const;
	safe vec3d get_internalDestination() const;
	safe vec3d get_computedDestination() const;
	void set_maxAcceleration(double accel);
	void set_rotationSpeed(float speed);
	double moverTick(double time);
	bool moveTo(vec3d point, int& id, bool doPathing = true, bool enterOrbit = true, bool allowStop = false);
	bool moveTo(Object& target, int& id, double distance = 0, bool doPathing = true, bool enterOrbit = true);
	safe bool isOnMoveOrder(int id);
	bool rotateTo(quaterniond rotation, int& id);
	void setRotation(quaterniond rotation);
	bool FTLTo(vec3d point, double speed, int& id);
	void FTLTo(vec3d point, double speed);
	void FTLDrop();
	void stopMoving(bool doPathing = true, bool enterOrbit = true);
	void clearMovement();
	void setCombatFacing(quaterniond& rotation);
	void clearCombatFacing();
	async relocking void checkOrbitObject(vec3d destPoint);
	async relocking void createPathTowards(vec3d destPoint, Object@ target = null);
	async relocking void updatePath();
	void speedBoost(double amount);
	void flagPositionUpdate();
	void modAccelerationBonus(double mod);
	void forceLockTo(Object@ obj);
	
	void impulse(vec3d ForceSeconds);
	void rotate(quaterniond rot);
	
	safe bool get_leaderLock() const;
	void set_leaderLock(bool doLock);

	bool get_hasMovePortal();
	vec3d getMovePortal();

	void set_hasVectorMovement(bool value);

	bool writeMoverDelta(Message& msg) const;
	void writeMover(Message& msg) const;

shadow:
	void readMoverDelta(Message& msg);
	void readMover(Message& msg);
}
