aboutsummaryrefslogtreecommitdiff
path: root/src/example/demo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/example/demo.cpp')
-rw-r--r--src/example/demo.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/example/demo.cpp b/src/example/demo.cpp
new file mode 100644
index 0000000..33f4d74
--- /dev/null
+++ b/src/example/demo.cpp
@@ -0,0 +1,72 @@
+#include <crepe/util/Log.h>
+#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() {
+ Rigidbody & body = get_component<Rigidbody>();
+
+ if (get_key_state(Keycode::SPACE)) {
+ body.add_force_linear({ 0, -1 });
+ }
+ }
+};
+
+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{
+ .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() {
+ Config::get_instance() = {
+ .physics = {
+ .gravity = 20,
+ },
+ .window = {
+ .size = {800, 800},
+ },
+ };
+
+ Engine demo;
+ demo.add_scene<DemoScene>();
+ return demo.main();
+}
+