Skip to content
Snippets Groups Projects
Commit 7f1850cf authored by BATON Theau's avatar BATON Theau
Browse files

Update Physic and Graphic Resolvers

parent af9ae943
No related branches found
No related tags found
No related merge requests found
#include "GraphicResolver.hpp" #include "GraphicResolver.hpp"
namespace megu::kernel { namespace megu::kernel {
void GraphicResolver::resolve(double time, GraphicEngine &, const Identifiable_Map<Props> & props) { void GraphicResolver::resolve(Kernel & kernel, GraphicEngine & engine, double time) {
for(auto & [id, object] : props) { for(auto & component : this->components()) {
auto * component = object->getGraphicComponent(); component.get().update(time);
if(component != nullptr) {
component->update(time);
}
} }
} }
} }
\ No newline at end of file
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
#include <kernel/back/props/Props.hpp> #include <kernel/back/props/Props.hpp>
namespace megu::kernel { namespace megu::kernel {
class GraphicResolver : public Resolver<GraphicEngine, Props> { class GraphicResolver : public Resolver<GraphicEngine, Graphical<GraphicEngine>> {
public: public:
void resolve(double, GraphicEngine &, const Identifiable_Map<Props> &) override; void resolve(Kernel &, GraphicEngine &, double) override;
}; };
} }
\ No newline at end of file
#include "PhysicResolver.hpp" #include "PhysicResolver.hpp"
namespace megu::kernel { namespace megu::kernel {
void PhysicResolver::resolve(double time, PhysicEngine & engine, const Identifiable_Map<Props> & props) { void PhysicResolver::resolve(Kernel & kernel, PhysicEngine & engine, double time) {
auto & collisions = engine.get().collision(); auto & collisions = engine.get().collision();
for(auto & collision : collisions) { for(auto & collision : collisions) {
const Tangible & source = collision.source(); auto source_comp = this->get(collision.source());
const Tangible & target = collision.target(); auto target_comp = this->get(collision.target());
if(props.contains(source.id()) && props.contains(target.id())) {
Props * props_source = props.at(source.id());
Props * props_target = props.at(target.id());
auto * sComponent = props_source->getPhysicComponent();
auto * tComponent = props_target->getPhysicComponent();
if(sComponent != nullptr && tComponent != nullptr) {
sComponent->on_collide(time, target, *tComponent);
}
if(source_comp.has_value() && target_comp.has_value()) {
source_comp.value().get().on_collide(kernel, engine, target_comp.value().get(), time);
} }
} }
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
#include <kernel/back/props/Props.hpp> #include <kernel/back/props/Props.hpp>
namespace megu::kernel { namespace megu::kernel {
class PhysicResolver : public Resolver<PhysicEngine, Props> { class PhysicResolver : public Resolver<PhysicEngine, Physical<PhysicEngine>> {
public: public:
void resolve(double, PhysicEngine &, const Identifiable_Map<Props> &) override; void resolve(Kernel &, PhysicEngine &, double) override;
}; };
} }
\ No newline at end of file
#pragma once #pragma once
#include <utility/Identifiable.hpp> #include <utility/Identifiable.hpp>
#include <kernel/back/props/Component.hpp>
#include <engine/utility/ref_set.hpp>
#include <optional>
namespace megu::kernel { namespace megu::kernel {
template <class E, class O> template <class E, class O>
class Resolver { class Resolver {
public: public:
virtual void resolve(double, E &, const Identifiable_Map<O> &) = 0; inline ref_set<O> & components() {return this->_components;}
void add(O &);
void erase(const Identifiable &);
std::optional<std::reference_wrapper<O>> get(const Identifiable &);
virtual void resolve(Kernel &, E &, double) = 0;
private:
ref_set<O> _components;
}; };
} }
#include "Resolver.tpp"
\ No newline at end of file
#include "Resolver.hpp"
namespace megu::kernel {
template <class E, class O>
void Resolver<E, O>::add(O & c) {
this->_components.insert(c);
}
template <class E, class O>
void Resolver<E, O>::erase(const Identifiable & c) {
this->_components.erase(c);
}
template <class E, class O>
std::optional<std::reference_wrapper<O>> Resolver<E, O>::get(const Identifiable & c) {
for(auto & comp : this->_components) {
if(comp.get().id() == c.id()) {
return comp;
}
}
return {};
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment