rubidium@8790: /* $Id$ */ rubidium@8790: rubidium@8790: /** @file signs_base.h Base class for signs. */ rubidium@8790: rubidium@8790: #ifndef SIGNS_BASE_H rubidium@8790: #define SIGNS_BASE_H rubidium@8790: rubidium@8790: #include "signs_type.h" rubidium@9129: #include "viewport_type.h" rubidium@8790: #include "oldpool.h" rubidium@8790: rubidium@8790: DECLARE_OLD_POOL(Sign, Sign, 2, 16000) rubidium@8790: rubidium@8790: struct Sign : PoolItem { rubidium@8790: char *name; rubidium@8790: ViewportSign sign; rubidium@8790: int32 x; rubidium@8790: int32 y; rubidium@8790: byte z; rubidium@10207: OwnerByte owner; // placed by this company. Anyone can delete them though. OWNER_NONE for gray signs from old games. rubidium@8790: rubidium@8790: /** rubidium@8790: * Creates a new sign rubidium@8790: */ rubidium@10207: Sign(Owner owner = INVALID_OWNER); rubidium@8790: rubidium@8790: /** Destroy the sign */ rubidium@8790: ~Sign(); rubidium@8790: rubidium@10207: inline bool IsValid() const { return this->owner != INVALID_OWNER; } rubidium@8790: }; rubidium@8790: rubidium@8790: static inline SignID GetMaxSignIndex() rubidium@8790: { rubidium@8790: /* TODO - This isn't the real content of the function, but rubidium@8790: * with the new pool-system this will be replaced with one that rubidium@8790: * _really_ returns the highest index. Now it just returns rubidium@8790: * the next safe value we are sure about everything is below. rubidium@8790: */ rubidium@8790: return GetSignPoolSize() - 1; rubidium@8790: } rubidium@8790: rubidium@8790: static inline bool IsValidSignID(uint index) rubidium@8790: { rubidium@8790: return index < GetSignPoolSize() && GetSign(index)->IsValid(); rubidium@8790: } rubidium@8790: rubidium@8790: #define FOR_ALL_SIGNS_FROM(ss, start) for (ss = GetSign(start); ss != NULL; ss = (ss->index + 1U < GetSignPoolSize()) ? GetSign(ss->index + 1U) : NULL) if (ss->IsValid()) rubidium@8790: #define FOR_ALL_SIGNS(ss) FOR_ALL_SIGNS_FROM(ss, 0) rubidium@8790: rubidium@8790: #endif /* SIGNS_BASE_H */