-#include <msp/gl/transform.h>
+#include <msp/gl/meshbuilder.h>
#include "geometry.h"
#include "part.h"
+#include "partcache.h"
#include "resources.h"
using namespace std;
Part::Part(const string &n):
name(n)
-{
- for(unsigned i=0; i<N_STATES_; ++i)
- graphic[i] = 0;
-}
+{ }
const Graphic *Part::get_graphic(State state) const
{
return graphic[state];
}
-void Part::render(const Geometry &parent, State state) const
+void Part::build(const Geometry &parent, State state, PartCache &cache) const
{
- if(!graphic[state])
+ if(!graphic[state] || !graphic[state]->get_texture())
return;
Geometry rgeom = geom;
align.apply(rgeom, parent, margin);
- GL::translate(rgeom.x, rgeom.y, 0);
- graphic[state]->render(rgeom.w, rgeom.h);
+ GL::MeshBuilder bld(cache.create_mesh(*this, *graphic[state]->get_texture()));
+ bld.transform(GL::Matrix::translation(rgeom.x, rgeom.y, 0));
+ graphic[state]->build(rgeom.w, rgeom.h, bld);
}
}
}
+void Part::Loader::graphic_normal(const string &n)
+{
+ graphic(NORMAL, n);
+}
+
void Part::Loader::graphic(State s, const string &n)
{
- Graphic *grph = get_collection().get<Graphic>(n);
+ Graphic *grph = (n.empty() ? nullptr : &get_collection().get<Graphic>(n));
for(int i=0; i<N_STATES_; ++i)
if((i&s)==s)
obj.graphic[i] = grph;