npclevel.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. #ifndef __CTILELEVEL__
  2. #define __CTILELEVEL__
  3. #include <stdio.h>
  4. #include "ParticleEngine.h"
  5. // bit 1 = selected
  6. #define GRIDFLAG_SELECTED 1 // selected by user.
  7. #define GRIDFLAG_CALCULATION_TEMP 2 // temporarely used for calculations.
  8. #define GRIDFLAG_MARKED 4 // marked
  9. #define GRIDFLAG_HIDDEN 8 // is the tile visible at all
  10. #define GRIDFLAG_PLUS_STRAIGHT 16
  11. #define GRIDFLAG_MINUS_STRAIGHT 32
  12. #define GRIDFLAG_SAME_EARTH 64
  13. #define GRIDFLAG_SAME_NUMBER 128
  14. enum eLEVELSTATE {
  15. eLEVELSTATE_NORMAL,
  16. //eLEVELSTATE_VERTICAL_ADJ, // vertical adj removed
  17. eLEVELSTATE_BEGINNING,
  18. //eLEVELSTATE_DESTROYING, // destroying removed.
  19. eLEVELSTATE_GAMEOVER,
  20. eLEVELSTATE_LEVELCOMPLETED,
  21. eLEVELSTATE_IDLE
  22. };
  23. struct SNpcGridItem {
  24. int flags;
  25. int index; // index to be rendered.
  26. short gridxpos, gridypos;
  27. int wobble;
  28. int wobbleinc;
  29. int genCount;
  30. int dropping;
  31. int destroying; // -1 if not
  32. int posoffsetx;
  33. int posoffsety;
  34. int lposx;
  35. int lposy;
  36. int animationCount;
  37. };
  38. class CNpcLevel {
  39. public:
  40. CNpcLevel( ITileRenderer *renderer, CParticleEngine *pengine, int width, int height );
  41. virtual ~CNpcLevel();
  42. inline eLEVELSTATE getState() { return m_state; }
  43. void setLevelState( eLEVELSTATE newState );
  44. void createLevel( int levelIndex );
  45. void run( int fixedFrameTime16Bit );
  46. void draw( ITileRenderer &renderer );
  47. inline int getGridWidth() { return m_gridWidth; }
  48. inline int getGridHeight() { return m_gridHeight; }
  49. void click( int fixedx, int fixedy, int type ); // 0=down, 1=move, 2=up
  50. void setGameArea( int x,int y, int width, int height ) {
  51. m_areaX = x;
  52. m_areaY = y;
  53. m_areaWidth = width;
  54. m_areaHeight = height;
  55. };
  56. int takeLevelScore() { int rval = m_levelScore; m_levelScore = 0; return rval; }
  57. int takeLevelProgressChange() { int rval = m_levelProgressChange; m_levelProgressChange = 0; return rval; }
  58. inline int xtoGameArea( const int sourcex );
  59. inline int ytoGameArea( const int sourcey );
  60. void saveToFile( FILE *file );
  61. void loadFromFile( FILE *file );
  62. int m_difficulty;
  63. int m_hasMoves;
  64. int *getCosineTable() { return m_cosineTable; }
  65. // particlesprays, public so the game can access them as well
  66. SParticleSprayType m_scoreSpray;
  67. SParticleSprayType m_smokeSpray;
  68. SParticleSprayType m_sparkleSpray;
  69. SParticleSprayType m_fruitSpray;
  70. SParticleSprayType m_morphSpray;
  71. bool doingNothing() { return m_doingNothing; }
  72. void wobbleHint();
  73. protected:
  74. bool m_doingNothing;
  75. static void scoreParticleRenderFunction( void *data, SParticle *p );
  76. void cancelSelection( int index );
  77. int randomBlock();
  78. int tryApplyChange( SNpcGridItem *i );
  79. int hasMovesLeft(); // return 1 if some move would work .. 0 otherwize
  80. int tryMoveWith( SNpcGridItem *i1, SNpcGridItem *i2 );
  81. void renderTileCaller( SNpcGridItem *i, ITileRenderer &renderer );
  82. int m_areaX, m_areaY, m_areaWidth, m_areaHeight;
  83. void applyDestroy(unsigned int flag);
  84. int calculateSimilar( int index, int x, int y, int checkmode, int dir );
  85. int checkDestroyAt( int blockx, int blocky , char apply = 1); // return 1 if something is to be destroyed.
  86. int checkDestroyWholeLevel( char apply = 1);
  87. void zeroMask( unsigned int maskToZero );
  88. SNpcGridItem *getGridItemAt( int blockx, int blocky );
  89. void resetGrid( int width, int height );
  90. int m_destroyingRound;
  91. SNpcGridItem *m_changing[2];
  92. int m_dragBegan;
  93. int m_changingCounter;
  94. int m_illegalMoveCounter;
  95. SNpcGridItem *m_hint1, *m_hint2;
  96. int m_cosineTable[4096];
  97. int m_startupCounter;
  98. int m_gridWidth;
  99. int m_gridHeight;
  100. int m_itemWidth;
  101. int m_itemHeight;
  102. SNpcGridItem *m_grid;
  103. eLEVELSTATE m_state;
  104. ITileRenderer *m_renderer;
  105. CParticleEngine *m_pengine;
  106. int m_levelScore;
  107. int m_levelProgressChange;
  108. int m_floatingAngle;
  109. int m_currentLevel;
  110. int m_deckVisibility;
  111. //int m_wasDropping;
  112. };
  113. #endif