gba-bitmap-engine/engine/include/libgba-sprite-engine/mesh.h

71 lines
1.6 KiB
C
Raw Normal View History

//
// Created by Wouter Groeneveld on 08/07/20.
//
#ifndef GBA_BITMAP_ENGINE_PROJECT_MESH_H
#define GBA_BITMAP_ENGINE_PROJECT_MESH_H
#include "vectorfx.h"
#include <vector>
#include <memory>
2020-07-10 14:41:32 +02:00
typedef struct {
int a;
int b;
int c;
} Face;
class Mesh {
private:
VectorFx pos;
VectorFx rot;
2020-07-10 14:41:32 +02:00
u8 cIndex;
bool wired;
std::vector<std::unique_ptr<VectorFx>> verticesArr;
2020-07-10 14:41:32 +02:00
std::vector<Face> facesArr;
public:
void add(VectorFx v);
2020-07-10 14:41:32 +02:00
void addFace(Face f);
inline std::vector<std::unique_ptr<VectorFx>> const& vertices() const {
return verticesArr;
}
2020-07-10 11:11:49 +02:00
2020-07-10 14:41:32 +02:00
inline std::vector<Face> const& faces() const {
return facesArr;
}
void setPosition(VectorFx position) { pos = position; }
2020-07-10 11:11:49 +02:00
inline VectorFx &position() { return pos; }
inline VectorFx &rotation() { return rot; }
2020-07-10 14:41:32 +02:00
inline void wire() { wired = true; }
inline void unwire() { wired = false; }
inline bool isWired() const { return wired; }
inline u8 colorIndex() const { return cIndex; }
2020-07-10 11:11:49 +02:00
inline FIXED rotx() const { return rot.x(); }
inline FIXED roty() const { return rot.y(); }
inline FIXED rotz() const { return rot.z(); }
inline void resetRotation() {
rot.setX(0);
rot.setY(0);
}
2020-07-10 11:11:49 +02:00
void rotateTo(FIXED x, FIXED y) {
rot.setX(x);
rot.setY(y);
}
inline void rotate(FIXED x, FIXED y) {
rot.setX(rot.x() + x);
rot.setY(rot.y() + y);
}
2020-07-10 14:41:32 +02:00
explicit Mesh() : pos(VectorFx()), rot(VectorFx()), cIndex(1), wired(true) {}
Mesh(const Mesh&) = delete;
Mesh& operator=(const Mesh&) = delete;
};
#endif //GBA_BITMAP_ENGINE_PROJECT_MESH_H