aboutsummaryrefslogtreecommitdiff
path: root/game
diff options
context:
space:
mode:
Diffstat (limited to 'game')
-rw-r--r--game/AquariumSubScene.cpp135
-rw-r--r--game/CMakeLists.txt12
-rw-r--r--game/Config.h21
-rw-r--r--game/ForestSubScene.cpp131
-rw-r--r--game/GameScene.cpp34
-rw-r--r--game/HallwaySubScene.cpp128
-rw-r--r--game/MoveCameraManualyScript.cpp5
-rw-r--r--game/PlayerSubScene.cpp92
-rw-r--r--game/StartSubScene.cpp442
-rw-r--r--game/background/AquariumSubScene.cpp167
-rw-r--r--game/background/AquariumSubScene.h (renamed from game/AquariumSubScene.h)0
-rw-r--r--game/background/BackgroundSubScene.cpp (renamed from game/BackgroundSubScene.cpp)0
-rw-r--r--game/background/BackgroundSubScene.h (renamed from game/BackgroundSubScene.h)0
-rw-r--r--game/background/ForestParallaxScript.cpp (renamed from game/ForestParallaxScript.cpp)5
-rw-r--r--game/background/ForestParallaxScript.h (renamed from game/ForestParallaxScript.h)0
-rw-r--r--game/background/ForestSubScene.cpp167
-rw-r--r--game/background/ForestSubScene.h (renamed from game/ForestSubScene.h)0
-rw-r--r--game/background/HallwaySubScene.cpp163
-rw-r--r--game/background/HallwaySubScene.h (renamed from game/HallwaySubScene.h)11
-rw-r--r--game/background/StartSubScene.cpp527
-rw-r--r--game/background/StartSubScene.h (renamed from game/StartSubScene.h)0
-rw-r--r--game/makefile5
22 files changed, 1147 insertions, 898 deletions
diff --git a/game/AquariumSubScene.cpp b/game/AquariumSubScene.cpp
deleted file mode 100644
index f4b20f6..0000000
--- a/game/AquariumSubScene.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-#include "AquariumSubScene.h"
-
-#include <crepe/api/Animator.h>
-#include <crepe/api/GameObject.h>
-#include <crepe/api/Scene.h>
-#include <crepe/api/Sprite.h>
-#include <crepe/types.h>
-
-using namespace crepe;
-using namespace std;
-
-float AquariumSubScene::create(Scene & scn, float begin_x) {
- this->add_background(scn, begin_x);
-
- GameObject aquarium_begin
- = scn.new_object("aquarium_begin", "background", vec2(begin_x, 0));
- Asset aquarium_begin_asset{
- "asset/background/aquarium/glassTubeFG_1_TVOS.png"};
- aquarium_begin.add_component<Sprite>(aquarium_begin_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 0,
- .size = vec2(0, 800),
- });
- begin_x += 600;
-
- GameObject aquarium_middle_1
- = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
- Asset aquarium_middle_1_asset{
- "asset/background/aquarium/glassTubeFG_3_TVOS.png"};
- aquarium_middle_1.add_component<Sprite>(aquarium_middle_1_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 2,
- .size = vec2(0, 800),
- });
- begin_x += 400;
-
- this->add_background(scn, begin_x - 200);
-
- GameObject aquarium_middle_2
- = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
- Asset aquarium_middle_2_asset{
- "asset/background/aquarium/glassTubeFG_3_TVOS.png"};
- aquarium_middle_2.add_component<Sprite>(aquarium_middle_2_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 3,
- .size = vec2(0, 800),
- });
- begin_x += 400;
-
- GameObject aquarium_middle_3
- = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
- Asset aquarium_middle_3_asset{
- "asset/background/aquarium/glassTubeFG_3_TVOS.png"};
- aquarium_middle_3.add_component<Sprite>(aquarium_middle_3_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 4,
- .size = vec2(0, 800),
- });
- begin_x += 400;
-
- this->add_background(scn, begin_x - 200);
-
- GameObject aquarium_middle_4
- = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
- Asset aquarium_middle_4_asset{
- "asset/background/aquarium/glassTubeFG_3_TVOS.png"};
- aquarium_middle_4.add_component<Sprite>(aquarium_middle_4_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 5,
- .size = vec2(0, 800),
- });
- begin_x += 600;
-
- this->add_background(scn, begin_x);
-
- GameObject aquarium_end = scn.new_object("aquarium_end", "background", vec2(begin_x, 0));
- Asset aquarium_end_asset{
- "asset/background/aquarium/glassTubeFG_2_TVOS.png"};
- aquarium_end.add_component<Sprite>(aquarium_end_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 1,
- .size = vec2(0, 800),
- });
- begin_x += 600;
-
- return begin_x;
-}
-
-void AquariumSubScene::add_background(Scene & scn, float begin_x) {
- GameObject bg_1 = scn.new_object("aquarium_bg_1", "aquarium_background", vec2(begin_x, 0));
- Asset bg_1_1_asset{"asset/background/aquarium/AquariumBG1_1_TVOS.png"};
- bg_1.add_component<Sprite>(bg_1_1_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 2,
- .size = vec2(0, 400),
- .position_offset = vec2(-200, 100),
- });
- Asset bg_1_2_asset{"asset/background/aquarium/AquariumBG1_2_TVOS.png"};
- bg_1.add_component<Sprite>(bg_1_2_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 2,
- .size = vec2(0, 400),
- .position_offset = vec2(200, 100),
- });
- GameObject bg_2 = scn.new_object("aquarium_bg_2", "aquarium_background", vec2(begin_x, 0));
- Asset bg_2_1_asset{"asset/background/aquarium/AquariumBG2_1_TVOS.png"};
- bg_2.add_component<Sprite>(bg_2_1_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 1,
- .size = vec2(0, 400),
- .position_offset = vec2(200, -50),
- });
- Asset bg_2_2_asset{"asset/background/aquarium/AquariumBG2_2_TVOS.png"};
- bg_2.add_component<Sprite>(bg_2_2_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 1,
- .size = vec2(0, 400),
- .position_offset = vec2(-200, -50),
- });
- GameObject bg_3 = scn.new_object("aquarium_bg_3", "aquarium_background", vec2(begin_x, 0));
- Asset bg_3_1_asset{"asset/background/aquarium/AquariumBG3_1_TVOS.png"};
- bg_3.add_component<Sprite>(bg_3_1_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 0,
- .size = vec2(0, 400),
- .position_offset = vec2(200, -200),
- });
- Asset bg_3_2_asset{"asset/background/aquarium/AquariumBG3_2_TVOS.png"};
- bg_3.add_component<Sprite>(bg_3_2_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 0,
- .size = vec2(0, 400),
- .position_offset = vec2(-200, -200),
- });
-}
diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt
index dc55523..937b5e6 100644
--- a/game/CMakeLists.txt
+++ b/game/CMakeLists.txt
@@ -9,17 +9,17 @@ project(game C CXX)
add_subdirectory(../src crepe)
add_executable(main
- AquariumSubScene.cpp
- BackgroundSubScene.cpp
- ForestParallaxScript.cpp
- ForestSubScene.cpp
+ background/AquariumSubScene.cpp
+ background/BackgroundSubScene.cpp
+ background/ForestParallaxScript.cpp
+ background/ForestSubScene.cpp
GameScene.cpp
- HallwaySubScene.cpp
+ background/HallwaySubScene.cpp
MoveCameraManualyScript.cpp
PlayerScript.cpp
PlayerSubScene.cpp
StartGameScript.cpp
- StartSubScene.cpp
+ background/StartSubScene.cpp
main.cpp
)
diff --git a/game/Config.h b/game/Config.h
new file mode 100644
index 0000000..ec753df
--- /dev/null
+++ b/game/Config.h
@@ -0,0 +1,21 @@
+#pragma once
+
+static constexpr int SORT_IN_LAY_BACK_BACKGROUND = 3; // For all scenes
+static constexpr int SORT_IN_LAY_BACKGROUND = 4; // For all scenes
+static constexpr int SORT_IN_LAY_FORE_BACKGROUND = 5; // For all scenes
+static constexpr int SORT_IN_LAY_PARTICLES_BACKGROUND = 6; // For all scenes
+static constexpr int SORT_IN_LAY_OBSTACLES = 8; // Only for GameScene
+static constexpr int SORT_IN_LAY_PLAYER = 10; // Only for GameScene
+static constexpr int SORT_IN_LAY_PARTICLES_FOREGROUND = 15; // Only for GameScene
+
+static constexpr int COLL_LAY_BOT_TOP = 1; // Only for GameScene
+static constexpr int COLL_LAY_BOT_LOW = 2; // Only for GameScene
+static constexpr int COLL_LAY_BOT_HIGH = 3; // Only for GameScene
+static constexpr int COLL_LAY_PLAYER = 4; // Only for GameScene
+static constexpr int COLL_LAY_WALL_FRAGS = 5; // Only for GameScene
+
+static constexpr int GAME_HEIGHT = 800; // In game units
+
+static constexpr int VIEWPORT_X = 1100; // In game units
+// 'GAME_HEIGHT' (below) should be replaced by '500' when game development is finished
+static constexpr int VIEWPORT_Y = GAME_HEIGHT; // In game units
diff --git a/game/ForestSubScene.cpp b/game/ForestSubScene.cpp
deleted file mode 100644
index 810ef17..0000000
--- a/game/ForestSubScene.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-#include "ForestSubScene.h"
-#include "ForestParallaxScript.h"
-
-#include <crepe/api/Animator.h>
-#include <crepe/api/BehaviorScript.h>
-#include <crepe/api/GameObject.h>
-#include <crepe/api/Scene.h>
-#include <crepe/api/Script.h>
-#include <crepe/api/Sprite.h>
-#include <crepe/types.h>
-
-using namespace crepe;
-using namespace std;
-
-float ForestSubScene::create(Scene & scn, float begin_x, std::string unique_bg_name) {
- GameObject script = scn.new_object("forest_script", "background");
- script.add_component<BehaviorScript>().set_script<ForestParallaxScript>(
- begin_x - 400, begin_x + 3000 + 400, unique_bg_name);
-
- this->add_background(scn, begin_x, unique_bg_name);
-
- GameObject begin = scn.new_object("forest_begin", "background", vec2(begin_x, 0));
- Asset begin_asset{"asset/background/forest/forestFG_1_TVOS.png"};
- begin.add_component<Sprite>(begin_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 0,
- .size = vec2(0, 800),
- });
- begin_x += 800;
-
- this->add_background(scn, begin_x, unique_bg_name);
-
- GameObject middle_1 = scn.new_object("forest_middle", "background", vec2(begin_x, 0));
- Asset middle_1_asset{"asset/background/forest/forestFG_3_TVOS.png"};
- middle_1.add_component<Sprite>(middle_1_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 2,
- .size = vec2(0, 800),
- });
- begin_x += 800;
-
- this->add_background(scn, begin_x, unique_bg_name);
-
- GameObject middle_2 = scn.new_object("forest_middle", "background", vec2(begin_x, 0));
- Asset middle_2_asset{"asset/background/forest/forestFG_3_TVOS.png"};
- middle_2.add_component<Sprite>(middle_2_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 3,
- .size = vec2(0, 800),
- });
- begin_x += 800;
-
- this->add_background(scn, begin_x, unique_bg_name);
-
- GameObject end = scn.new_object("forest_end", "background", vec2(begin_x, 0));
- Asset end_asset{"asset/background/forest/forestFG_2_TVOS.png"};
- end.add_component<Sprite>(end_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 1,
- .size = vec2(0, 800),
- });
- begin_x += 600;
-
- this->add_background(scn, begin_x + 200, unique_bg_name);
-
- return begin_x;
-}
-
-void ForestSubScene::add_background(Scene & scn, float begin_x, std::string name) {
- GameObject bg_1
- = scn.new_object("forest_bg_1_" + name, "forest_background", vec2(begin_x, 0));
- Asset bg_1_asset{"asset/background/forest/forestBG1_1_TVOS.png"};
- bg_1.add_component<Sprite>(bg_1_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 2,
- .size = vec2(0, 800),
- });
- GameObject bg_2
- = scn.new_object("forest_bg_2_" + name, "forest_background", vec2(begin_x, 0));
- Asset bg_2_1_asset{"asset/background/forest/forestBG2_1_TVOS.png"};
- bg_2.add_component<Sprite>(bg_2_1_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 1,
- .size = vec2(0, 400),
- .position_offset = vec2(200, 0),
- });
- Asset bg_2_2_asset{"asset/background/forest/forestBG2_2_TVOS.png"};
- bg_2.add_component<Sprite>(bg_2_2_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 1,
- .size = vec2(0, 400),
- .position_offset = vec2(-200, 0),
- });
- GameObject bg_3
- = scn.new_object("forest_bg_3_" + name, "forest_background", vec2(begin_x, 0));
- Asset bg_3_1_asset{"asset/background/forest/forestBG3_1_TVOS.png"};
- bg_3.add_component<Sprite>(bg_3_1_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 0,
- .size = vec2(0, 200),
- .position_offset = vec2(300, 0),
- });
- Asset bg_3_2_asset{"asset/background/forest/forestBG3_2_TVOS.png"};
- bg_3.add_component<Sprite>(bg_3_2_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 0,
- .size = vec2(0, 200),
- .position_offset = vec2(100, 0),
- });
- Asset bg_3_3_asset{"asset/background/forest/forestBG3_3_TVOS.png"};
- bg_3.add_component<Sprite>(bg_3_3_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 0,
- .size = vec2(0, 200),
- .position_offset = vec2(-100, 0),
- });
- Asset bg_3_4_asset{"asset/background/forest/forestBG3_4_TVOS.png"};
- bg_3.add_component<Sprite>(bg_3_4_asset, Sprite::Data{
- .sorting_in_layer = 3,
- .order_in_layer = 0,
- .size = vec2(0, 200),
- .position_offset = vec2(-300, 0),
- });
-
- bg_2.add_component<Rigidbody>(Rigidbody::Data{
- .linear_velocity = vec2(30, 0),
- });
- bg_3.add_component<Rigidbody>(Rigidbody::Data{
- .linear_velocity = vec2(40, 0),
- });
-}
diff --git a/game/GameScene.cpp b/game/GameScene.cpp
index c280474..2511567 100644
--- a/game/GameScene.cpp
+++ b/game/GameScene.cpp
@@ -1,9 +1,11 @@
#include "GameScene.h"
-#include "BackgroundSubScene.h"
+#include "Config.h"
#include "MoveCameraManualyScript.h"
#include "PlayerSubScene.h"
#include "StartGameScript.h"
+#include "background/BackgroundSubScene.h"
+
#include <cmath>
#include <crepe/api/Animator.h>
#include <crepe/api/Asset.h>
@@ -19,7 +21,6 @@
#include <crepe/api/Sprite.h>
#include <crepe/api/Transform.h>
#include <crepe/types.h>
-#include <iostream>
using namespace crepe;
using namespace std;
@@ -28,23 +29,38 @@ void GameScene::load_scene() {
BackgroundSubScene background(*this);
GameObject camera = new_object("camera", "camera", vec2(650, 0));
- camera.add_component<Camera>(ivec2(990, 720), vec2(1100, 800),
- Camera::Data{
- .bg_color = Color::RED,
- });
+ camera.add_component<Camera>(
+ ivec2(990, 720), vec2(VIEWPORT_X, VIEWPORT_Y),
+ Camera::Data {
+ .bg_color = Color::RED,
+ }
+ );
camera.add_component<BehaviorScript>().set_script<MoveCameraManualyScript>();
- camera.add_component<Rigidbody>(Rigidbody::Data{});
+ camera.add_component<Rigidbody>(Rigidbody::Data {});
PlayerSubScene player(*this);
GameObject floor = new_object("floor", "game_world", vec2(0, 325));
- floor.add_component<Rigidbody>(Rigidbody::Data{
+ floor.add_component<Rigidbody>(Rigidbody::Data {
.body_type = Rigidbody::BodyType::STATIC,
+ .collision_layer = COLL_LAY_BOT_TOP,
});
floor.add_component<BoxCollider>(vec2(INFINITY, 200));
+ GameObject floor_low = new_object("floor_low", "game_world", vec2(0, 350));
+ floor_low.add_component<Rigidbody>(Rigidbody::Data {
+ .body_type = Rigidbody::BodyType::STATIC,
+ .collision_layer = COLL_LAY_BOT_LOW,
+ });
+ floor_low.add_component<BoxCollider>(vec2(INFINITY, 200));
+ GameObject floor_high = new_object("floor_high", "game_world", vec2(0, 300));
+ floor_high.add_component<Rigidbody>(Rigidbody::Data {
+ .body_type = Rigidbody::BodyType::STATIC,
+ .collision_layer = COLL_LAY_BOT_HIGH,
+ });
GameObject ceiling = new_object("ceiling", "game_world", vec2(0, -325));
- ceiling.add_component<Rigidbody>(Rigidbody::Data{
+ ceiling.add_component<Rigidbody>(Rigidbody::Data {
.body_type = Rigidbody::BodyType::STATIC,
+ .collision_layer = COLL_LAY_BOT_TOP,
});
ceiling.add_component<BoxCollider>(vec2(INFINITY, 200));
diff --git a/game/HallwaySubScene.cpp b/game/HallwaySubScene.cpp
deleted file mode 100644
index 486b8c6..0000000
--- a/game/HallwaySubScene.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-#include "HallwaySubScene.h"
-
-#include <crepe/api/Animator.h>
-#include <crepe/api/Color.h>
-#include <crepe/api/GameObject.h>
-#include <crepe/api/Scene.h>
-#include <crepe/api/Sprite.h>
-
-using namespace crepe;
-using namespace std;
-
-float HallwaySubScene::create(Scene & scn, float begin_x, unsigned int sector_num,
- Color sector_color) {
- GameObject begin = scn.new_object("hallway_begin", "background", vec2(begin_x, 0));
- Asset begin_asset{"asset/background/hallway/hallway1FG_1_TVOS.png"};
- begin.add_component<Sprite>(begin_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 0,
- .size = vec2(0, 800),
- });
- begin_x += 600;
-
- this->add_sector_number(begin, vec2(-200, 0), sector_num, sector_color);
- this->add_lamp(begin, vec2(330, -120), 11);
- this->add_lamp(begin, vec2(430, -120), 9);
-
- GameObject middle_1 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
- Asset middle_asset{"asset/background/hallway/hallway1FG_2_TVOS.png"};
- middle_1.add_component<Sprite>(middle_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 2,
- .size = vec2(0, 800),
- });
- begin_x += 600;
-
- GameObject middle_2 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
- Asset middle_asset_2{"asset/background/hallway/hallway1FG_2_TVOS.png"};
- middle_2.add_component<Sprite>(middle_asset_2, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 3,
- .size = vec2(0, 800),
- });
- begin_x += 200;
-
- GameObject middle_3 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
- Asset middle_asset_3{"asset/background/hallway/hallway1FG_2_TVOS.png"};
- middle_3.add_component<Sprite>(middle_asset_3, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 4,
- .size = vec2(0, 800),
- });
- begin_x += 400;
-
- this->add_lamp(middle_3, vec2(0, -120));
-
- GameObject middle_4 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
- Asset middle_asset_4{"asset/background/hallway/hallway1FG_2_TVOS.png"};
- middle_4.add_component<Sprite>(middle_asset_4, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 5,
- .size = vec2(0, 800),
- });
- begin_x += 600;
-
- GameObject end = scn.new_object("hallway_end", "background", vec2(begin_x, 0));
- Asset end_asset{"asset/background/hallway/hallway1FG_1_TVOS.png"};
- end.add_component<Sprite>(end_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 1,
- .size = vec2(0, 800),
- });
- begin_x += 600;
-
- return begin_x;
-}
-
-void HallwaySubScene::add_lamp(GameObject & obj, vec2 offset, unsigned int fps) {
- Asset lamp_asset{"asset/background/hallway/alarmLight_TVOS.png"};
- obj.add_component<Sprite>(lamp_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 0,
- .size = vec2(0, 100),
- .position_offset = offset,
- });
- Asset lamp_glow_asset{"asset/background/hallway/alarmGlow_TVOS.png"};
- Sprite & lamp_glow_sprite = obj.add_component<Sprite>(
- lamp_glow_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 1,
- .size = vec2(0, 300),
- .position_offset = offset - vec2(65, -30),
- });
- obj.add_component<Animator>(lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1),
- Animator::Data{
- .fps = fps,
- .looping = true,
- });
-}
-
-void HallwaySubScene::add_sector_number(GameObject & obj, vec2 offset, unsigned int sector_num,
- Color sector_color) {
- Asset sector_text_asset{"asset/background/hallway/sectorText_TVOS.png"};
- obj.add_component<Sprite>(sector_text_asset, Sprite::Data{
- .color = sector_color,
- .sorting_in_layer = 5,
- .order_in_layer = 0,
- .size = vec2(0, 100),
- .position_offset = offset,
- });
- Asset sector_num_asset{"asset/background/hallway/sectorNumbers_TVOS.png"};
- Sprite & sector_num_sprite = obj.add_component<Sprite>(
- sector_num_asset, Sprite::Data{
- .color = sector_color,
- .sorting_in_layer = 5,
- .order_in_layer = 0,
- .size = vec2(0, 100),
- .position_offset = offset + vec2(200, 0),
- });
- Animator & sector_num_anim = obj.add_component<Animator>(
- sector_num_sprite, ivec2(256, 128), uvec2(4, 4), Animator::Data{});
- int column = (sector_num - 1) / 4;
- int row = (sector_num - 1) % 4;
- sector_num_anim.set_anim(column);
- for (int i = 0; i < row; i++) {
- sector_num_anim.next_anim();
- }
- sector_num_anim.pause();
-}
diff --git a/game/MoveCameraManualyScript.cpp b/game/MoveCameraManualyScript.cpp
index 0181333..9d75a75 100644
--- a/game/MoveCameraManualyScript.cpp
+++ b/game/MoveCameraManualyScript.cpp
@@ -4,8 +4,9 @@ using namespace crepe;
using namespace std;
void MoveCameraManualyScript::init() {
- subscribe<KeyPressEvent>(
- [this](const KeyPressEvent & ev) -> bool { return this->keypressed(ev); });
+ subscribe<KeyPressEvent>([this](const KeyPressEvent & ev) -> bool {
+ return this->keypressed(ev);
+ });
}
bool MoveCameraManualyScript::keypressed(const KeyPressEvent & event) {
diff --git a/game/PlayerSubScene.cpp b/game/PlayerSubScene.cpp
index 01a383a..00b7810 100644
--- a/game/PlayerSubScene.cpp
+++ b/game/PlayerSubScene.cpp
@@ -1,4 +1,5 @@
#include "PlayerSubScene.h"
+#include "Config.h"
#include "PlayerScript.h"
#include <crepe/api/Animator.h>
@@ -12,50 +13,63 @@ using namespace std;
PlayerSubScene::PlayerSubScene(Scene & scn) {
GameObject player = scn.new_object("player", "player", vec2(-100, 200));
- Asset player_body_asset{"asset/barry/defaultBody.png"};
- Sprite & player_body_sprite
- = player.add_component<Sprite>(player_body_asset, Sprite::Data{
- .sorting_in_layer = 10,
- .order_in_layer = 0,
- .size = vec2(0, 50),
- });
- player.add_component<Animator>(player_body_sprite, ivec2(32, 32), uvec2(4, 8),
- Animator::Data{
- .fps = 5,
- .looping = true,
- });
- Asset player_head_asset{"asset/barry/defaultHead.png"};
- Sprite & player_head_sprite
- = player.add_component<Sprite>(player_head_asset, Sprite::Data{
- .sorting_in_layer = 10,
- .order_in_layer = 1,
- .size = vec2(0, 50),
- .position_offset = vec2(0, -20),
- });
- player.add_component<Animator>(player_head_sprite, ivec2(32, 32), uvec2(4, 8),
- Animator::Data{
- .fps = 5,
- .looping = true,
- });
- Asset player_jetpack_asset{"asset/barry/jetpackDefault.png"};
+ Asset player_body_asset {"asset/barry/defaultBody.png"};
+ Sprite & player_body_sprite = player.add_component<Sprite>(
+ player_body_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_PLAYER,
+ .order_in_layer = 0,
+ .size = vec2(0, 50),
+ }
+ );
+ player.add_component<Animator>(
+ player_body_sprite, ivec2(32, 32), uvec2(4, 8),
+ Animator::Data {
+ .fps = 5,
+ .looping = true,
+ }
+ );
+ Asset player_head_asset {"asset/barry/defaultHead.png"};
+ Sprite & player_head_sprite = player.add_component<Sprite>(
+ player_head_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_PLAYER,
+ .order_in_layer = 1,
+ .size = vec2(0, 50),
+ .position_offset = vec2(0, -20),
+ }
+ );
+ player.add_component<Animator>(
+ player_head_sprite, ivec2(32, 32), uvec2(4, 8),
+ Animator::Data {
+ .fps = 5,
+ .looping = true,
+ }
+ );
+ Asset player_jetpack_asset {"asset/barry/jetpackDefault.png"};
Sprite & player_jetpack_sprite = player.add_component<Sprite>(
- player_jetpack_asset, Sprite::Data{
- .sorting_in_layer = 10,
- .order_in_layer = 2,
- .size = vec2(0, 60),
- .position_offset = vec2(-20, 0),
- });
+ player_jetpack_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_PLAYER,
+ .order_in_layer = 2,
+ .size = vec2(0, 60),
+ .position_offset = vec2(-20, 0),
+ }
+ );
player_jetpack_sprite.active = false;
- player.add_component<Animator>(player_jetpack_sprite, ivec2(32, 44), uvec2(4, 4),
- Animator::Data{
- .fps = 5,
- .looping = true,
- });
- player.add_component<Rigidbody>(Rigidbody::Data{
+ player.add_component<Animator>(
+ player_jetpack_sprite, ivec2(32, 44), uvec2(4, 4),
+ Animator::Data {
+ .fps = 5,
+ .looping = true,
+ }
+ );
+ player.add_component<Rigidbody>(Rigidbody::Data {
.gravity_scale = 20,
.body_type = Rigidbody::BodyType::DYNAMIC,
.linear_velocity = vec2(100, 0),
- .collision_layer = 10,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_PLAYER,
});
player.add_component<BoxCollider>(vec2(50, 50));
player.add_component<BehaviorScript>().set_script<PlayerScript>().active = false;
diff --git a/game/StartSubScene.cpp b/game/StartSubScene.cpp
deleted file mode 100644
index 5d810c2..0000000
--- a/game/StartSubScene.cpp
+++ /dev/null
@@ -1,442 +0,0 @@
-#include "StartSubScene.h"
-
-#include <crepe/api/Animator.h>
-#include <crepe/api/CircleCollider.h>
-#include <crepe/api/Color.h>
-#include <crepe/api/GameObject.h>
-#include <crepe/api/ParticleEmitter.h>
-#include <crepe/api/Rigidbody.h>
-#include <crepe/api/Scene.h>
-#include <crepe/api/Sprite.h>
-
-using namespace crepe;
-using namespace std;
-
-float StartSubScene::create(Scene & scn, float begin_x) {
- this->create_wall_fragments(scn, begin_x - 300);
-
- GameObject begin = scn.new_object("start_begin", "background", vec2(begin_x, 0));
- Asset begin_asset{"asset/background/start/titleFG_1_TVOS.png"};
- begin.add_component<Sprite>(begin_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 0,
- .size = vec2(0, 800),
- });
- GameObject hole = scn.new_object("start_hole", "background", vec2(begin_x - 250, 140));
- Asset hole_asset{"asset/background/start/titleWallHole.png"};
- Sprite & hole_sprite = hole.add_component<Sprite>(hole_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 1,
- .size = vec2(0, 200),
- });
- hole_sprite.active = false;
- begin_x += 700;
-
- this->add_table(begin, vec2(-150, 150));
- this->add_light(begin, vec2(-125, -150));
- this->add_jetpack_stand(begin, vec2(-125, 200));
-
- GameObject end = scn.new_object("start_end", "background", vec2(begin_x, 0));
- Asset end_asset{"asset/background/start/titleFG_2_TVOS.png"};
- end.add_component<Sprite>(end_asset, Sprite::Data{
- .sorting_in_layer = 4,
- .order_in_layer = 1,
- .size = vec2(0, 800),
- });
- begin_x += 100;
-
- this->add_lamp(end, vec2(-350, -95));
-
- return begin_x;
-}
-
-void StartSubScene::add_lamp(GameObject & obj, vec2 offset, unsigned int fps) {
- Asset lamp_asset{"asset/background/start/alarmLight_TVOS.png"};
- obj.add_component<Sprite>(lamp_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 0,
- .size = vec2(0, 100),
- .position_offset = offset,
- });
- Asset lamp_glow_asset{"asset/background/start/alarmGlow_TVOS.png"};
- Sprite & lamp_glow_sprite = obj.add_component<Sprite>(
- lamp_glow_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 1,
- .size = vec2(0, 300),
- .position_offset = offset - vec2(65, -55),
- });
- lamp_glow_sprite.active = false;
- obj.add_component<Animator>(lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1),
- Animator::Data{
- .fps = fps,
- .looping = true,
- });
-}
-
-void StartSubScene::add_table(GameObject & obj, vec2 offset) {
- Asset table_asset{"asset/background/start/table.png"};
- obj.add_component<Sprite>(table_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 0,
- .size = vec2(0, 100),
- .position_offset = offset,
- });
- Asset gramophone_asset{"asset/background/start/gramophone_TVOS.png"};
- Sprite & gramophone_sprite = obj.add_component<Sprite>(
- gramophone_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 1,
- .size = vec2(0, 100),
- .position_offset = offset + vec2(0, -50),
- });
- obj.add_component<Animator>(gramophone_sprite, ivec2(64, 128), uvec2(2, 1),
- Animator::Data{
- .fps = 10,
- .looping = true,
- });
-}
-
-void StartSubScene::add_light(crepe::GameObject & obj, crepe::vec2 offset) {
- Asset light_asset{"asset/background/start/title_light_TVOS.png"};
- obj.add_component<Sprite>(light_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 0,
- .size = vec2(0, 200),
- .position_offset = offset,
- });
- Asset light_glow_asset{"asset/background/start/lightEffect2.png"};
- obj.add_component<Sprite>(light_glow_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 1,
- .size = vec2(0, 100),
- .position_offset = offset + vec2(0, 75),
- });
- Asset light_effect_asset{"asset/background/start/lightEffect.png"};
- obj.add_component<Sprite>(light_effect_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 0,
- .size = vec2(0, 100),
- .position_offset = offset + vec2(0, 350),
- });
-}
-
-void StartSubScene::add_jetpack_stand(crepe::GameObject & obj, crepe::vec2 offset) {
- Asset jetpack_stand_asset{"asset/background/start/JetpackStand.png"};
- Sprite & jetpeck_stand_sprite
- = obj.add_component<Sprite>(jetpack_stand_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 1,
- .size = vec2(0, 70),
- .position_offset = offset,
- });
- obj.add_component<Animator>(jetpeck_stand_sprite, ivec2(34, 46), uvec2(2, 1),
- Animator::Data{
- .fps = 10,
- .looping = true,
- })
- .pause();
- Asset do_not_steal = {"asset/background/start/doNotTouchSign_TVOS.png"};
- obj.add_component<Sprite>(do_not_steal, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 1,
- .size = vec2(0, 100),
- .position_offset = offset + vec2(-75, -25),
- });
-}
-
-void StartSubScene::create_wall_fragments(crepe::Scene & scn, float begin_x) {
- GameObject frag_1 = scn.new_object("frag_1", "wall_fragment", vec2(begin_x, 200));
- Asset frag_1_asset{"asset/background/start/StartWall_frag1.png"};
- Sprite & frag_1_sprite
- = frag_1.add_component<Sprite>(frag_1_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_1_sprite.active = false;
- Rigidbody & frag_1_rb = frag_1.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 10,
- .linear_velocity = vec2(400, 400),
- .linear_velocity_coefficient = vec2(0.5, 0.6),
- .angular_velocity = 500,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_1_rb.active = false;
- frag_1.add_component<CircleCollider>(25);
-
- GameObject frag_2 = scn.new_object("frag_2", "wall_fragment", vec2(begin_x, 180));
- Asset frag_2_asset{"asset/background/start/StartWall_frag2.png"};
- Sprite & frag_2_sprite
- = frag_2.add_component<Sprite>(frag_2_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_2_sprite.active = false;
- Rigidbody & frag_2_rb = frag_2.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 20,
- .linear_velocity = vec2(400, 400),
- .linear_velocity_coefficient = vec2(0.35, 0.4),
- .angular_velocity = 400,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_2_rb.active = false;
- frag_2.add_component<CircleCollider>(55);
-
- GameObject frag_3 = scn.new_object("frag_3", "wall_fragment", vec2(begin_x, 170));
- Asset frag_3_asset{"asset/background/start/StartWall_frag3.png"};
- Sprite & frag_3_sprite
- = frag_3.add_component<Sprite>(frag_3_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_3_sprite.active = false;
- Rigidbody & frag_3_rb = frag_3.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 30,
- .linear_velocity = vec2(400, 400),
- .linear_velocity_coefficient = vec2(0.3, 0.3),
- .angular_velocity = 300,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_3_rb.active = false;
- frag_3.add_component<CircleCollider>(35);
-
- GameObject frag_4 = scn.new_object("frag_4", "wall_fragment", vec2(begin_x, 160));
- Asset frag_4_asset{"asset/background/start/StartWall_frag4.png"};
- Sprite & frag_4_sprite
- = frag_4.add_component<Sprite>(frag_4_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_4_sprite.active = false;
- Rigidbody & frag_4_rb = frag_4.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 40,
- .linear_velocity = vec2(700, 400),
- .linear_velocity_coefficient = vec2(0.2, 0.2),
- .angular_velocity = 200,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_4_rb.active = false;
- frag_4.add_component<CircleCollider>(60);
-
- GameObject frag_5 = scn.new_object("frag_5", "wall_fragment", vec2(begin_x, 150));
- Asset frag_5_asset{"asset/background/start/StartWall_frag5.png"};
- Sprite & frag_5_sprite
- = frag_5.add_component<Sprite>(frag_5_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_5_sprite.active = false;
- Rigidbody & frag_5_rb = frag_5.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 50,
- .linear_velocity = vec2(600, 800),
- .linear_velocity_coefficient = vec2(0.25, 0.15),
- .angular_velocity = 100,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_5_rb.active = false;
- frag_5.add_component<CircleCollider>(5);
-
- GameObject frag_6 = scn.new_object("frag_6", "wall_fragment", vec2(begin_x, 140));
- Asset frag_6_asset{"asset/background/start/StartWall_frag6.png"};
- Sprite & frag_6_sprite
- = frag_6.add_component<Sprite>(frag_6_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_6_sprite.active = false;
- Rigidbody & frag_6_rb = frag_6.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 30,
- .linear_velocity = vec2(300, 800),
- .linear_velocity_coefficient = vec2(0.35, 0.25),
- .angular_velocity = 100,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_6_rb.active = false;
- frag_6.add_component<CircleCollider>(30);
-
- GameObject frag_7 = scn.new_object("frag_7", "wall_fragment", vec2(begin_x, 130));
- Asset frag_7_asset{"asset/background/start/StartWall_frag7.png"};
- Sprite & frag_7_sprite
- = frag_7.add_component<Sprite>(frag_7_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_7_sprite.active = false;
- Rigidbody & frag_7_rb = frag_7.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 20,
- .linear_velocity = vec2(400, 500),
- .linear_velocity_coefficient = vec2(0.45, 0.6),
- .angular_velocity = 800,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_7_rb.active = false;
- frag_7.add_component<CircleCollider>(45);
-
- GameObject frag_8 = scn.new_object("frag_8", "wall_fragment", vec2(begin_x, 120));
- Asset frag_8_asset{"asset/background/start/StartWall_frag8.png"};
- Sprite & frag_8_sprite
- = frag_8.add_component<Sprite>(frag_8_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_8_sprite.active = false;
- Rigidbody & frag_8_rb = frag_8.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 30,
- .linear_velocity = vec2(400, 400),
- .linear_velocity_coefficient = vec2(0.5, 0.6),
- .angular_velocity = 500,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_8_rb.active = false;
- frag_8.add_component<CircleCollider>(25);
-
- GameObject frag_9 = scn.new_object("frag_9", "wall_fragment", vec2(begin_x, 110));
- Asset frag_9_asset{"asset/background/start/StartWall_frag9.png"};
- Sprite & frag_9_sprite
- = frag_9.add_component<Sprite>(frag_9_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_9_sprite.active = false;
- Rigidbody & frag_9_rb = frag_9.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 40,
- .linear_velocity = vec2(200, 400),
- .linear_velocity_coefficient = vec2(0.5, 0.25),
- .angular_velocity = 500,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_9_rb.active = false;
- frag_9.add_component<CircleCollider>(15);
-
- GameObject frag_10 = scn.new_object("frag_10", "wall_fragment", vec2(begin_x, 100));
- Asset frag_10_asset{"asset/background/start/StartWall_frag10.png"};
- Sprite & frag_10_sprite
- = frag_10.add_component<Sprite>(frag_10_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_10_sprite.active = false;
- Rigidbody & frag_10_rb = frag_10.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 50,
- .linear_velocity = vec2(400, 900),
- .linear_velocity_coefficient = vec2(0.35, 0.4),
- .angular_velocity = 300,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_10_rb.active = false;
- frag_10.add_component<CircleCollider>(60);
-
- GameObject frag_11 = scn.new_object("frag_11", "wall_fragment", vec2(begin_x, 90));
- Asset frag_11_asset{"asset/background/start/StartWall_frag11.png"};
- Sprite & frag_11_sprite
- = frag_11.add_component<Sprite>(frag_11_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_11_sprite.active = false;
- Rigidbody & frag_11_rb = frag_11.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 60,
- .linear_velocity = vec2(600, 800),
- .linear_velocity_coefficient = vec2(0.3, 0.3),
- .angular_velocity = 200,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_11_rb.active = false;
- frag_11.add_component<CircleCollider>(5);
-
- GameObject frag_12 = scn.new_object("frag_12", "wall_fragment", vec2(begin_x, 80));
- Asset frag_12_asset{"asset/background/start/StartWall_frag12.png"};
- Sprite & frag_12_sprite
- = frag_12.add_component<Sprite>(frag_12_asset, Sprite::Data{
- .sorting_in_layer = 5,
- .order_in_layer = 5,
- .size = vec2(0, 50),
- });
- frag_12_sprite.active = false;
- Rigidbody & frag_12_rb = frag_12.add_component<Rigidbody>(Rigidbody::Data{
- .gravity_scale = 70,
- .linear_velocity = vec2(500, 800),
- .linear_velocity_coefficient = vec2(0.25, 0.15),
- .angular_velocity = 100,
- .angular_velocity_coefficient = 0.55,
- .elasticity_coefficient = 0.5,
- .collision_layer = 5,
- });
- frag_12_rb.active = false;
- frag_12.add_component<CircleCollider>(50);
-
- GameObject smoke_particles_1
- = scn.new_object("smoke_particles", "particle_emitter", vec2(begin_x - 100, 200));
- Asset smoke_asset_1{"asset/particles/smoke.png"};
- Sprite & smoke_sprite_1 = smoke_particles_1.add_component<Sprite>(
- smoke_asset_1, Sprite::Data{
- .color = Color(255, 255, 255, 50),
- .sorting_in_layer = 15,
- .order_in_layer = 0,
- .size = vec2(0, 100),
- });
- ParticleEmitter & emitter_1 = smoke_particles_1.add_component<ParticleEmitter>(
- smoke_sprite_1, ParticleEmitter::Data{
- .emission_rate = 20,
- .min_speed = 40,
- .max_speed = 100,
- .min_angle = -30,
- .max_angle = 10,
- .end_lifespan = 4,
- });
- emitter_1.active = false;
-
- GameObject smoke_particles_2
- = scn.new_object("smoke_particles", "particle_emitter", vec2(begin_x - 100, 200));
- Asset smoke_asset_2{"asset/particles/smoke.png"};
- Sprite & smoke_sprite_2 = smoke_particles_2.add_component<Sprite>(
- smoke_asset_2, Sprite::Data{
- .color = Color(255, 255, 255, 50),
- .sorting_in_layer = 15,
- .order_in_layer = 0,
- .size = vec2(0, 70),
- });
- ParticleEmitter & emitter_2 = smoke_particles_2.add_component<ParticleEmitter>(
- smoke_sprite_2, ParticleEmitter::Data{
- .emission_rate = 30,
- .min_speed = 40,
- .max_speed = 100,
- .min_angle = -45,
- .max_angle = 5,
- .end_lifespan = 3,
- });
- emitter_2.active = false;
-}
diff --git a/game/background/AquariumSubScene.cpp b/game/background/AquariumSubScene.cpp
new file mode 100644
index 0000000..8d5202a
--- /dev/null
+++ b/game/background/AquariumSubScene.cpp
@@ -0,0 +1,167 @@
+#include "AquariumSubScene.h"
+
+#include "../Config.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/GameObject.h>
+#include <crepe/api/Scene.h>
+#include <crepe/api/Sprite.h>
+#include <crepe/types.h>
+
+using namespace crepe;
+using namespace std;
+
+float AquariumSubScene::create(Scene & scn, float begin_x) {
+ this->add_background(scn, begin_x);
+
+ GameObject aquarium_begin
+ = scn.new_object("aquarium_begin", "background", vec2(begin_x, 0));
+ Asset aquarium_begin_asset {"asset/background/aquarium/glassTubeFG_1_TVOS.png"};
+ aquarium_begin.add_component<Sprite>(
+ aquarium_begin_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 600;
+
+ GameObject aquarium_middle_1
+ = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
+ Asset aquarium_middle_1_asset {"asset/background/aquarium/glassTubeFG_3_TVOS.png"};
+ aquarium_middle_1.add_component<Sprite>(
+ aquarium_middle_1_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 2,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 400;
+
+ this->add_background(scn, begin_x - 200);
+
+ GameObject aquarium_middle_2
+ = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
+ Asset aquarium_middle_2_asset {"asset/background/aquarium/glassTubeFG_3_TVOS.png"};
+ aquarium_middle_2.add_component<Sprite>(
+ aquarium_middle_2_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 3,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 400;
+
+ GameObject aquarium_middle_3
+ = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
+ Asset aquarium_middle_3_asset {"asset/background/aquarium/glassTubeFG_3_TVOS.png"};
+ aquarium_middle_3.add_component<Sprite>(
+ aquarium_middle_3_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 4,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 400;
+
+ this->add_background(scn, begin_x - 200);
+
+ GameObject aquarium_middle_4
+ = scn.new_object("aquarium_middle", "background", vec2(begin_x, 0));
+ Asset aquarium_middle_4_asset {"asset/background/aquarium/glassTubeFG_3_TVOS.png"};
+ aquarium_middle_4.add_component<Sprite>(
+ aquarium_middle_4_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 600;
+
+ this->add_background(scn, begin_x);
+
+ GameObject aquarium_end = scn.new_object("aquarium_end", "background", vec2(begin_x, 0));
+ Asset aquarium_end_asset {"asset/background/aquarium/glassTubeFG_2_TVOS.png"};
+ aquarium_end.add_component<Sprite>(
+ aquarium_end_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 600;
+
+ return begin_x;
+}
+
+void AquariumSubScene::add_background(Scene & scn, float begin_x) {
+ GameObject bg_1 = scn.new_object("aquarium_bg_1", "aquarium_background", vec2(begin_x, 0));
+ Asset bg_1_1_asset {"asset/background/aquarium/AquariumBG1_1_TVOS.png"};
+ bg_1.add_component<Sprite>(
+ bg_1_1_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 2,
+ .size = vec2(0, 400),
+ .position_offset = vec2(-200, 100),
+ }
+ );
+ Asset bg_1_2_asset {"asset/background/aquarium/AquariumBG1_2_TVOS.png"};
+ bg_1.add_component<Sprite>(
+ bg_1_2_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 2,
+ .size = vec2(0, 400),
+ .position_offset = vec2(200, 100),
+ }
+ );
+ GameObject bg_2 = scn.new_object("aquarium_bg_2", "aquarium_background", vec2(begin_x, 0));
+ Asset bg_2_1_asset {"asset/background/aquarium/AquariumBG2_1_TVOS.png"};
+ bg_2.add_component<Sprite>(
+ bg_2_1_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 400),
+ .position_offset = vec2(200, -50),
+ }
+ );
+ Asset bg_2_2_asset {"asset/background/aquarium/AquariumBG2_2_TVOS.png"};
+ bg_2.add_component<Sprite>(
+ bg_2_2_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 400),
+ .position_offset = vec2(-200, -50),
+ }
+ );
+ GameObject bg_3 = scn.new_object("aquarium_bg_3", "aquarium_background", vec2(begin_x, 0));
+ Asset bg_3_1_asset {"asset/background/aquarium/AquariumBG3_1_TVOS.png"};
+ bg_3.add_component<Sprite>(
+ bg_3_1_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 400),
+ .position_offset = vec2(200, -200),
+ }
+ );
+ Asset bg_3_2_asset {"asset/background/aquarium/AquariumBG3_2_TVOS.png"};
+ bg_3.add_component<Sprite>(
+ bg_3_2_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 400),
+ .position_offset = vec2(-200, -200),
+ }
+ );
+}
diff --git a/game/AquariumSubScene.h b/game/background/AquariumSubScene.h
index 2a188bc..2a188bc 100644
--- a/game/AquariumSubScene.h
+++ b/game/background/AquariumSubScene.h
diff --git a/game/BackgroundSubScene.cpp b/game/background/BackgroundSubScene.cpp
index 6fdc598..6fdc598 100644
--- a/game/BackgroundSubScene.cpp
+++ b/game/background/BackgroundSubScene.cpp
diff --git a/game/BackgroundSubScene.h b/game/background/BackgroundSubScene.h
index 06bdac4..06bdac4 100644
--- a/game/BackgroundSubScene.h
+++ b/game/background/BackgroundSubScene.h
diff --git a/game/ForestParallaxScript.cpp b/game/background/ForestParallaxScript.cpp
index 27e30eb..c72f85d 100644
--- a/game/ForestParallaxScript.cpp
+++ b/game/background/ForestParallaxScript.cpp
@@ -3,8 +3,9 @@
using namespace crepe;
using namespace std;
-ForestParallaxScript::ForestParallaxScript(float begin_x, float end_x,
- std::string unique_bg_name)
+ForestParallaxScript::ForestParallaxScript(
+ float begin_x, float end_x, std::string unique_bg_name
+)
: begin_x(begin_x),
end_x(end_x),
name(unique_bg_name) {}
diff --git a/game/ForestParallaxScript.h b/game/background/ForestParallaxScript.h
index a65a684..a65a684 100644
--- a/game/ForestParallaxScript.h
+++ b/game/background/ForestParallaxScript.h
diff --git a/game/background/ForestSubScene.cpp b/game/background/ForestSubScene.cpp
new file mode 100644
index 0000000..a807a36
--- /dev/null
+++ b/game/background/ForestSubScene.cpp
@@ -0,0 +1,167 @@
+#include "ForestSubScene.h"
+#include "ForestParallaxScript.h"
+
+#include "../Config.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/BehaviorScript.h>
+#include <crepe/api/GameObject.h>
+#include <crepe/api/Scene.h>
+#include <crepe/api/Script.h>
+#include <crepe/api/Sprite.h>
+#include <crepe/types.h>
+
+using namespace crepe;
+using namespace std;
+
+float ForestSubScene::create(Scene & scn, float begin_x, std::string unique_bg_name) {
+ GameObject script = scn.new_object("forest_script", "background");
+ script.add_component<BehaviorScript>().set_script<ForestParallaxScript>(
+ begin_x - 400, begin_x + 3000 + 400, unique_bg_name
+ );
+
+ this->add_background(scn, begin_x, unique_bg_name);
+
+ GameObject begin = scn.new_object("forest_begin", "background", vec2(begin_x, 0));
+ Asset begin_asset {"asset/background/forest/forestFG_1_TVOS.png"};
+ begin.add_component<Sprite>(
+ begin_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 800;
+
+ this->add_background(scn, begin_x, unique_bg_name);
+
+ GameObject middle_1 = scn.new_object("forest_middle", "background", vec2(begin_x, 0));
+ Asset middle_1_asset {"asset/background/forest/forestFG_3_TVOS.png"};
+ middle_1.add_component<Sprite>(
+ middle_1_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 2,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 800;
+
+ this->add_background(scn, begin_x, unique_bg_name);
+
+ GameObject middle_2 = scn.new_object("forest_middle", "background", vec2(begin_x, 0));
+ Asset middle_2_asset {"asset/background/forest/forestFG_3_TVOS.png"};
+ middle_2.add_component<Sprite>(
+ middle_2_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 3,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 800;
+
+ this->add_background(scn, begin_x, unique_bg_name);
+
+ GameObject end = scn.new_object("forest_end", "background", vec2(begin_x, 0));
+ Asset end_asset {"asset/background/forest/forestFG_2_TVOS.png"};
+ end.add_component<Sprite>(
+ end_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 600;
+
+ this->add_background(scn, begin_x + 200, unique_bg_name);
+
+ return begin_x;
+}
+
+void ForestSubScene::add_background(Scene & scn, float begin_x, std::string name) {
+ GameObject bg_1
+ = scn.new_object("forest_bg_1_" + name, "forest_background", vec2(begin_x, 0));
+ Asset bg_1_asset {"asset/background/forest/forestBG1_1_TVOS.png"};
+ bg_1.add_component<Sprite>(
+ bg_1_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 2,
+ .size = vec2(0, 800),
+ }
+ );
+ GameObject bg_2
+ = scn.new_object("forest_bg_2_" + name, "forest_background", vec2(begin_x, 0));
+ Asset bg_2_1_asset {"asset/background/forest/forestBG2_1_TVOS.png"};
+ bg_2.add_component<Sprite>(
+ bg_2_1_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 400),
+ .position_offset = vec2(200, 0),
+ }
+ );
+ Asset bg_2_2_asset {"asset/background/forest/forestBG2_2_TVOS.png"};
+ bg_2.add_component<Sprite>(
+ bg_2_2_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 400),
+ .position_offset = vec2(-200, 0),
+ }
+ );
+ GameObject bg_3
+ = scn.new_object("forest_bg_3_" + name, "forest_background", vec2(begin_x, 0));
+ Asset bg_3_1_asset {"asset/background/forest/forestBG3_1_TVOS.png"};
+ bg_3.add_component<Sprite>(
+ bg_3_1_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 200),
+ .position_offset = vec2(300, 0),
+ }
+ );
+ Asset bg_3_2_asset {"asset/background/forest/forestBG3_2_TVOS.png"};
+ bg_3.add_component<Sprite>(
+ bg_3_2_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 200),
+ .position_offset = vec2(100, 0),
+ }
+ );
+ Asset bg_3_3_asset {"asset/background/forest/forestBG3_3_TVOS.png"};
+ bg_3.add_component<Sprite>(
+ bg_3_3_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 200),
+ .position_offset = vec2(-100, 0),
+ }
+ );
+ Asset bg_3_4_asset {"asset/background/forest/forestBG3_4_TVOS.png"};
+ bg_3.add_component<Sprite>(
+ bg_3_4_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACK_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 200),
+ .position_offset = vec2(-300, 0),
+ }
+ );
+
+ bg_2.add_component<Rigidbody>(Rigidbody::Data {
+ .linear_velocity = vec2(30, 0),
+ });
+ bg_3.add_component<Rigidbody>(Rigidbody::Data {
+ .linear_velocity = vec2(40, 0),
+ });
+}
diff --git a/game/ForestSubScene.h b/game/background/ForestSubScene.h
index 0a04001..0a04001 100644
--- a/game/ForestSubScene.h
+++ b/game/background/ForestSubScene.h
diff --git a/game/background/HallwaySubScene.cpp b/game/background/HallwaySubScene.cpp
new file mode 100644
index 0000000..4d96c94
--- /dev/null
+++ b/game/background/HallwaySubScene.cpp
@@ -0,0 +1,163 @@
+#include "HallwaySubScene.h"
+
+#include "../Config.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/Color.h>
+#include <crepe/api/GameObject.h>
+#include <crepe/api/Scene.h>
+#include <crepe/api/Sprite.h>
+
+using namespace crepe;
+using namespace std;
+
+float HallwaySubScene::create(
+ Scene & scn, float begin_x, unsigned int sector_num, Color sector_color
+) {
+ GameObject begin = scn.new_object("hallway_begin", "background", vec2(begin_x, 0));
+ Asset begin_asset {"asset/background/hallway/hallway1FG_1_TVOS.png"};
+ begin.add_component<Sprite>(
+ begin_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 600;
+
+ this->add_sector_number(begin, vec2(-200, 0), sector_num, sector_color);
+ this->add_lamp(begin, vec2(330, -120), 11);
+ this->add_lamp(begin, vec2(430, -120), 9);
+
+ GameObject middle_1 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
+ Asset middle_asset {"asset/background/hallway/hallway1FG_2_TVOS.png"};
+ middle_1.add_component<Sprite>(
+ middle_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 2,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 600;
+
+ GameObject middle_2 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
+ Asset middle_asset_2 {"asset/background/hallway/hallway1FG_2_TVOS.png"};
+ middle_2.add_component<Sprite>(
+ middle_asset_2,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 3,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 200;
+
+ GameObject middle_3 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
+ Asset middle_asset_3 {"asset/background/hallway/hallway1FG_2_TVOS.png"};
+ middle_3.add_component<Sprite>(
+ middle_asset_3,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 4,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 400;
+
+ this->add_lamp(middle_3, vec2(0, -120));
+
+ GameObject middle_4 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
+ Asset middle_asset_4 {"asset/background/hallway/hallway1FG_2_TVOS.png"};
+ middle_4.add_component<Sprite>(
+ middle_asset_4,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 600;
+
+ GameObject end = scn.new_object("hallway_end", "background", vec2(begin_x, 0));
+ Asset end_asset {"asset/background/hallway/hallway1FG_1_TVOS.png"};
+ end.add_component<Sprite>(
+ end_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 600;
+
+ return begin_x;
+}
+
+void HallwaySubScene::add_lamp(GameObject & obj, vec2 offset, unsigned int fps) {
+ Asset lamp_asset {"asset/background/hallway/alarmLight_TVOS.png"};
+ obj.add_component<Sprite>(
+ lamp_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 100),
+ .position_offset = offset,
+ }
+ );
+ Asset lamp_glow_asset {"asset/background/hallway/alarmGlow_TVOS.png"};
+ Sprite & lamp_glow_sprite = obj.add_component<Sprite>(
+ lamp_glow_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 300),
+ .position_offset = offset - vec2(65, -30),
+ }
+ );
+ obj.add_component<Animator>(
+ lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1),
+ Animator::Data {
+ .fps = fps,
+ .looping = true,
+ }
+ );
+}
+
+void HallwaySubScene::add_sector_number(
+ GameObject & obj, vec2 offset, unsigned int sector_num, Color sector_color
+) {
+ Asset sector_text_asset {"asset/background/hallway/sectorText_TVOS.png"};
+ obj.add_component<Sprite>(
+ sector_text_asset,
+ Sprite::Data {
+ .color = sector_color,
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 100),
+ .position_offset = offset,
+ }
+ );
+ Asset sector_num_asset {"asset/background/hallway/sectorNumbers_TVOS.png"};
+ Sprite & sector_num_sprite = obj.add_component<Sprite>(
+ sector_num_asset,
+ Sprite::Data {
+ .color = sector_color,
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 100),
+ .position_offset = offset + vec2(200, 0),
+ }
+ );
+ Animator & sector_num_anim = obj.add_component<Animator>(
+ sector_num_sprite, ivec2(256, 128), uvec2(4, 4), Animator::Data {}
+ );
+ int column = (sector_num - 1) / 4;
+ int row = (sector_num - 1) % 4;
+ sector_num_anim.set_anim(column);
+ for (int i = 0; i < row; i++) {
+ sector_num_anim.next_anim();
+ }
+ sector_num_anim.pause();
+}
diff --git a/game/HallwaySubScene.h b/game/background/HallwaySubScene.h
index acc9329..c38b4a9 100644
--- a/game/HallwaySubScene.h
+++ b/game/background/HallwaySubScene.h
@@ -10,12 +10,15 @@ class Color;
class HallwaySubScene {
public:
- float create(crepe::Scene & scn, float begin_x, unsigned int sector_num,
- crepe::Color sector_color);
+ float create(
+ crepe::Scene & scn, float begin_x, unsigned int sector_num, crepe::Color sector_color
+ );
private:
void add_lamp(crepe::GameObject & obj, crepe::vec2 offset, unsigned int fps = 10);
- void add_sector_number(crepe::GameObject & obj, crepe::vec2 offset,
- unsigned int sector_num, crepe::Color sector_color);
+ void add_sector_number(
+ crepe::GameObject & obj, crepe::vec2 offset, unsigned int sector_num,
+ crepe::Color sector_color
+ );
};
diff --git a/game/background/StartSubScene.cpp b/game/background/StartSubScene.cpp
new file mode 100644
index 0000000..d68287b
--- /dev/null
+++ b/game/background/StartSubScene.cpp
@@ -0,0 +1,527 @@
+#include "StartSubScene.h"
+
+#include "../Config.h"
+
+#include <crepe/api/Animator.h>
+#include <crepe/api/CircleCollider.h>
+#include <crepe/api/Color.h>
+#include <crepe/api/GameObject.h>
+#include <crepe/api/ParticleEmitter.h>
+#include <crepe/api/Rigidbody.h>
+#include <crepe/api/Scene.h>
+#include <crepe/api/Sprite.h>
+
+using namespace crepe;
+using namespace std;
+
+float StartSubScene::create(Scene & scn, float begin_x) {
+ this->create_wall_fragments(scn, begin_x - 300);
+
+ GameObject begin = scn.new_object("start_begin", "background", vec2(begin_x, 0));
+ Asset begin_asset {"asset/background/start/titleFG_1_TVOS.png"};
+ begin.add_component<Sprite>(
+ begin_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ GameObject hole = scn.new_object("start_hole", "background", vec2(begin_x - 250, 140));
+ Asset hole_asset {"asset/background/start/titleWallHole.png"};
+ Sprite & hole_sprite = hole.add_component<Sprite>(
+ hole_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 200),
+ }
+ );
+ hole_sprite.active = false;
+ begin_x += 700;
+
+ this->add_table(begin, vec2(-150, 150));
+ this->add_light(begin, vec2(-125, -150));
+ this->add_jetpack_stand(begin, vec2(-125, 200));
+
+ GameObject end = scn.new_object("start_end", "background", vec2(begin_x, 0));
+ Asset end_asset {"asset/background/start/titleFG_2_TVOS.png"};
+ end.add_component<Sprite>(
+ end_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, GAME_HEIGHT),
+ }
+ );
+ begin_x += 100;
+
+ this->add_lamp(end, vec2(-350, -95));
+
+ return begin_x;
+}
+
+void StartSubScene::add_lamp(GameObject & obj, vec2 offset, unsigned int fps) {
+ Asset lamp_asset {"asset/background/start/alarmLight_TVOS.png"};
+ obj.add_component<Sprite>(
+ lamp_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 100),
+ .position_offset = offset,
+ }
+ );
+ Asset lamp_glow_asset {"asset/background/start/alarmGlow_TVOS.png"};
+ Sprite & lamp_glow_sprite = obj.add_component<Sprite>(
+ lamp_glow_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 300),
+ .position_offset = offset - vec2(65, -55),
+ }
+ );
+ lamp_glow_sprite.active = false;
+ obj.add_component<Animator>(
+ lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1),
+ Animator::Data {
+ .fps = fps,
+ .looping = true,
+ }
+ );
+}
+
+void StartSubScene::add_table(GameObject & obj, vec2 offset) {
+ Asset table_asset {"asset/background/start/table.png"};
+ obj.add_component<Sprite>(
+ table_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 100),
+ .position_offset = offset,
+ }
+ );
+ Asset gramophone_asset {"asset/background/start/gramophone_TVOS.png"};
+ Sprite & gramophone_sprite = obj.add_component<Sprite>(
+ gramophone_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 100),
+ .position_offset = offset + vec2(0, -50),
+ }
+ );
+ obj.add_component<Animator>(
+ gramophone_sprite, ivec2(64, 128), uvec2(2, 1),
+ Animator::Data {
+ .fps = 10,
+ .looping = true,
+ }
+ );
+}
+
+void StartSubScene::add_light(crepe::GameObject & obj, crepe::vec2 offset) {
+ Asset light_asset {"asset/background/start/title_light_TVOS.png"};
+ obj.add_component<Sprite>(
+ light_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 200),
+ .position_offset = offset,
+ }
+ );
+ Asset light_glow_asset {"asset/background/start/lightEffect2.png"};
+ obj.add_component<Sprite>(
+ light_glow_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 100),
+ .position_offset = offset + vec2(0, 75),
+ }
+ );
+ Asset light_effect_asset {"asset/background/start/lightEffect.png"};
+ obj.add_component<Sprite>(
+ light_effect_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 100),
+ .position_offset = offset + vec2(0, 350),
+ }
+ );
+}
+
+void StartSubScene::add_jetpack_stand(crepe::GameObject & obj, crepe::vec2 offset) {
+ Asset jetpack_stand_asset {"asset/background/start/JetpackStand.png"};
+ Sprite & jetpeck_stand_sprite = obj.add_component<Sprite>(
+ jetpack_stand_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 70),
+ .position_offset = offset,
+ }
+ );
+ obj.add_component<Animator>(
+ jetpeck_stand_sprite, ivec2(34, 46), uvec2(2, 1),
+ Animator::Data {
+ .fps = 10,
+ .looping = true,
+ }
+ )
+ .pause();
+ Asset do_not_steal = {"asset/background/start/doNotTouchSign_TVOS.png"};
+ obj.add_component<Sprite>(
+ do_not_steal,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 1,
+ .size = vec2(0, 100),
+ .position_offset = offset + vec2(-75, -25),
+ }
+ );
+}
+
+void StartSubScene::create_wall_fragments(crepe::Scene & scn, float begin_x) {
+ GameObject frag_1 = scn.new_object("frag_1", "wall_fragment", vec2(begin_x, 200));
+ Asset frag_1_asset {"asset/background/start/StartWall_frag1.png"};
+ Sprite & frag_1_sprite = frag_1.add_component<Sprite>(
+ frag_1_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_1_sprite.active = false;
+ Rigidbody & frag_1_rb = frag_1.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 10,
+ .linear_velocity = vec2(400, 400),
+ .linear_velocity_coefficient = vec2(0.5, 0.6),
+ .angular_velocity = 500,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_1_rb.active = false;
+ frag_1.add_component<CircleCollider>(25);
+
+ GameObject frag_2 = scn.new_object("frag_2", "wall_fragment", vec2(begin_x, 180));
+ Asset frag_2_asset {"asset/background/start/StartWall_frag2.png"};
+ Sprite & frag_2_sprite = frag_2.add_component<Sprite>(
+ frag_2_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_2_sprite.active = false;
+ Rigidbody & frag_2_rb = frag_2.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 20,
+ .linear_velocity = vec2(400, 400),
+ .linear_velocity_coefficient = vec2(0.35, 0.4),
+ .angular_velocity = 400,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_2_rb.active = false;
+ frag_2.add_component<CircleCollider>(55);
+
+ GameObject frag_3 = scn.new_object("frag_3", "wall_fragment", vec2(begin_x, 170));
+ Asset frag_3_asset {"asset/background/start/StartWall_frag3.png"};
+ Sprite & frag_3_sprite = frag_3.add_component<Sprite>(
+ frag_3_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_3_sprite.active = false;
+ Rigidbody & frag_3_rb = frag_3.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 30,
+ .linear_velocity = vec2(400, 400),
+ .linear_velocity_coefficient = vec2(0.3, 0.3),
+ .angular_velocity = 300,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_3_rb.active = false;
+ frag_3.add_component<CircleCollider>(35);
+
+ GameObject frag_4 = scn.new_object("frag_4", "wall_fragment", vec2(begin_x, 160));
+ Asset frag_4_asset {"asset/background/start/StartWall_frag4.png"};
+ Sprite & frag_4_sprite = frag_4.add_component<Sprite>(
+ frag_4_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_4_sprite.active = false;
+ Rigidbody & frag_4_rb = frag_4.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 40,
+ .linear_velocity = vec2(700, 400),
+ .linear_velocity_coefficient = vec2(0.2, 0.2),
+ .angular_velocity = 200,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_4_rb.active = false;
+ frag_4.add_component<CircleCollider>(60);
+
+ GameObject frag_5 = scn.new_object("frag_5", "wall_fragment", vec2(begin_x, 150));
+ Asset frag_5_asset {"asset/background/start/StartWall_frag5.png"};
+ Sprite & frag_5_sprite = frag_5.add_component<Sprite>(
+ frag_5_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_5_sprite.active = false;
+ Rigidbody & frag_5_rb = frag_5.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 50,
+ .linear_velocity = vec2(600, 800),
+ .linear_velocity_coefficient = vec2(0.25, 0.15),
+ .angular_velocity = 100,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_5_rb.active = false;
+ frag_5.add_component<CircleCollider>(5);
+
+ GameObject frag_6 = scn.new_object("frag_6", "wall_fragment", vec2(begin_x, 140));
+ Asset frag_6_asset {"asset/background/start/StartWall_frag6.png"};
+ Sprite & frag_6_sprite = frag_6.add_component<Sprite>(
+ frag_6_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_6_sprite.active = false;
+ Rigidbody & frag_6_rb = frag_6.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 30,
+ .linear_velocity = vec2(300, 800),
+ .linear_velocity_coefficient = vec2(0.35, 0.25),
+ .angular_velocity = 100,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_6_rb.active = false;
+ frag_6.add_component<CircleCollider>(30);
+
+ GameObject frag_7 = scn.new_object("frag_7", "wall_fragment", vec2(begin_x, 130));
+ Asset frag_7_asset {"asset/background/start/StartWall_frag7.png"};
+ Sprite & frag_7_sprite = frag_7.add_component<Sprite>(
+ frag_7_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_7_sprite.active = false;
+ Rigidbody & frag_7_rb = frag_7.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 20,
+ .linear_velocity = vec2(400, 500),
+ .linear_velocity_coefficient = vec2(0.45, 0.6),
+ .angular_velocity = 800,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_7_rb.active = false;
+ frag_7.add_component<CircleCollider>(45);
+
+ GameObject frag_8 = scn.new_object("frag_8", "wall_fragment", vec2(begin_x, 120));
+ Asset frag_8_asset {"asset/background/start/StartWall_frag8.png"};
+ Sprite & frag_8_sprite = frag_8.add_component<Sprite>(
+ frag_8_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_8_sprite.active = false;
+ Rigidbody & frag_8_rb = frag_8.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 30,
+ .linear_velocity = vec2(400, 400),
+ .linear_velocity_coefficient = vec2(0.5, 0.6),
+ .angular_velocity = 500,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_8_rb.active = false;
+ frag_8.add_component<CircleCollider>(25);
+
+ GameObject frag_9 = scn.new_object("frag_9", "wall_fragment", vec2(begin_x, 110));
+ Asset frag_9_asset {"asset/background/start/StartWall_frag9.png"};
+ Sprite & frag_9_sprite = frag_9.add_component<Sprite>(
+ frag_9_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_9_sprite.active = false;
+ Rigidbody & frag_9_rb = frag_9.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 40,
+ .linear_velocity = vec2(200, 400),
+ .linear_velocity_coefficient = vec2(0.5, 0.25),
+ .angular_velocity = 500,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_9_rb.active = false;
+ frag_9.add_component<CircleCollider>(15);
+
+ GameObject frag_10 = scn.new_object("frag_10", "wall_fragment", vec2(begin_x, 100));
+ Asset frag_10_asset {"asset/background/start/StartWall_frag10.png"};
+ Sprite & frag_10_sprite = frag_10.add_component<Sprite>(
+ frag_10_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_10_sprite.active = false;
+ Rigidbody & frag_10_rb = frag_10.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 50,
+ .linear_velocity = vec2(400, 900),
+ .linear_velocity_coefficient = vec2(0.35, 0.4),
+ .angular_velocity = 300,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_10_rb.active = false;
+ frag_10.add_component<CircleCollider>(60);
+
+ GameObject frag_11 = scn.new_object("frag_11", "wall_fragment", vec2(begin_x, 70));
+ Asset frag_11_asset {"asset/background/start/StartWall_frag11.png"};
+ Sprite & frag_11_sprite = frag_11.add_component<Sprite>(
+ frag_11_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_11_sprite.active = false;
+ Rigidbody & frag_11_rb = frag_11.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 60,
+ .linear_velocity = vec2(600, 800),
+ .linear_velocity_coefficient = vec2(0.3, 0.3),
+ .angular_velocity = 200,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_11_rb.active = false;
+ frag_11.add_component<CircleCollider>(5);
+
+ GameObject frag_12 = scn.new_object("frag_12", "wall_fragment", vec2(begin_x, 80));
+ Asset frag_12_asset {"asset/background/start/StartWall_frag12.png"};
+ Sprite & frag_12_sprite = frag_12.add_component<Sprite>(
+ frag_12_asset,
+ Sprite::Data {
+ .sorting_in_layer = SORT_IN_LAY_FORE_BACKGROUND,
+ .order_in_layer = 5,
+ .size = vec2(0, 50),
+ }
+ );
+ frag_12_sprite.active = false;
+ Rigidbody & frag_12_rb = frag_12.add_component<Rigidbody>(Rigidbody::Data {
+ .gravity_scale = 70,
+ .linear_velocity = vec2(500, 800),
+ .linear_velocity_coefficient = vec2(0.25, 0.15),
+ .angular_velocity = 100,
+ .angular_velocity_coefficient = 0.55,
+ .elasticity_coefficient = 0.5,
+ .collision_layers = {COLL_LAY_BOT_TOP},
+ .collision_layer = COLL_LAY_WALL_FRAGS,
+ });
+ frag_12_rb.active = false;
+ frag_12.add_component<CircleCollider>(50);
+
+ GameObject smoke_particles_1
+ = scn.new_object("smoke_particles", "particle_emitter", vec2(begin_x - 100, 200));
+ Asset smoke_asset_1 {"asset/particles/smoke.png"};
+ Sprite & smoke_sprite_1 = smoke_particles_1.add_component<Sprite>(
+ smoke_asset_1,
+ Sprite::Data {
+ .color = Color(255, 255, 255, 50),
+ .sorting_in_layer = SORT_IN_LAY_PARTICLES_FOREGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 100),
+ }
+ );
+ ParticleEmitter & emitter_1 = smoke_particles_1.add_component<ParticleEmitter>(
+ smoke_sprite_1,
+ ParticleEmitter::Data {
+ .emission_rate = 20,
+ .min_speed = 40,
+ .max_speed = 100,
+ .min_angle = -30,
+ .max_angle = 10,
+ .end_lifespan = 4,
+ }
+ );
+ emitter_1.active = false;
+
+ GameObject smoke_particles_2
+ = scn.new_object("smoke_particles", "particle_emitter", vec2(begin_x - 100, 200));
+ Asset smoke_asset_2 {"asset/particles/smoke.png"};
+ Sprite & smoke_sprite_2 = smoke_particles_2.add_component<Sprite>(
+ smoke_asset_2,
+ Sprite::Data {
+ .color = Color(255, 255, 255, 50),
+ .sorting_in_layer = SORT_IN_LAY_PARTICLES_FOREGROUND,
+ .order_in_layer = 0,
+ .size = vec2(0, 70),
+ }
+ );
+ ParticleEmitter & emitter_2 = smoke_particles_2.add_component<ParticleEmitter>(
+ smoke_sprite_2,
+ ParticleEmitter::Data {
+ .emission_rate = 30,
+ .min_speed = 40,
+ .max_speed = 100,
+ .min_angle = -45,
+ .max_angle = 5,
+ .end_lifespan = 3,
+ }
+ );
+ emitter_2.active = false;
+}
diff --git a/game/StartSubScene.h b/game/background/StartSubScene.h
index c83e3d5..c83e3d5 100644
--- a/game/StartSubScene.h
+++ b/game/background/StartSubScene.h
diff --git a/game/makefile b/game/makefile
new file mode 100644
index 0000000..3fedf7f
--- /dev/null
+++ b/game/makefile
@@ -0,0 +1,5 @@
+.PHONY: FORCE
+
+format: FORCE
+ $(MAKE) -C .. $@
+