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

Dependencies:   mbed MotionSensor

Revision:
30:ec915d24d3e9
Parent:
29:6b8411bb040a
Child:
31:ab24d028ddfd
--- a/RoomEngine/RoomEngine.cpp	Sat May 04 15:39:20 2019 +0000
+++ b/RoomEngine/RoomEngine.cpp	Sun May 05 18:04:43 2019 +0000
@@ -1,8 +1,10 @@
 #include "RoomEngine.h"
-RoomEngine::RoomEngine()
+
+RoomEngine::RoomEngine(float global_contrast)
 {
     _room_x = 5;
     _room_y = 5;
+    _global_contrast = global_contrast;
 }
 
 RoomEngine::~RoomEngine()
@@ -39,7 +41,11 @@
         }
         move_player();
         render(lcd, gamepad);
-        lcd.setContrast(0.75 - (i * 0.005));
+        if (0.75 - (i * 0.005) > _global_contrast) {
+            lcd.setContrast(0.75 - (i * 0.005));
+        } else {
+            lcd.setContrast(_global_contrast);
+        }
     }
 }
 
@@ -64,8 +70,9 @@
         }
         move_player();
         render(lcd, gamepad);
-        lcd.setContrast(0.5 + (i * 0.005));
+        lcd.setContrast(_global_contrast + (i * 0.005));
     }
+    lcd.setContrast(0.75);
 }
 
 void RoomEngine::update_current_room()
@@ -255,9 +262,7 @@
 {
     for (int i = 0; i < bullets_max; i++) {
         if (player->valid_bullets[i]) {
-            if (player->bullets_array[i]->out_of_bounds_check(room->get_current_map_2d(), room->get_doorways())) {
-                player->valid_bullets[i] = false;
-                delete player->bullets_array[i];
+            if (player->update_bullets(room->get_current_map_2d(), room->get_doorways())) {
             } else {
                 for (int j = 0; j < MAX_ENEMIES; j++) {
                     if (room->valid_enemies[j] && (entity_collision(*player->bullets_array[i], *room->enemies[j]))) {
@@ -307,7 +312,6 @@
 {
     move_player();
     move_enemies();
-    move_bullets();
 }
 
 void RoomEngine::move_player()
@@ -326,22 +330,13 @@
     }
     // Entity Collision Repulsion
     for (int i = 0; i < MAX_ENEMIES; i++) {
-        if (room->valid_enemies[i]) {
+        if (room->valid_enemies[i] && !room->enemies[i]->is_damaged_by_collision()) {
             room->enemies[i]->position_add_x(entity_move_check_x(room->enemies[i], room->enemies, MAX_ENEMIES, i, room->valid_enemies));
             room->enemies[i]->position_add_y(entity_move_check_y(room->enemies[i], room->enemies, MAX_ENEMIES, i, room->valid_enemies));
         }
     }
 }
 
-void RoomEngine::move_bullets()
-{
-    for (int i = 0; i < bullets_max; i++) {
-        if (player->valid_bullets[i]) {
-            player->bullets_array[i]->move(player->get_bullet_speed(), 0, 0, room->get_doorways());
-        }
-    }
-}
-
 void RoomEngine::update_player_position(int side)
 {
     switch(side) {
@@ -421,24 +416,14 @@
 {   
     room->draw_room(lcd);
     //lcd.drawSprite(0,0,screen_height,screen_width,(int *)level_map[1]);
-    draw_player(lcd);
+    player->draw(lcd);
     draw_enemies(lcd);
-    draw_bullets(lcd);
     room->draw_room_overlay(lcd);
     if (_L) {
         draw_health(lcd);
     }
 }
 
-void RoomEngine::draw_player(N5110 &lcd)
-{
-    lcd.drawSpriteTransparent(player->get_pos_x()-player->get_offset_x(),
-                              player->get_pos_y()-player->get_offset_y(),
-                              player->get_sprite_height(),
-                              player->get_sprite_width(),
-                              player->get_frame());
-}
-
 void RoomEngine::draw_enemies(N5110 &lcd)
 {
     for (int i = 0; i < MAX_ENEMIES; i++) {
@@ -452,19 +437,6 @@
     }
 }
 
-void RoomEngine::draw_bullets(N5110 &lcd)
-{
-    for (int i = 0; i < bullets_max; i++) {
-        if (player->valid_bullets[i]) {
-            lcd.drawSpriteTransparent(player->bullets_array[i]->get_pos_x()-player->bullets_array[i]->get_offset_x(),
-                                      player->bullets_array[i]->get_pos_y()-player->bullets_array[i]->get_offset_y(),
-                                      player->bullets_array[i]->get_sprite_height(),
-                                      player->bullets_array[i]->get_sprite_width(),
-                                      player->bullets_array[i]->get_frame());
-        }
-    }
-}
-
 void RoomEngine::draw_health(N5110 &lcd)
 {
     for (int i = 0; i < player->get_hp(); i++){