diff options
| author | max-001 <maxsmits21@kpnmail.nl> | 2024-12-20 12:01:36 +0100 | 
|---|---|---|
| committer | max-001 <maxsmits21@kpnmail.nl> | 2024-12-20 12:01:36 +0100 | 
| commit | 79d3a9f4311e6684b6df83a15ca7844f58c1959c (patch) | |
| tree | b2883e83f61cee9edf290a6a7228c7f0b1fbae8a /src/example | |
| parent | 9140b73e4af7aa925b53e4fb4e6aa7f4ea2e3385 (diff) | |
| parent | 03aea832aa0bc2edba2cc5ab4d9f8eba42d355be (diff) | |
Merge remote-tracking branch 'origin/master' into max/game
Diffstat (limited to 'src/example')
| -rw-r--r-- | src/example/FontExample.cpp | 55 | ||||
| -rw-r--r-- | src/example/loadfont.cpp | 49 | ||||
| -rw-r--r-- | src/example/replay.cpp | 84 | 
3 files changed, 188 insertions, 0 deletions
diff --git a/src/example/FontExample.cpp b/src/example/FontExample.cpp new file mode 100644 index 0000000..6a334b1 --- /dev/null +++ b/src/example/FontExample.cpp @@ -0,0 +1,55 @@ +#include <SDL2/SDL_ttf.h> +#include <chrono> +#include <crepe/api/Camera.h> +#include <crepe/api/Config.h> +#include <crepe/api/GameObject.h> +#include <crepe/api/LoopManager.h> +#include <crepe/api/Scene.h> +#include <crepe/api/Script.h> +#include <crepe/api/Text.h> +#include <crepe/facade/Font.h> +#include <crepe/facade/SDLContext.h> +#include <crepe/manager/EventManager.h> +#include <crepe/manager/Mediator.h> +#include <crepe/manager/ResourceManager.h> +#include <exception> +#include <iostream> +#include <memory> +using namespace crepe; +using namespace std; +using namespace std::chrono; +class TestScript : public Script { +public: +	steady_clock::time_point start_time; +	virtual void init() override { start_time = steady_clock::now(); } +	virtual void update() override { +		auto now = steady_clock::now(); +		auto elapsed = duration_cast<seconds>(now - start_time).count(); + +		if (elapsed >= 5) { +			Mediator & med = mediator; +			EventManager & event_mgr = med.event_manager; +			event_mgr.trigger_event<ShutDownEvent>(); +		} +	} +}; +class TestScene : public Scene { +public: +	void load_scene() override { +		GameObject text_object = this->new_object("test", "test", vec2{0, 0}, 0, 1); +		text_object.add_component<Text>(vec2(100, 100), vec2(0, 0), "OpenSymbol", +										Text::Data{}); +		text_object.add_component<BehaviorScript>().set_script<TestScript>(); +		text_object.add_component<Camera>(ivec2{300, 300}, vec2{100, 100}, Camera::Data{}); +	} +	std::string get_name() const override { return "hey"; } +}; +int main() { +	// Config& config = Config::get_instance(); +	// config.log.level = Log::Level::TRACE; +	LoopManager engine; +	engine.add_scene<TestScene>(); +	engine.start(); + +	return 0; +} diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp new file mode 100644 index 0000000..e459332 --- /dev/null +++ b/src/example/loadfont.cpp @@ -0,0 +1,49 @@ +#include <SDL2/SDL_ttf.h> +#include <crepe/api/Asset.h> +#include <crepe/api/Text.h> +#include <crepe/facade/Font.h> +#include <crepe/facade/FontFacade.h> +#include <crepe/facade/SDLContext.h> +#include <crepe/manager/Mediator.h> +#include <crepe/manager/ResourceManager.h> +#include <exception> +#include <iostream> +#include <memory> +#include <optional> +using namespace crepe; +int main() { + +	// SDLFontContext font_facade; +	Mediator mediator; +	FontFacade font_facade{}; +	SDLContext sdl_context{mediator}; +	// ComponentManager component_manager{mediator}; +	ResourceManager resource_manager{mediator}; +	try { +		// Correct way to create a unique pointer for Text +		std::unique_ptr<Text> label = std::make_unique<Text>( +			1, vec2(100, 100), vec2(0, 0), "OpenSymbol", Text::Data{}, "test text"); +		// std::cout << "Path: " << label->font.get_path() << std::endl; +		Asset asset1 = font_facade.get_font_asset("OpenSymbol"); +		std::cout << asset1.get_path() << std::endl; +		std::unique_ptr<Text> label2 = std::make_unique<Text>( +			1, vec2(100, 100), vec2(0, 0), "fsaafdafsdafsdafsdasfdds", Text::Data{}); +		Asset asset = Asset("test test"); +		label->font.emplace(asset); +		std::cout << label->font.value().get_path() << std::endl; +		// label2->font = std::make_optional(asset); +		// std::cout << "Path: " << label2->font.get_path() << std::endl; +		ResourceManager & resource_mgr = mediator.resource_manager; +		const Font & res = resource_manager.get<Font>(label->font.value()); +		// TTF_Font * test_font = res.get_font(); +		// if (test_font == NULL) { +		// 	std::cout << "error with font" << std::endl; +		// } else { +		// 	std::cout << "correct font retrieved" << std::endl; +		// } +	} catch (const std::exception & e) { +		std::cout << "Standard exception thrown: " << e.what() << std::endl; +	} + +	return 0; +} diff --git a/src/example/replay.cpp b/src/example/replay.cpp new file mode 100644 index 0000000..82fd478 --- /dev/null +++ b/src/example/replay.cpp @@ -0,0 +1,84 @@ +#include <crepe/api/Config.h> +#include <crepe/api/Engine.h> +#include <crepe/api/Script.h> + +using namespace crepe; +using namespace std; + +class AnimationScript : public Script { +	Transform * transform; +	float t = 0; + +	void init() { transform = &get_component<Transform>(); } + +	void update() { +		t += 0.05; +		transform->position = {sin(t), cos(t)}; +	} +}; + +class Timeline : public Script { +	unsigned i = 0; +	recording_t recording; + +	void update() { +		switch (i++) { +			default: +				break; +			case 10: +				logf("record start"); +				replay.record_start(); +				break; +			case 60: +				logf("record end, playing recording"); +				this->recording = replay.record_end(); +				replay.play(this->recording); +				break; +			case 61: +				logf("done, releasing recording"); +				replay.release(this->recording); +				break; +			case 72: +				logf("exit"); +				queue_event<ShutDownEvent>(); +				break; +		}; +	} +}; + +class TestScene : public Scene { +public: +	using Scene::Scene; + +	void load_scene() { +		Mediator & mediator = this->mediator; +		ComponentManager & mgr = mediator.component_manager; + +		GameObject cam = mgr.new_object("cam"); +		cam.add_component<Camera>(ivec2{640, 480}, vec2{3, 3}, +								  Camera::Data{ +									  .bg_color = Color::WHITE, +								  }); + +		GameObject square = mgr.new_object("square"); +		square.add_component<Sprite>(Asset{"asset/texture/square.png"}, Sprite::Data{ +																			.size = {0.5, 0.5}, +																		}); +		square.add_component<BehaviorScript>().set_script<AnimationScript>(); + +		GameObject scapegoat = mgr.new_object(""); +		scapegoat.add_component<BehaviorScript>().set_script<Timeline>(); +	} + +	string get_name() const { return "scene1"; } +}; + +int main(int argc, char * argv[]) { +	Config & cfg = Config::get_instance(); +	cfg.log.level = Log::Level::DEBUG; + +	Engine engine; + +	engine.add_scene<TestScene>(); +	return engine.main(); +}  |