summaryrefslogtreecommitdiff
path: root/Unit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Unit.cpp')
-rw-r--r--Unit.cpp102
1 files changed, 102 insertions, 0 deletions
diff --git a/Unit.cpp b/Unit.cpp
new file mode 100644
index 0000000..38535e7
--- /dev/null
+++ b/Unit.cpp
@@ -0,0 +1,102 @@
+/* *******************************************************************
+ * Includes
+ * ******************************************************************/
+
+#include "BaseUnit.h"
+#include "Unit.h"
+#include "Sprite.h"
+#include <stdbool.h>
+#include <stdint.h>
+#include <stddef.h>
+
+/* *******************************************************************
+ * Defines
+ * ******************************************************************/
+
+/* *******************************************************************
+ * Types definition
+ * ******************************************************************/
+
+/* *******************************************************************
+ * Global variables definition
+ * ******************************************************************/
+
+/* *******************************************************************
+ * Local variables definition
+ * ******************************************************************/
+
+/* *******************************************************************
+ * Local prototypes declaration
+ * ******************************************************************/
+
+/* *******************************************************************
+ * Functions definition
+ * ******************************************************************/
+
+/*****************************************************************//**
+ *
+ * \brief Constructor for Unit class.
+ *
+ *********************************************************************/
+Unit::Unit(const enum Unit::tUnitID eUnitID) :
+BaseUnit(),
+_eUnitID(eUnitID)
+{
+}
+
+void Unit::create(const enum Unit::tUnitID eUnitID)
+{
+ _eUnitID = eUnitID;
+}
+
+/*****************************************************************//**
+ *
+ * \brief Periodical handler for Unit class.
+ *
+ *********************************************************************/
+void Unit::handler(void)
+{
+ /* Execute base class handler. */
+ BaseUnit::handler();
+
+ drawHandler();
+}
+
+void Unit::drawHandler(void)
+{
+ if (_eUnitID < MAX_UNIT_ID)
+ {
+ static const uint8_t au8PeasantSprData[] =
+ {
+ 8,
+ 8,
+ 0x00,
+ 0x3C,
+ 0x42,
+ 0x99,
+ 0xA5,
+ 0x66,
+ 0x18,
+ 0x00
+ };
+
+ static const uint8_t* const apu8UnitSpriteDataTable[MAX_UNIT_ID] =
+ {
+ [UNIT_ID_NONE] = NULL,
+ [UNIT_ID_PEASANT] = au8PeasantSprData,
+ [UNIT_ID_SWORDMAN] = NULL
+ };
+
+ const uint8_t* const pu8UnitSpriteData = apu8UnitSpriteDataTable[_eUnitID];
+
+ Sprite spr(*pu8UnitSpriteData);
+
+ spr.setPos(16, 16);
+
+ spr.draw();
+ }
+ else
+ {
+ /* Unit has an invalid ID. Exit. */
+ }
+}