goal.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. //===========================================================================//
  2. // Copyright (C) Microsoft Corporation. All rights reserved. //
  3. //===========================================================================//
  4. #ifndef GOAL_H
  5. #define GOAL_H
  6. #include "dgoal.h"
  7. #include "dgameobj.h"
  8. #include "move.h"
  9. #define MAX_GATES 30
  10. #define MAX_MOVEGATES_CONTROLLED 10
  11. #define MAX_MOVEGATES_PER_ROOM 4
  12. #define MAX_OBJECTS_PER_ROOM 10
  13. #define MAX_CONTROLLED_OBJECTS 200
  14. typedef enum {
  15. GOAL_NONE,
  16. GOAL_OBJECT,
  17. GOAL_REGION,
  18. NUM_GOAL_TYPES
  19. } GoalType;
  20. typedef enum {
  21. GOAL_LINK_NONE,
  22. GOAL_LINK_MOVE,
  23. GOAL_LINK_CONTROLS,
  24. GOAL_LINK_CONTROLLED,
  25. NUM_GOAL_LINK_TYPES
  26. } GoalLinkType;
  27. typedef union {
  28. struct {
  29. unsigned long WID;
  30. } object;
  31. struct {
  32. short minRow;
  33. short minCol;
  34. short maxRow;
  35. short maxCol;
  36. } region;
  37. } GoalInfo;
  38. typedef struct _GoalLink {
  39. GoalObjectPtr goalObject;
  40. GoalLinkType type;
  41. long cost;
  42. struct _GoalLink* next;
  43. } GoalLink;
  44. typedef struct _GoalPathFindInfo {
  45. long cost;
  46. long parent;
  47. long fromIndex;
  48. unsigned long flags;
  49. long g;
  50. long hPrime;
  51. long fPrime;
  52. } GoalPathFindInfo;
  53. typedef GoalLink* GoalLinkPtr;
  54. class GoalObject {
  55. public:
  56. bool used;
  57. GoalType type;
  58. unsigned short id;
  59. char name[20];
  60. GoalLinkPtr links;
  61. GoalObjectPtr controller;
  62. GoalInfo info;
  63. GoalObjectPtr next;
  64. GoalObjectPtr prev;
  65. GoalPathFindInfo pathInfo;
  66. public:
  67. void* operator new (size_t ourSize);
  68. void operator delete (void* us);
  69. void init (void);
  70. GoalObject (void) {
  71. init ();
  72. }
  73. void destroy (void);
  74. ~GoalObject (void) {
  75. destroy();
  76. }
  77. void initObject (char* name, GameObjectPtr obj);
  78. void initRegion (char* name, long minRow, long minCol, long maxRow, long maxCol);
  79. void addLink (GoalObjectPtr gobject, GoalLinkType linkType);
  80. void addController (GoalObjectPtr gobject);
  81. };
  82. class GoalManager {
  83. public:
  84. long numGoalObjects;
  85. GoalObjectPtr goalObjects;
  86. long goalObjectPoolSize;
  87. GoalObjectPtr goalObjectPool;
  88. short regionMap[2/*MAX_MAP_CELL_WIDTH*/][2/*MAX_MAP_CELL_WIDTH*/];
  89. long numRegions;
  90. short* fillStack;
  91. long fillStackIndex;
  92. public:
  93. void* operator new (size_t ourSize);
  94. void operator delete (void* us);
  95. void init (void);
  96. GoalManager (void) {
  97. init ();
  98. }
  99. void destroy (void);
  100. ~GoalManager (void) {
  101. destroy();
  102. }
  103. void setup (long poolSize);
  104. void build (void);
  105. bool fillWallGateRegion (long row, long col, long region);
  106. bool fillRegion (long row, long col, long region);
  107. void calcRegions (void);
  108. long addLinks (GoalObjectPtr gobject, long numObjs, GameObjectPtr* objList);
  109. //long setControl (GoalObjectPtr controller, GoalObjectPtr controllee);
  110. GoalObjectPtr addRegion (GoalObjectPtr parent, GoalLinkType linkType, char* name, long minRow, long minCol, long maxRow, long maxCol);
  111. GoalObjectPtr addObject (GoalObjectPtr parent, GoalLinkType linkType, char* name, GameObjectPtr object);
  112. void clear (void);
  113. GoalObjectPtr newGoalObject (void);
  114. GoalObjectPtr calcGoal (long startCell[2], long goalCell[2]);
  115. GoalObjectPtr calcGoal (GameObjectPtr attacker, GameObjectPtr target);
  116. GoalObjectPtr calcGoal (GameObjectPtr attacker, Stuff::Vector3D location);
  117. GoalObjectPtr calcGoal (Stuff::Vector3D start, Stuff::Vector3D location);
  118. };
  119. #endif