diff options
Diffstat (limited to 'src/example')
-rw-r--r-- | src/example/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/example/particle.cpp (renamed from src/example/particel.cpp) | 47 |
2 files changed, 32 insertions, 19 deletions
diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt index 36ceba1..cbf8e31 100644 --- a/src/example/CMakeLists.txt +++ b/src/example/CMakeLists.txt @@ -15,5 +15,5 @@ endfunction() add_example(audio_internal) add_example(components_internal) add_example(script) -add_example(particel) -target_link_libraries(particel PUBLIC SDL2) +add_example(particle) +target_link_libraries(particle PUBLIC SDL2) diff --git a/src/example/particel.cpp b/src/example/particle.cpp index c66bbef..fc56230 100644 --- a/src/example/particel.cpp +++ b/src/example/particle.cpp @@ -5,9 +5,13 @@ #include "ParticleEmitter.h" #include "ParticleSystem.h" #include "Particle.h" +#include <crepe/Component.h> +#include <crepe/ComponentManager.h> +#include <crepe/GameObject.h> #include <chrono> using namespace crepe; +using namespace std; const int WINDOW_WIDTH = 800; const int WINDOW_HEIGHT = 600; @@ -16,10 +20,15 @@ int main(int argc, char* argv[]) { SDLApp app(WINDOW_WIDTH, WINDOW_HEIGHT); if (!app.initialize()) { - std::cerr << "Failed to initialize SDLApp." << std::endl; + cerr << "Failed to initialize SDLApp." << endl; return 1; } + auto & mgr = ComponentManager::get_instance(); + GameObject * game_object[1]; + game_object[0] = new GameObject(0, "Name", "Tag", 0); + + ParticleSystem particleSystem; unsigned int maxParticles = 100; // maximum number of particles @@ -32,36 +41,40 @@ int main(int argc, char* argv[]) { float endLifespan = 2.0f; // ending lifespan of particles // Vector to hold all the emitters - std::vector<ParticleEmitter> emitters; + // vector<ParticleEmitter> emitters; + game_object[0]->add_component<ParticleEmitter>(maxParticles, emissionRate, speed, speedOffset, angle, angleOffset, beginLifespan, endLifespan); + + std::vector<std::reference_wrapper<ParticleEmitter>> emitters = mgr.get_components_by_type<ParticleEmitter>(); + // Loop to create 1000 emitters - for (unsigned int i = 0; i < 1000; ++i) { - ParticleEmitter emitter(maxParticles, emissionRate, speed, speedOffset, angle, angleOffset, beginLifespan, endLifespan); + // for (unsigned int i = 0; i < 1000; ++i) { + // ParticleEmitter emitter(maxParticles, emissionRate, speed, speedOffset, angle, angleOffset, beginLifespan, endLifespan); - // Set a position for each emitter, modifying the position for demonstration - emitter.m_position = {static_cast<float>(200 + (i % 100)), static_cast<float>(200 + (i / 100) * 10)}; // Adjust position for each emitter + // // Set a position for each emitter, modifying the position for demonstration + // emitter.m_position = {static_cast<float>(200 + (i % 100)), static_cast<float>(200 + (i / 100) * 10)}; // Adjust position for each emitter - emitters.push_back(emitter); // Add the emitter to the vector - } + // emitters.push_back(emitter); // Add the emitter to the vector + // } float deltaTime = 0.1f; bool running = true; - std::cout << "start loop " << std::endl; + cout << "start loop " << endl; while (running) { app.handleEvents(running); // Start timing - auto start = std::chrono::high_resolution_clock::now(); + auto start = chrono::high_resolution_clock::now(); particleSystem.update(deltaTime, emitters); // update particle system with delta time and emitters // End timing - auto end = std::chrono::high_resolution_clock::now(); - std::chrono::duration<float, std::milli> duration = end - start; // get duration in milliseconds + auto end = chrono::high_resolution_clock::now(); + chrono::duration<float, milli> duration = end - start; // get duration in milliseconds - std::cout << "Update took " << duration.count() << " ms" << std::endl; + cout << "Update took " << duration.count() << " ms" << endl; app.clearScreen(); - start = std::chrono::high_resolution_clock::now(); + start = chrono::high_resolution_clock::now(); // render particles using the drawSquare method from SDLApp for (const ParticleEmitter& emitter : emitters) { for (const Particle& particle : emitter.particles) { @@ -71,12 +84,12 @@ int main(int argc, char* argv[]) { app.presentScreen(); - end = std::chrono::high_resolution_clock::now(); + end = chrono::high_resolution_clock::now(); duration = end - start; // get duration in milliseconds - std::cout << "screen took " << duration.count() << " ms" << std::endl; + cout << "screen took " << duration.count() << " ms" << endl; - std::this_thread::sleep_for(std::chrono::milliseconds(20)); // simulate ~50 FPS + this_thread::sleep_for(chrono::milliseconds(20)); // simulate ~50 FPS } app.cleanUp(); |