From 5c69ae21ddf535f862585a4fa5892a9a1146618f Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Fri, 8 Jul 2011 19:09:33 +0000 Subject: NEVERHOOD: More work on Klayman (still eye cancerous code) - Start to implement KmScene1001 - Implement queryPositionSprite and queryPositionRectList - Implement message list related code (setting and running them) - Access to message params now with accessors (so compatible types can be converted) --- engines/neverhood/entity.h | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) (limited to 'engines/neverhood/entity.h') diff --git a/engines/neverhood/entity.h b/engines/neverhood/entity.h index 64c1181089..29bf6be988 100644 --- a/engines/neverhood/entity.h +++ b/engines/neverhood/entity.h @@ -30,16 +30,43 @@ namespace Neverhood { class Entity; +enum MessageParamType { + mptInteger, + mptPoint, + mptEntity +}; + struct MessageParam { +public: + MessageParam(uint32 value) : _type(mptInteger), _integer(value) {} + MessageParam(NPoint value) : _type(mptPoint), _point(value) {} + MessageParam(Entity *entity) : _type(mptEntity), _entity(entity) {} + uint32 asInteger() const { + assert(_type == mptInteger); + return _integer; + } + NPoint asPoint() const { + assert(_type == mptInteger || _type == mptPoint); + if (_type == mptInteger) { + NPoint pt; + pt.x = (_integer >> 16) & 0xFFFF; + pt.y = _integer & 0xFFFF; + return pt; + } + return _point; + } + Entity *asEntity() const { + assert(_type == mptEntity); + return _entity; + } +protected: union { uint32 _integer; NPoint _point; Entity *_entity; // TODO: Other types... }; - MessageParam(uint32 value) { _integer = value; } - MessageParam(NPoint value) { _point = value; } - MessageParam(Entity *entity) { _entity = entity; } + MessageParamType _type; // TODO: Constructors for the param types... }; -- cgit v1.2.3