shooter/engine/Mesh.h

50 lines
1.6 KiB
C
Raw Normal View History

2021-09-13 15:53:43 +03:00
//
// Created by Иван Ильин on 13.01.2021.
//
#ifndef ENGINE_MESH_H
#define ENGINE_MESH_H
2021-10-28 16:58:02 +03:00
#include <utility>
2021-09-13 15:53:43 +03:00
#include <vector>
#include "Triangle.h"
#include <SFML/Graphics.hpp>
#include "Object.h"
2021-10-02 20:36:07 +03:00
class Mesh : public Object {
private:
std::vector<Triangle> _tris;
sf::Color _color = sf::Color(255, 245, 194);
2021-09-13 15:53:43 +03:00
bool _visible = true;
Mesh& operator*=(const Matrix4x4& matrix4X4);
2021-09-13 15:53:43 +03:00
public:
2021-10-28 16:58:02 +03:00
explicit Mesh(ObjectNameTag nameTag) : Object(std::move(nameTag)) {};
Mesh& operator=(const Mesh& mesh) = delete;
2021-10-29 23:44:37 +03:00
Mesh(const Mesh& mesh) = default;
2021-09-13 15:53:43 +03:00
2021-10-28 16:58:02 +03:00
explicit Mesh(ObjectNameTag nameTag, const std::vector<Triangle>& tries);
explicit Mesh(ObjectNameTag nameTag, const std::string& filename, const Vec3D& scale = Vec3D{1, 1, 1});
2021-09-13 15:53:43 +03:00
2021-10-28 16:58:02 +03:00
void loadObj(const std::string& filename, const Vec3D& scale = Vec3D{1, 1, 1});
2021-09-13 15:53:43 +03:00
[[nodiscard]] std::vector<Triangle>const &triangles() const { return _tris; }
2021-10-02 20:36:07 +03:00
[[nodiscard]] std::vector<Triangle>& triangles() { return _tris; }
void setTriangles(const std::vector<Triangle>& t);
2021-09-13 15:53:43 +03:00
[[nodiscard]] int size() const { return _tris.size()*3; }
2021-09-13 15:53:43 +03:00
2021-10-02 20:36:07 +03:00
[[nodiscard]] sf::Color color() const { return _color; }
void setColor(const sf::Color& c);
2021-09-13 15:53:43 +03:00
void setVisible(bool visibility) { _visible = visibility; }
[[nodiscard]] bool isVisible() const { return _visible; }
2021-10-16 20:22:55 +03:00
~Mesh() override;
2021-10-28 16:58:02 +03:00
Mesh static Obj(ObjectNameTag nameTag, const std::string& filename);
Mesh static LineTo(ObjectNameTag nameTag, const Vec3D& from, const Vec3D& to, double line_width = 0.1, const sf::Color& color = {150, 150, 150, 100});
2021-09-13 15:53:43 +03:00
};
#endif //INC_3DZAVR_MESH_H