123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Copyright 2016 RWS Inc, All Rights Reserved
- //
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of version 2 of the GNU General Public License as published by
- // the Free Software Foundation
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License along
- // with this program; if not, write to the Free Software Foundation, Inc.,
- // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- //
- //*****************************************************************************
- //
- // EVENT.H
- //
- //*****************************************************************************
- #ifndef event_h
- #define event_h
- #include "grip.h"
- #include "list.h"
- #define HORIZONTAL 1
- #define VERTICAL 0
- #define EVENT_IGNORES 50 //This determines how many events
- //will fit on the ignore list. The
- //larger this value, the slower the
- //searches through the list will be.
- //Can be set to any value keeping
- //in mind memory and speed limitations
- #define EVENT_SPACING 16 //This value is used when generating
- //indexes into the event data. It
- //determines the spacing between
- //the coordinate associated with one
- //index and the coordinae associated
- //with the next index. By setting this
- //to a smaller value, you can cut down
- //on the number of compares required
- //to find events within a given
- //coordinate range, but at the same
- //time, you increase the size of the
- //index table. The size of the table
- //is given by EVENT_MAX_COORD divided
- //by this value.
- #define EVENT_MAX_COORD 4096 //This is the maximum value that
- //this module will encounter in
- //the event data. It can handle
- //higher values, but the search
- //times for any values above
- //this one will not have the benefit
- //of the index table, and hence
- //will be very slow
- //This value cannot exceed 32767
- #define EVENT_TRIGGER_TOP 32 //Top of trigger region
- #define EVENT_TRIGGER_BOTTOM 32 //Bottom of trigger region
- #define EVENT_TRIGGER_LEFT 32 //Left side of trigger region
- #define EVENT_TRIGGER_RIGHT 32 //Right side of trigger region
- #define EVENT_LEFT (short) 0x8000 //%1000000000000000
- #define EVENT_RIGHT (short) 0x4000 //%0100000000000000
- #define EVENT_UP 0x2000 //%0010000000000000
- #define EVENT_DOWN 0x1000 //%0001000000000000
- #define EVENT_DIR_MASK 0xf000 //%1111000000000000
- #define EVENT_INDEX_MAX 255
- #define EVENT_PERMANENT -1
- #define EVENT_TEMPORARY -2
- #define EVENT_NOT_IN_RANGE 10
- #define EVENT_ON_IGNORE_LIST 11
- void event_undefined(); //null event handler function
- typedef struct tag_EVENT
- {
- short sX; // From data file = x position
- short sY; // From data file = y position
- short sType; // From data file = application assigned id number
- short sFlags; // From data file = directional or optional trigger
- short sTimer; // Used when the event is on the ignore list
- short sIgnoreTimer; // Created & used in CEvent
- } EVENT;
- class CEvent
- {
- protected:
- short m_sScanYFrom;
- short m_sScanYTo;
- short m_sScanXFrom;
- short m_sScanXTo;
- short m_sEventTriggerMin;
- short m_sEventTriggerMax;
- short m_sEventConstMin;
- short m_sEventConstMax;
- short m_sDispOldX;
- short m_sDispOldY;
- short m_sOrientation;
- short m_sEventDir;
- EVENT* m_pEventData;
- static EVENT* m_pEventList; // Currently selected event set for this level
- static short m_aIndexList[EVENT_MAX_COORD/EVENT_SPACING];
- static CList m_IgnoreList;
- short SelectSet(short sEventSet);
- void TriggerInit(short sDispX, short sDispY);
- short Trigger(short sDispX, short sDispY);
- void CreateIndexes(short sOrientation);
- short Scan();
- short CallHandler(short sIndex);
- void DecrementTimers();
-
- inline void From_Bottom(short s)
- {
- m_sScanYFrom = s + GRIP_DISPLAY_H + EVENT_TRIGGER_BOTTOM + 1;
- }
- inline void To_Bottom(short s)
- {
- m_sScanYTo = s + GRIP_DISPLAY_H + EVENT_TRIGGER_BOTTOM;
- }
- inline void From_Top(short s)
- {
- m_sScanYFrom = max(0, s - EVENT_TRIGGER_TOP);
- }
- inline void To_Top(short s)
- {
- m_sScanYTo = max(0, s - (EVENT_TRIGGER_TOP + 1));
- }
- inline void From_Left(short s)
- {
- m_sScanXFrom = max(0, s - EVENT_TRIGGER_LEFT);
- }
- inline void To_Left(short s)
- {
- m_sScanXTo = max(0, s - (EVENT_TRIGGER_LEFT + 1));
- }
- inline void From_Right(short s)
- {
- m_sScanXFrom = s + GRIP_DISPLAY_W + EVENT_TRIGGER_RIGHT + 1;
- }
- inline void To_Right(short s)
- {
- m_sScanXTo = s + GRIP_DISPLAY_W + EVENT_TRIGGER_RIGHT;
- }
- public:
- // Default Constructor
- CEvent();
- // Destructor
- ~CEvent();
- // Reset - warm start the module
- void Reset();
- // Add Set
- short AddSet(short sSetNum);
- // Select Set
- short SelectSet();
- // TriggerInit - Call at start of level to trigger on-screen events
- void TriggerInit();
- // Trigger - Called every time a new event is "uncovered"
- void Trigger();
- // Ignore - Put event on the ignore list
- void Ignore(EVENT* pEvent);
- // Unignore - remove event from the ignore list
- void Unignore(EVENT* pEvent);
- // Search - search for event in selected event list
- EVENT* Search(short sEventNum);
- // SearchNext - search for next event of same type in the list
- EVENT* SearchNext(EVENT* pEvent);
- // SearchAll - search for event in all event lists
- short SearchAll(short sEventNum);
- };
-
- #endif //event_h
|