diff options
-rw-r--r-- | asset/demo/floor.png | bin | 0 -> 99 bytes | |||
-rw-r--r-- | asset/demo/player.png | bin | 0 -> 167 bytes | |||
-rw-r--r-- | src/crepe/api/BoxCollider.cpp | 4 | ||||
-rw-r--r-- | src/crepe/api/BoxCollider.h | 2 | ||||
-rw-r--r-- | src/crepe/api/Camera.h | 2 | ||||
-rw-r--r-- | src/crepe/api/Rigidbody.h | 4 | ||||
-rw-r--r-- | src/crepe/api/Scene.h | 2 | ||||
-rw-r--r-- | src/example/demo.cpp | 46 |
8 files changed, 50 insertions, 10 deletions
diff --git a/asset/demo/floor.png b/asset/demo/floor.png Binary files differnew file mode 100644 index 0000000..fb4e37d --- /dev/null +++ b/asset/demo/floor.png diff --git a/asset/demo/player.png b/asset/demo/player.png Binary files differnew file mode 100644 index 0000000..2a22602 --- /dev/null +++ b/asset/demo/player.png diff --git a/src/crepe/api/BoxCollider.cpp b/src/crepe/api/BoxCollider.cpp index c097a24..a893d41 100644 --- a/src/crepe/api/BoxCollider.cpp +++ b/src/crepe/api/BoxCollider.cpp @@ -4,7 +4,7 @@ using namespace crepe; -BoxCollider::BoxCollider(game_object_id_t game_object_id, const vec2 & offset, - const vec2 & dimensions) +BoxCollider::BoxCollider(game_object_id_t game_object_id, const vec2 & dimensions, + const vec2 & offset) : Collider(game_object_id, offset), dimensions(dimensions) {} diff --git a/src/crepe/api/BoxCollider.h b/src/crepe/api/BoxCollider.h index 1ac4d46..3835e2c 100644 --- a/src/crepe/api/BoxCollider.h +++ b/src/crepe/api/BoxCollider.h @@ -13,7 +13,7 @@ namespace crepe { */ class BoxCollider : public Collider { public: - BoxCollider(game_object_id_t game_object_id, const vec2 & offset, const vec2 & dimensions); + BoxCollider(game_object_id_t game_object_id, const vec2 & dimensions, const vec2 & offset = { 0, 0 }); //! Width and height of the box collider vec2 dimensions; diff --git a/src/crepe/api/Camera.h b/src/crepe/api/Camera.h index 48f2ff2..2fea9f3 100644 --- a/src/crepe/api/Camera.h +++ b/src/crepe/api/Camera.h @@ -47,7 +47,7 @@ public: ~Camera(); // dbg_trace only public: - Camera::Data data; + Data data; //! viewport is the area of the world visible through the camera (in world units) const vec2 viewport_size; diff --git a/src/crepe/api/Rigidbody.h b/src/crepe/api/Rigidbody.h index b08c8db..b2bfc0d 100644 --- a/src/crepe/api/Rigidbody.h +++ b/src/crepe/api/Rigidbody.h @@ -61,7 +61,7 @@ public: * gravity force, allowing for fine-grained control over how the object responds to gravity. * */ - float gravity_scale = 0; + float gravity_scale = 1.0; //! Defines the type of the physics body, which determines how the physics system interacts with the object. BodyType body_type = BodyType::DYNAMIC; @@ -139,7 +139,7 @@ public: * Each element represents a layer ID, and the GameObject will only detect * collisions with other GameObjects that belong to these layers. */ - std::set<int> collision_layers; + std::set<int> collision_layers = {0}; }; public: diff --git a/src/crepe/api/Scene.h b/src/crepe/api/Scene.h index dcca9d4..5c34b36 100644 --- a/src/crepe/api/Scene.h +++ b/src/crepe/api/Scene.h @@ -39,7 +39,7 @@ public: * \brief Get the scene's name * \return The scene's name */ - virtual std::string get_name() const = 0; + virtual std::string get_name() const { return ""; }; // TODO: Late references should ALWAYS be private! This is currently kept as-is so unit tests // keep passing, but this reference should not be directly accessible by the user!!! diff --git a/src/example/demo.cpp b/src/example/demo.cpp index a7d784e..d7adbdb 100644 --- a/src/example/demo.cpp +++ b/src/example/demo.cpp @@ -2,23 +2,63 @@ #include <crepe/api/Engine.h> #include <crepe/api/Scene.h> #include <crepe/api/Camera.h> +#include <crepe/api/BehaviorScript.h> +#include <crepe/api/Rigidbody.h> +#include <crepe/api/Config.h> using namespace crepe; using namespace std; +class PlayerController : public Script { + void update() { + } +}; + class DemoScene : public Scene { string get_name() const override { return "DemoScene"; } void load_scene() override { GameObject camera = new_object("camera"); - camera.add_component<Camera>(vec2{10, 10}, Camera::Data{}); + camera.add_component<Camera>(vec2{10, 10}, Camera::Data{ + .bg_color = {0x22, 0x22, 0x22}, + }); + + + GameObject ground = new_object("ground"); + Sprite & ground_sprite = ground.add_component<Sprite>( + Asset{"asset/demo/floor.png"}, + Sprite::Data{ + .size = {10, 2}, + } + ); + ground.transform.position = {0, 4}; + ground.add_component<Rigidbody>(Rigidbody::Data{ + .body_type = Rigidbody::BodyType::STATIC, + }); + ground.add_component<BoxCollider>(ground_sprite.data.size); + + + GameObject player = new_object("player"); + Sprite & player_sprite = player.add_component<Sprite>( + Asset{"asset/demo/player.png"}, + Sprite::Data{ + .size = { 1, 1 }, + } + ); + player.add_component<Rigidbody>(Rigidbody::Data{}); + player.add_component<BoxCollider>(player_sprite.data.size); + player.add_component<BehaviorScript>().set_script<PlayerController>(); } }; int main() { - Engine demo; + Config::get_instance() = { + .window = { + .size = {800, 800}, + }, + }; + Engine demo; demo.add_scene<DemoScene>(); - return demo.main(); } |