123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- //===========================================================================//
- // Copyright (C) Microsoft Corporation. All rights reserved. //
- //===========================================================================//
- #ifndef GOAL_H
- #define GOAL_H
- #include "dgoal.h"
- #include "dgameobj.h"
- #include "move.h"
- #define MAX_GATES 30
- #define MAX_MOVEGATES_CONTROLLED 10
- #define MAX_MOVEGATES_PER_ROOM 4
- #define MAX_OBJECTS_PER_ROOM 10
- #define MAX_CONTROLLED_OBJECTS 200
- typedef enum {
- GOAL_NONE,
- GOAL_OBJECT,
- GOAL_REGION,
- NUM_GOAL_TYPES
- } GoalType;
- typedef enum {
- GOAL_LINK_NONE,
- GOAL_LINK_MOVE,
- GOAL_LINK_CONTROLS,
- GOAL_LINK_CONTROLLED,
- NUM_GOAL_LINK_TYPES
- } GoalLinkType;
- typedef union {
- struct {
- unsigned long WID;
- } object;
- struct {
- short minRow;
- short minCol;
- short maxRow;
- short maxCol;
- } region;
- } GoalInfo;
- typedef struct _GoalLink {
- GoalObjectPtr goalObject;
- GoalLinkType type;
- long cost;
- struct _GoalLink* next;
- } GoalLink;
- typedef struct _GoalPathFindInfo {
- long cost;
- long parent;
- long fromIndex;
- unsigned long flags;
- long g;
- long hPrime;
- long fPrime;
- } GoalPathFindInfo;
- typedef GoalLink* GoalLinkPtr;
- class GoalObject {
- public:
- bool used;
- GoalType type;
- unsigned short id;
- char name[20];
- GoalLinkPtr links;
- GoalObjectPtr controller;
- GoalInfo info;
- GoalObjectPtr next;
- GoalObjectPtr prev;
- GoalPathFindInfo pathInfo;
- public:
- void* operator new (size_t ourSize);
- void operator delete (void* us);
-
- void init (void);
- GoalObject (void) {
- init ();
- }
- void destroy (void);
- ~GoalObject (void) {
- destroy();
- }
- void initObject (char* name, GameObjectPtr obj);
- void initRegion (char* name, long minRow, long minCol, long maxRow, long maxCol);
- void addLink (GoalObjectPtr gobject, GoalLinkType linkType);
- void addController (GoalObjectPtr gobject);
- };
- class GoalManager {
- public:
- long numGoalObjects;
- GoalObjectPtr goalObjects;
- long goalObjectPoolSize;
- GoalObjectPtr goalObjectPool;
- short regionMap[2/*MAX_MAP_CELL_WIDTH*/][2/*MAX_MAP_CELL_WIDTH*/];
- long numRegions;
- short* fillStack;
- long fillStackIndex;
- public:
- void* operator new (size_t ourSize);
- void operator delete (void* us);
-
- void init (void);
- GoalManager (void) {
- init ();
- }
- void destroy (void);
- ~GoalManager (void) {
- destroy();
- }
- void setup (long poolSize);
- void build (void);
- bool fillWallGateRegion (long row, long col, long region);
- bool fillRegion (long row, long col, long region);
- void calcRegions (void);
- long addLinks (GoalObjectPtr gobject, long numObjs, GameObjectPtr* objList);
- //long setControl (GoalObjectPtr controller, GoalObjectPtr controllee);
- GoalObjectPtr addRegion (GoalObjectPtr parent, GoalLinkType linkType, char* name, long minRow, long minCol, long maxRow, long maxCol);
- GoalObjectPtr addObject (GoalObjectPtr parent, GoalLinkType linkType, char* name, GameObjectPtr object);
- void clear (void);
- GoalObjectPtr newGoalObject (void);
- GoalObjectPtr calcGoal (long startCell[2], long goalCell[2]);
- GoalObjectPtr calcGoal (GameObjectPtr attacker, GameObjectPtr target);
-
- GoalObjectPtr calcGoal (GameObjectPtr attacker, Stuff::Vector3D location);
-
- GoalObjectPtr calcGoal (Stuff::Vector3D start, Stuff::Vector3D location);
- };
- #endif
|