kaliber/src/engine/image_quad.h

60 lines
1.3 KiB
C
Raw Normal View History

2020-04-13 11:24:53 +00:00
#ifndef IMAGE_QUAD_H
#define IMAGE_QUAD_H
#include "../base/vecmath.h"
#include "animatable.h"
#include <array>
#include <memory>
#include <string>
2020-04-13 11:24:53 +00:00
namespace eng {
class Texture;
class ImageQuad : public Animatable {
public:
ImageQuad() = default;
~ImageQuad() override = default;
void Create(const std::string& asset_name,
2020-04-13 11:24:53 +00:00
std::array<int, 2> num_frames = {1, 1},
int frame_width = 0,
int frame_height = 0);
void Destory();
void AutoScale();
// Animatable interface.
void SetFrame(size_t frame) override;
size_t GetFrame() const override { return current_frame_; }
size_t GetNumFrames() const override;
void SetColor(const base::Vector4& color) override { color_ = color; }
base::Vector4 GetColor() const override { return color_; }
// Drawable interface.
void Draw(float frame_frac) override;
2020-04-13 11:24:53 +00:00
private:
std::shared_ptr<Texture> texture_;
size_t current_frame_ = 0;
std::array<int, 2> num_frames_ = {1, 1}; // horizontal, vertical
int frame_width_ = 0;
int frame_height_ = 0;
base::Vector4 color_ = {1, 1, 1, 1};
std::string asset_name_;
2020-04-13 11:24:53 +00:00
float GetFrameWidth() const;
float GetFrameHeight() const;
base::Vector2 GetUVOffset(int frame) const;
};
} // namespace eng
#endif // IMAGE_QUAD_H