Steven Mahasin / Mbed 2 deprecated DreamDungeon

Dependencies:   mbed MotionSensor

Revision:
28:98848e6a77a2
Parent:
27:a1b41626f57c
Child:
29:6b8411bb040a
diff -r a1b41626f57c -r 98848e6a77a2 Room/Room.cpp
--- a/Room/Room.cpp	Mon Apr 29 10:39:09 2019 +0000
+++ b/Room/Room.cpp	Thu May 02 21:30:49 2019 +0000
@@ -1,38 +1,32 @@
 #include "Room.h"
 
 // Constructor
-Room::Room()
+Room::Room(int no_of_enemies)
 {
     for (int i = 0; i < MAX_ENEMIES; i++)
     {
-        valid_enemies[i] = false;
+        valid_enemies[i] = i < no_of_enemies;
+        if (i < no_of_enemies) {
+            enemies_type[i] = rand() % 2;
+        }
     }
-    enemies[0] = new Headless(20, 20);
-    valid_enemies[0] = true;
-    enemies[1] = new Snake(20, 30);
-    valid_enemies[1] = true;
-    enemies[2] = new Snake(60, 30);
-    valid_enemies[2] = true;
-    _type = 0;
+    _room_type = 0;
     for (int layer = 0; layer < 3; layer++) {
         for (int i = 0; i < screen_width; i++) {
             for (int j = 0; j < screen_height; j++) {
-                _current_map[layer][j][i] = level_map[_type][layer][j][i];
+                _current_map[layer][j][i] = level_map[_room_type][layer][j][i];
             }
         }
     }
-    for(int n = 0; n < 4; n++){
-        _doorways[n] = true;
-    };
+    _doorways[0] = true;
+    _doorways[1] = true;
+    _doorways[2] = true;
+    _doorways[3] = true;
 }
 
 Room::~Room()
 {
-    for (int i = 0; i < MAX_ENEMIES; i++) {
-        if (valid_enemies[i]) {
-            delete enemies[i];
-        }
-    };
+    terminate();
 }
 
 // Accessors
@@ -41,24 +35,34 @@
 }
 
 // Functions
-void Room::init()
+void Room::load()
 {
-    if(_doorways[0]){ // N
-        overlap(36, 0, 12, 10, (int *)wall_n[0], (int *)_current_map[0]);
-        overlap(36, 0, 12, 10, (int *)wall_n[1], (int *)_current_map[1]);
+    for (int i = 0; i<4; i++) {
+        if (!_doorways[i]){
+            overlap_wall(i); // Drawing walls on current map
+        }
     }
-    if(_doorways[1]){ // E
-        overlap(81, 22, 3, 11, (int *)wall_x[0], (int *)_current_map[0]);
-        overlap(81, 22, 3, 11, (int *)wall_x[0], (int *)_current_map[1]);
+    for (int i = 0; i < MAX_ENEMIES; i++) {
+        if (valid_enemies[i]) {
+            switch(enemies_type[i]){
+                case 0 :
+                    enemies[i] = new Headless(20, 20);
+                    break;
+                case 1 :
+                    enemies[i] = new Snake(20, 30);
+                    break;
+            }
+        }
     }
-    if(_doorways[2]){ // S
-        overlap(36, 45, 12, 3, (int *)wall_s[0], (int *)_current_map[0]);
-        overlap(36, 45, 12, 3, (int *)wall_s[1], (int *)_current_map[1]);
-    }
-    if(_doorways[3]){ // W
-        overlap(0, 22, 3, 11, (int *)wall_x[1], (int *)_current_map[0]);
-        overlap(0, 22, 3, 11, (int *)wall_x[1], (int *)_current_map[1]);
-    }
+}
+
+void Room::unload()
+{
+    for (int i = 0; i < MAX_ENEMIES; i++) {
+        if (valid_enemies[i]) {
+            delete enemies[i];
+        }
+    };
 }
 
 void Room::draw_room(N5110 &lcd)
@@ -68,7 +72,7 @@
 
 void Room::draw_room_overlay(N5110 &lcd)
 {
-    lcd.drawSprite(0, 0, screen_height, screen_width, (int *)_current_map[2]);
+    lcd.drawSpriteTransparent(0, 0, screen_height, screen_width, (int *)_current_map[2]);
 }
 
 void Room::overlap(int x, int y, int width, int height, int * object, int * map)
@@ -78,4 +82,30 @@
             *((map+(y+j)*screen_width)+(x+i)) = *((object+j*width)+i);
         }
     }
+}
+
+void Room::overlap_wall(int side)
+{
+    switch(side) {
+        case 0 : // N
+            overlap(36, 0, 12, 10, (int *)wall_n[0], (int *)_current_map[0]);
+            overlap(36, 0, 12, 10, (int *)wall_n[1], (int *)_current_map[1]);
+            overlap(36, 0, 12, 10, (int *)wall_n[1], (int *)_current_map[2]);
+            break;
+        case 1 : // E
+            overlap(81, 22, 3, 11, (int *)wall_x[0], (int *)_current_map[0]);
+            overlap(81, 15, 3, 11, (int *)wall_x[0], (int *)_current_map[1]);
+            overlap(81, 15, 3, 11, (int *)wall_x[0], (int *)_current_map[2]);
+            break;
+        case 2: // S
+            overlap(36, 45, 12, 3, (int *)wall_s[0], (int *)_current_map[0]);
+            overlap(36, 45, 12, 3, (int *)wall_s[1], (int *)_current_map[1]);
+            overlap(36, 45, 12, 3, (int *)wall_s[1], (int *)_current_map[2]);
+            break;
+        case 4 : // W
+            overlap(0, 22, 3, 11, (int *)wall_x[1], (int *)_current_map[0]);
+            overlap(0, 15, 3, 11, (int *)wall_x[1], (int *)_current_map[1]);
+            overlap(0, 15, 3, 11, (int *)wall_x[1], (int *)_current_map[2]);
+            break;
+    }
 }
\ No newline at end of file