diff options
Diffstat (limited to 'game')
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 .. $@ + |