A rouge-like rpg, heavily inspired on the binding of isaac. Running on a FRDM-K64F Mbed board. C++.

Dependencies:   mbed MotionSensor

Revision:
41:0697508a28ba
Parent:
40:cbcbf6fc1421
Child:
42:cdcda895cb1b
diff -r cbcbf6fc1421 -r 0697508a28ba RoomEngine/RoomEngine.cpp
--- a/RoomEngine/RoomEngine.cpp	Tue May 07 12:42:12 2019 +0000
+++ b/RoomEngine/RoomEngine.cpp	Tue May 07 17:02:30 2019 +0000
@@ -1,11 +1,10 @@
 #include "RoomEngine.h"
 // Constructor
-RoomEngine::RoomEngine(float global_contrast, Player *current_player)
+RoomEngine::RoomEngine(float global_contrast)
 {
     _room_x = 5;
     _room_y = 5;
     _global_contrast = global_contrast;
-    current_player->set_position(39, 27);
 }
 
 // Destructor
@@ -30,16 +29,16 @@
     for(int i = 0; i<50; i++) {
         switch(side) {
             case 0 :
-                set_mapped_coord(0, -((3 +player->get_sprite_height()) / (50 * player->get_velocity())));
+                set_mapped_coord(0, -((4 + player->get_sprite_height()) / (50 * player->get_velocity())));
                 break;
             case 1 :
-                set_mapped_coord(-((3 +player->get_hitbox_width()) / (50 * player->get_velocity())), 0);
+                set_mapped_coord(-((4 + player->get_hitbox_width()) / (50 * player->get_velocity())), 0);
                 break;
             case 2 :
-                set_mapped_coord(0, ((3 +player->get_hitbox_height()) / (50 * player->get_velocity())));
+                set_mapped_coord(0, ((4 + player->get_hitbox_height()) / (50 * player->get_velocity())));
                 break;
             case 3 :
-                set_mapped_coord(((3 +player->get_hitbox_width()) / (50 * player->get_velocity())), 0);
+                set_mapped_coord(((4 + player->get_hitbox_width()) / (50 * player->get_velocity())), 0);
                 break;
         }
         move_player();
@@ -113,6 +112,7 @@
 {
     check_damage();
     check_enemies_death();
+    check_walls_collision();
     move();
     player->buttons(_A, _B, _Y, _X);
 }
@@ -298,6 +298,28 @@
     }
 }
 
+void RoomEngine::check_walls_collision()
+{
+    // Enemy
+    for (int i = 0; i < MAX_ENEMIES; i++) {
+        if(room->valid_enemies[i]) {
+            room->enemies[i]->undo_move_x(entity_move_check_x(room->enemies[i], room->walls, 2, 10, room->valid_walls));
+            room->enemies[i]->undo_move_y(entity_move_check_y(room->enemies[i], room->walls, 2, 10, room->valid_walls));
+        }
+    }
+    // Player
+    player->undo_move_x(entity_move_check_x(player, room->walls, 2, 10, room->valid_walls));
+    player->undo_move_y(entity_move_check_y(player, room->walls, 2, 10, room->valid_walls));
+    // Bullets
+    for (int i = 0; i < bullets_max; i++) {
+        for (int j = 0; j < 2; j++) {
+            if ((player->valid_bullets[i]) && (room->valid_walls[j]) && (entity_collision(*player->bullets_array[i], *room->walls[j]))) {
+                delete player->bullets_array[i]; player->valid_bullets[i] = false;
+            }
+        }
+    }
+}
+
 void RoomEngine::move()
 {
     move_player();
@@ -343,7 +365,7 @@
             player->set_position(85, 25);
             break;
         case 4 :
-            player->set_position(39, 27);
+            player->set_position(39, 37);
             break;
     }
 }
@@ -411,8 +433,7 @@
             player->draw(lcd);
         }
         player->draw_bullets(lcd, j);
-        room->draw_enemies(lcd, j);
-        room->draw_collectibles(lcd, j);   
+        room->draw(lcd, j);
     }
     
     room->draw_room_overlay(lcd);