raze/source/games/sw/src/swactor.h
Christoph Oelckers 8bb609fbb1 - set_int_change_z
2022-10-14 17:17:01 +02:00

60 lines
1.1 KiB
C++

#pragma once
// included by game.h
BEGIN_SW_NS
class DSWActor : public DCoreActor
{
DECLARE_CLASS(DSWActor, DCoreActor)
HAS_OBJECT_POINTERS
public:
bool hasUser;
USER user;
walltype* tempwall; // transient, to replace a hack using a 16 bit sprite field.
TObjPtr<DSWActor*> ownerActor;
DSWActor() = default;
bool hasU() { return hasUser; }
void allocUser()
{
hasUser = true;
}
void clearUser()
{
hasUser = false;
user.Clear();
}
void Serialize(FSerializer& arc) override;
};
inline void UpdateChangeXY(DSWActor* actor)
{
actor->user.set_int_change_x(MOVEx(actor->spr.xvel, actor->int_ang()));
actor->user.set_int_change_y(MOVEy(actor->spr.xvel, actor->int_ang()));
}
inline void UpdateChange(DSWActor* actor, double zfactor = 1.0)
{
UpdateChangeXY(actor);
actor->user.set_int_change_z(int(actor->spr.zvel * zfactor));
}
// subclassed to add a game specific actor() method
// Iterator wrappers that return an actor pointer, not an index.
using SWStatIterator = TStatIterator<DSWActor>;
using SWSectIterator = TSectIterator<DSWActor>;
using SWSpriteIterator = TSpriteIterator<DSWActor>;
END_SW_NS