diff options
| author | JAROWMR <jarorutjes07@gmail.com> | 2024-12-19 12:55:04 +0100 | 
|---|---|---|
| committer | JAROWMR <jarorutjes07@gmail.com> | 2024-12-19 12:55:04 +0100 | 
| commit | fe396c458b38ee209dd4c1f3ba4d053bef20f57a (patch) | |
| tree | 129c0c74263336c24fb0c24ec6ab187295188d2e /src | |
| parent | d355d374f9e3182750b2cfce1036d0cc011d60dd (diff) | |
tested system, added roation to emitter
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/system/ParticleSystem.cpp | 2 | ||||
| -rw-r--r-- | src/crepe/system/RenderSystem.cpp | 2 | ||||
| -rw-r--r-- | src/example/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/example/collisiontest.cpp | 168 | ||||
| -rw-r--r-- | src/example/game.cpp | 19 | 
5 files changed, 183 insertions, 9 deletions
diff --git a/src/crepe/system/ParticleSystem.cpp b/src/crepe/system/ParticleSystem.cpp index 3183fd7..31c1800 100644 --- a/src/crepe/system/ParticleSystem.cpp +++ b/src/crepe/system/ParticleSystem.cpp @@ -51,7 +51,7 @@ void ParticleSystem::emit_particle(ParticleEmitter & emitter, const Transform &  	vec2 initial_position = AbsolutePosition::get_position(transform, emitter.data.offset);  	float random_angle -		= this->generate_random_angle(emitter.data.min_angle, emitter.data.max_angle); +		= this->generate_random_angle(emitter.data.min_angle+transform.rotation, emitter.data.max_angle+transform.rotation);  	float random_speed  		= this->generate_random_speed(emitter.data.min_speed, emitter.data.max_speed); diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp index 1091c3f..d76a122 100644 --- a/src/crepe/system/RenderSystem.cpp +++ b/src/crepe/system/RenderSystem.cpp @@ -98,7 +98,7 @@ bool RenderSystem::render_particle(const Sprite & sprite, const double & scale)  				.sprite = sprite,  				.texture = res,  				.pos = p.position, -				.angle = p.angle+sprite.data.angle_offset, +				.angle = p.angle,  				.scale = scale,  			});  		} diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt index f62414e..2ee3051 100644 --- a/src/example/CMakeLists.txt +++ b/src/example/CMakeLists.txt @@ -22,3 +22,4 @@ add_example(button)  add_example(loadfont)  add_example(FontExample)  add_example(AITest) +add_example(collisiontest) diff --git a/src/example/collisiontest.cpp b/src/example/collisiontest.cpp new file mode 100644 index 0000000..95999c6 --- /dev/null +++ b/src/example/collisiontest.cpp @@ -0,0 +1,168 @@ +#include "api/CircleCollider.h" +#include "api/ParticleEmitter.h" +#include "api/Scene.h" +#include "manager/ComponentManager.h" +#include "manager/Mediator.h" +#include "types.h" +#include <cmath> +#include <crepe/api/BoxCollider.h> +#include <crepe/api/Camera.h> +#include <crepe/api/Color.h> +#include <crepe/api/Event.h> +#include <crepe/api/GameObject.h> +#include <crepe/api/LoopManager.h> +#include <crepe/api/Rigidbody.h> +#include <crepe/api/Script.h> +#include <crepe/api/Sprite.h> +#include <crepe/api/Transform.h> +#include <crepe/api/Vector2.h> + +using namespace crepe; + +using namespace std; + +class MyScript1 : public Script { +	bool flip = false; +	bool movement = false; +	bool oncollision(const CollisionEvent & test) { +		Log::logf("Box {} script on_collision()", test.info.self.metadata.game_object_id); +		return true; +	} +	bool keypressed(const KeyPressEvent & test) { +		Log::logf("Box script keypressed()"); +		switch (test.key) { +			case Keycode::A: { +				Rigidbody & tf = this->get_component<Rigidbody>(); +				Transform & tr = this->get_component<Transform>(); +				if(movement) tf.data.linear_velocity.x -= 1; +				else tr.position.x -= 1; +				break; +			} +			case Keycode::W: { +				Rigidbody & tf = this->get_component<Rigidbody>(); +				Transform & tr = this->get_component<Transform>(); +				if(movement) tf.data.linear_velocity.y -= 1; +				else tr.position.y -= 1; +				break; +			} +			case Keycode::S: { +				Rigidbody & tf = this->get_component<Rigidbody>(); +				Transform & tr = this->get_component<Transform>(); +				if(movement) tf.data.linear_velocity.y += 1; +				else tr.position.y += 1; +				break; +			} +			case Keycode::D: { +				Rigidbody & tf = this->get_component<Rigidbody>(); +				Transform & tr = this->get_component<Transform>(); +				if(movement) tf.data.linear_velocity.x += 1; +				else tr.position.x += 1; +				break; +			} +			case Keycode::E: { +				if (flip) { +					flip = false; +					this->get_component<BoxCollider>().active = true; +					this->get_components<Sprite>()[0].get().active = true; +					this->get_component<CircleCollider>().active = false; +					this->get_components<Sprite>()[1].get().active = false; +				} else { +					flip = true; +					this->get_component<BoxCollider>().active = false; +					this->get_components<Sprite>()[0].get().active = false; +					this->get_component<CircleCollider>().active = true; +					this->get_components<Sprite>()[1].get().active = true; +				} + +				break; +			} +			case Keycode::Q: { +				if(movement){ +					movement = false;  +					Rigidbody & tf = this->get_component<Rigidbody>(); +					tf.data.linear_velocity = {0,0}; +				} +				else{ +					movement = true; +				} + +			default: +				break; +			} +		return false; +	} + +	void init() { +		Log::logf("init"); +		subscribe<CollisionEvent>( +			[this](const CollisionEvent & ev) -> bool { return this->oncollision(ev); }); +		subscribe<KeyPressEvent>( +			[this](const KeyPressEvent & ev) -> bool { return this->keypressed(ev); }); +	} +	void update() { +		Rigidbody & tf = this->get_component<Rigidbody>(); +		Log::logf("linear_velocity.x {}", tf.data.linear_velocity.x); +		Log::logf("linear_velocity.y {}", tf.data.linear_velocity.y); +		// tf.data.linear_velocity = {0,0}; +	} +}; + + + +class ConcreteScene1 : public Scene { +public: +	using Scene::Scene; + +	void load_scene() { + +		Color color(0, 0, 0, 255); + +		float screen_size_width = 320; +		float screen_size_height = 240; +		float world_collider = 1000; +		//define playable world +		GameObject world = new_object( +			"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); +		world.add_component<Camera>( +			ivec2{static_cast<int>(screen_size_width), static_cast<int>(screen_size_height)}, +			vec2{screen_size_width, screen_size_height}, +			Camera::Data{ +				.bg_color = Color::WHITE, +				.zoom = 1, +			}); + +		GameObject game_object1 = new_object( +			"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2+60}, 0, 1); +		game_object1.add_component<Rigidbody>(Rigidbody::Data{ +			.gravity_scale = 0, +			.body_type = Rigidbody::BodyType::KINEMATIC, +			.elastisity_coefficient = 1, +		}); +		// add box with boxcollider +		game_object1.add_component<BoxCollider>(vec2{20, 20}); +		game_object1.add_component<BehaviorScript>().set_script<MyScript1>(); + +		Asset img1{"asset/texture/test_ap43.png"}; +		game_object1.add_component<Sprite>(img1, Sprite::Data{ +													 .size = {20, 20}, +													 .position_offset = {0, 0}, +												 }); + +		//add circle with cirlcecollider deactiveated +		game_object1.add_component<CircleCollider>(10).active = false; +		Asset img2{"asset/texture/circle.png"}; +		game_object1.add_component<Sprite>(img2, Sprite::Data{  +													 .size = {20, 20}, +													 .position_offset = {0, 0}, }).active = false; +	} + +	string get_name() const { return "scene1"; } +}; + +int main(int argc, char * argv[]) { + +	LoopManager gameloop; +	gameloop.add_scene<ConcreteScene1>(); +	gameloop.start(); +	return 0; +}; diff --git a/src/example/game.cpp b/src/example/game.cpp index ce2f351..2660055 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -220,11 +220,11 @@ public:  			});  		GameObject game_object1 = new_object( -			"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2+60}, 0, 1); +			"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2+20}, 0, 1);  		game_object1.add_component<Rigidbody>(Rigidbody::Data{  			.mass = 1,  			.gravity_scale = 0, -			.body_type = Rigidbody::BodyType::KINEMATIC, +			.body_type = Rigidbody::BodyType::STATIC,  			.linear_velocity = {0, 0},  			.constraints = {0, 0, 0},  			.elastisity_coefficient = 1, @@ -253,11 +253,11 @@ public:  			= false;  		GameObject game_object2 = new_object( -			"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); +			"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 90, 1);  		game_object2.add_component<Rigidbody>(Rigidbody::Data{  			.mass = 1,  			.gravity_scale = 0, -			.body_type = Rigidbody::BodyType::DYNAMIC, +			.body_type = Rigidbody::BodyType::STATIC,  			.linear_velocity = {0, 0},  			.constraints = {0, 0, 0},  			.elastisity_coefficient = 1, @@ -268,6 +268,9 @@ public:  		game_object2.add_component<Sprite>(img1, Sprite::Data{  													 .size = {20, 20}, +													 .angle_offset = 45, +													 .scale_offset = 1, +													 .position_offset = {0,20},  												 });  		//add circle with cirlcecollider deactiveated @@ -280,12 +283,14 @@ public:  								   })  			.active  			= false; -		Asset img5{"asset/texture/square.png"}; +		Asset img5{"asset/texture/test_ap43.png"};  		GameObject particle = new_object( -			"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); +			"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 90, 1);  		auto & particle_image = particle.add_component<Sprite>(img5, Sprite::Data{ -																		 .size = {5, 5}, +																		 .size = {20, 20}, +																		 .angle_offset = 45, +																		 .scale_offset = 2,  																	 });  		auto & test  			= particle.add_component<ParticleEmitter>(particle_image, ParticleEmitter::Data{  |