2021-10-29 18:49:57 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
// included by game.h
|
|
|
|
|
|
|
|
BEGIN_SW_NS
|
|
|
|
|
|
|
|
|
2021-11-25 21:33:55 +00:00
|
|
|
class DSWActor : public DCoreActor
|
2021-10-29 18:49:57 +00:00
|
|
|
{
|
2021-12-05 08:20:41 +00:00
|
|
|
using Super = DCoreActor;
|
|
|
|
|
2021-10-29 18:49:57 +00:00
|
|
|
DSWActor* base();
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
2021-11-19 23:18:23 +00:00
|
|
|
bool hasUser;
|
|
|
|
USER user;
|
2021-11-24 19:11:50 +00:00
|
|
|
walltype* tempwall; // transient, to replace a hack using a 16 bit sprite field.
|
2021-12-05 09:51:38 +00:00
|
|
|
DSWActor* ownerActor;
|
2021-11-19 23:18:23 +00:00
|
|
|
|
2021-11-25 21:33:55 +00:00
|
|
|
DSWActor()
|
|
|
|
{
|
|
|
|
index = (int(this - base()));
|
|
|
|
}
|
2021-10-29 18:49:57 +00:00
|
|
|
DSWActor& operator=(const DSWActor& other) = default;
|
|
|
|
|
2021-12-05 09:40:31 +00:00
|
|
|
void ClearContent()
|
2021-10-29 18:49:57 +00:00
|
|
|
{
|
2021-12-05 09:40:31 +00:00
|
|
|
Super::ClearContent();
|
2021-11-17 16:01:10 +00:00
|
|
|
clearUser();
|
2021-12-05 09:40:31 +00:00
|
|
|
tempwall = nullptr;
|
2021-10-29 18:49:57 +00:00
|
|
|
}
|
2021-11-19 23:18:23 +00:00
|
|
|
bool hasU() { return hasUser; }
|
2021-11-06 09:40:57 +00:00
|
|
|
|
2021-11-17 16:01:10 +00:00
|
|
|
|
2021-11-19 23:18:23 +00:00
|
|
|
USER* u() { return &user; }
|
2021-10-31 22:01:00 +00:00
|
|
|
USER* allocUser()
|
|
|
|
{
|
2021-11-19 23:18:23 +00:00
|
|
|
hasUser = true;
|
2021-11-06 09:40:57 +00:00
|
|
|
return u();
|
2021-10-31 22:01:00 +00:00
|
|
|
}
|
2021-10-29 18:49:57 +00:00
|
|
|
|
2021-11-01 22:26:13 +00:00
|
|
|
void clearUser()
|
|
|
|
{
|
2021-11-19 23:18:23 +00:00
|
|
|
hasUser = false;
|
|
|
|
user.Clear();
|
2021-11-01 22:26:13 +00:00
|
|
|
}
|
2021-12-05 08:20:41 +00:00
|
|
|
|
|
|
|
void Serialize(FSerializer& arc) override;
|
|
|
|
|
2021-10-29 18:49:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern DSWActor swActors[MAXSPRITES];
|
|
|
|
|
|
|
|
inline DSWActor* DSWActor::base() { return swActors; }
|
|
|
|
|
2021-11-26 00:01:16 +00:00
|
|
|
// subclassed to add a game specific actor() method
|
|
|
|
|
2021-10-29 18:49:57 +00:00
|
|
|
// Iterator wrappers that return an actor pointer, not an index.
|
2021-11-26 20:13:19 +00:00
|
|
|
using SWStatIterator = TStatIterator<DSWActor>;
|
|
|
|
using SWSectIterator = TSectIterator<DSWActor>;
|
|
|
|
using SWSpriteIterator = TSpriteIterator<DSWActor>;
|
2021-10-29 18:49:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
inline FSerializer& Serialize(FSerializer& arc, const char* keyname, DSWActor*& w, DSWActor** def)
|
|
|
|
{
|
|
|
|
int index = w? int(w - swActors) : -1;
|
|
|
|
Serialize(arc, keyname, index, nullptr);
|
|
|
|
if (arc.isReading()) w = index == -1? nullptr : &swActors[index];
|
|
|
|
return arc;
|
|
|
|
}
|
|
|
|
|
2021-11-04 23:00:47 +00:00
|
|
|
|
2021-10-29 18:49:57 +00:00
|
|
|
END_SW_NS
|