Version of Robotron arcade game using LPC1768, a Gameduino shield, a serial EEPROM (for high scores), two microswitch joysticks and two buttons plus a box to put it in. 20 levels of mayhem.
Dependencies: 25LCxxx_SPI CommonTypes Gameduino mbed
EnemyObject.h@13:50779b12ff51, 2013-06-11 (annotated)
- Committer:
- RichardE
- Date:
- Tue Jun 11 19:29:04 2013 +0000
- Revision:
- 13:50779b12ff51
- Parent:
- 7:e72691603fd3
Added virtual LevelRestart method to EnemyObject so that enemies can reset themselves to a particular state when a level restarts after player dies. This currently used in BlueMeanyObject to reset velocities to zero.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RichardE | 13:50779b12ff51 | 1 | /* |
RichardE | 13:50779b12ff51 | 2 | * SOURCE FILE : EnemyObject.h |
RichardE | 13:50779b12ff51 | 3 | * |
RichardE | 13:50779b12ff51 | 4 | * Base class for enemy objects. |
RichardE | 13:50779b12ff51 | 5 | * |
RichardE | 13:50779b12ff51 | 6 | */ |
RichardE | 13:50779b12ff51 | 7 | |
RichardE | 13:50779b12ff51 | 8 | #ifndef EnemyObjectIncluded |
RichardE | 13:50779b12ff51 | 9 | |
RichardE | 13:50779b12ff51 | 10 | #define EnemyObjectIncluded |
RichardE | 13:50779b12ff51 | 11 | |
RichardE | 13:50779b12ff51 | 12 | #include "GameObject.h" |
RichardE | 13:50779b12ff51 | 13 | #include "PlayerObject.h" |
RichardE | 13:50779b12ff51 | 14 | #include "EnemyType.h" |
RichardE | 13:50779b12ff51 | 15 | |
RichardE | 13:50779b12ff51 | 16 | class EnemyObject : public GameObject { |
RichardE | 13:50779b12ff51 | 17 | |
RichardE | 13:50779b12ff51 | 18 | public : |
RichardE | 13:50779b12ff51 | 19 | |
RichardE | 13:50779b12ff51 | 20 | enum { |
RichardE | 13:50779b12ff51 | 21 | Indestructable = 0xFF, |
RichardE | 13:50779b12ff51 | 22 | }; |
RichardE | 13:50779b12ff51 | 23 | |
RichardE | 13:50779b12ff51 | 24 | // Number of hit points remaining. |
RichardE | 13:50779b12ff51 | 25 | // When this reaches zero the enemy dies. |
RichardE | 13:50779b12ff51 | 26 | // However, if this has the special value Indestructable then enemy cannot be killed. |
RichardE | 13:50779b12ff51 | 27 | UInt8 HitPoints; |
RichardE | 13:50779b12ff51 | 28 | |
RichardE | 13:50779b12ff51 | 29 | // Set to true of the enemy squashes humans. |
RichardE | 13:50779b12ff51 | 30 | bool SquashesHumans; |
RichardE | 13:50779b12ff51 | 31 | |
RichardE | 13:50779b12ff51 | 32 | // Pointer to array of pointers to enemies. |
RichardE | 13:50779b12ff51 | 33 | // Some enemies may need to add new enemies (such as bullets or new spawning enemies) to this array. |
RichardE | 13:50779b12ff51 | 34 | GameObject **Enemies; |
RichardE | 13:50779b12ff51 | 35 | |
RichardE | 13:50779b12ff51 | 36 | /***************/ |
RichardE | 13:50779b12ff51 | 37 | /* CONSTRUCTOR */ |
RichardE | 13:50779b12ff51 | 38 | /***************/ |
RichardE | 13:50779b12ff51 | 39 | EnemyObject() : |
RichardE | 13:50779b12ff51 | 40 | HitPoints( 1 ), |
RichardE | 13:50779b12ff51 | 41 | SquashesHumans( false ), |
RichardE | 13:50779b12ff51 | 42 | Enemies( (GameObject**)NULL ), |
RichardE | 13:50779b12ff51 | 43 | chaseObject( &defaultChaseObject ) |
RichardE | 13:50779b12ff51 | 44 | { |
RichardE | 13:50779b12ff51 | 45 | } |
RichardE | 13:50779b12ff51 | 46 | |
RichardE | 13:50779b12ff51 | 47 | /**************/ |
RichardE | 13:50779b12ff51 | 48 | /* DESTRUCTOR */ |
RichardE | 13:50779b12ff51 | 49 | /**************/ |
RichardE | 13:50779b12ff51 | 50 | virtual ~EnemyObject() { |
RichardE | 13:50779b12ff51 | 51 | } |
RichardE | 13:50779b12ff51 | 52 | |
RichardE | 13:50779b12ff51 | 53 | /************************/ |
RichardE | 13:50779b12ff51 | 54 | /* GET GAME OBJECT TYPE */ |
RichardE | 13:50779b12ff51 | 55 | /************************/ |
RichardE | 13:50779b12ff51 | 56 | // Returns type of game object. |
RichardE | 13:50779b12ff51 | 57 | virtual GameObjectTypes GetType( void ) { |
RichardE | 13:50779b12ff51 | 58 | return EnemyObjectType; |
RichardE | 13:50779b12ff51 | 59 | } |
RichardE | 7:e72691603fd3 | 60 | |
RichardE | 13:50779b12ff51 | 61 | /*****************************/ |
RichardE | 13:50779b12ff51 | 62 | /* GET TYPE OF ENEMY THIS IS */ |
RichardE | 13:50779b12ff51 | 63 | /*****************************/ |
RichardE | 13:50779b12ff51 | 64 | // Returns enemy type. |
RichardE | 13:50779b12ff51 | 65 | virtual EnemyType GetEnemyType( void ) = 0; |
RichardE | 13:50779b12ff51 | 66 | |
RichardE | 13:50779b12ff51 | 67 | /*******************************************************/ |
RichardE | 13:50779b12ff51 | 68 | /* GET NUMBER OF POINTS AWARDED FOR KILLING THIS ENEMY */ |
RichardE | 13:50779b12ff51 | 69 | /*******************************************************/ |
RichardE | 13:50779b12ff51 | 70 | // Returns number of points (in BCD). |
RichardE | 13:50779b12ff51 | 71 | virtual UInt8 GetPoints( void ) = 0; |
RichardE | 13:50779b12ff51 | 72 | |
RichardE | 13:50779b12ff51 | 73 | /***********************/ |
RichardE | 13:50779b12ff51 | 74 | /* SET OBJECT TO CHASE */ |
RichardE | 13:50779b12ff51 | 75 | /***********************/ |
RichardE | 13:50779b12ff51 | 76 | // Pass pointer to object to chase in co. |
RichardE | 13:50779b12ff51 | 77 | void SetChaseObject( GameObject *co ) { |
RichardE | 13:50779b12ff51 | 78 | chaseObject = co; |
RichardE | 13:50779b12ff51 | 79 | } |
RichardE | 13:50779b12ff51 | 80 | |
RichardE | 13:50779b12ff51 | 81 | /*****************************************************************/ |
RichardE | 13:50779b12ff51 | 82 | /* PERFORM ANY INIITALISATION REQUIRED AT LEVEL START OR RESTART */ |
RichardE | 13:50779b12ff51 | 83 | /*****************************************************************/ |
RichardE | 13:50779b12ff51 | 84 | // Derived classes should override this if necessary. |
RichardE | 13:50779b12ff51 | 85 | virtual void LevelRestart( void ) { |
RichardE | 13:50779b12ff51 | 86 | } |
RichardE | 13:50779b12ff51 | 87 | |
RichardE | 13:50779b12ff51 | 88 | /********************************************/ |
RichardE | 13:50779b12ff51 | 89 | /* INFORM ENEMY IT HAS BEEN HIT BY A BULLET */ |
RichardE | 13:50779b12ff51 | 90 | /********************************************/ |
RichardE | 13:50779b12ff51 | 91 | // Default implementation does nothing but if special behaviour |
RichardE | 13:50779b12ff51 | 92 | // is required in a derived class then this should be overridden. |
RichardE | 13:50779b12ff51 | 93 | // Note that this does NOT deal with determining if the enemy is dead or not. |
RichardE | 13:50779b12ff51 | 94 | // An enemy ALWAYS dies if HitPoints reaches zero. |
RichardE | 13:50779b12ff51 | 95 | virtual void RegisterHitByBullet( void ) {} |
RichardE | 13:50779b12ff51 | 96 | |
RichardE | 13:50779b12ff51 | 97 | /*****************************************************/ |
RichardE | 13:50779b12ff51 | 98 | /* CHECK IF ALL SURVIVING ENEMIES ARE INDESTRUCTABLE */ |
RichardE | 13:50779b12ff51 | 99 | /*****************************************************/ |
RichardE | 13:50779b12ff51 | 100 | // Pass pointer to array of pointers to EnemyObjects in enemies. |
RichardE | 13:50779b12ff51 | 101 | // Pass number of pointers in the array in enemyCount. |
RichardE | 13:50779b12ff51 | 102 | static bool AreAllIndestructable( const EnemyObject **enemies, UInt8 enemyCount ); |
RichardE | 13:50779b12ff51 | 103 | |
RichardE | 13:50779b12ff51 | 104 | protected : |
RichardE | 13:50779b12ff51 | 105 | |
RichardE | 13:50779b12ff51 | 106 | // Object to chase. |
RichardE | 13:50779b12ff51 | 107 | GameObject *chaseObject; |
RichardE | 13:50779b12ff51 | 108 | |
RichardE | 13:50779b12ff51 | 109 | private : |
RichardE | 13:50779b12ff51 | 110 | |
RichardE | 13:50779b12ff51 | 111 | // Default object to chase. |
RichardE | 13:50779b12ff51 | 112 | static PlayerObject defaultChaseObject; |
RichardE | 13:50779b12ff51 | 113 | |
RichardE | 13:50779b12ff51 | 114 | }; |
RichardE | 13:50779b12ff51 | 115 | |
RichardE | 13:50779b12ff51 | 116 | #endif |
RichardE | 13:50779b12ff51 | 117 | |
RichardE | 13:50779b12ff51 | 118 | /* END of EnemyObject.h */ |
RichardE | 13:50779b12ff51 | 119 | |
RichardE | 13:50779b12ff51 | 120 |