Extra2D/include/scene/components/sprite_renderer.h

127 lines
3.1 KiB
C
Raw Permalink Normal View History

#pragma once
#include <scene/component.h>
#include <renderer/render_types.h>
#include <types/math/color.h>
#include <assets/handle.h>
namespace extra2d {
// 前向声明
class Material;
class Texture;
/**
* @brief
*
* 2D精灵
*
* 使
* -
* - 使
*
* 使
* @code
* // 方式1使用完整材质推荐
* auto material = makePtr<Material>();
* material->setShader(customShader);
* material->setTexture("uTexture", textureHandle, 0);
* material->setColor("uTintColor", Color::Red);
* Handle<Material> matHandle = assets->load<Material>("material.mat");
* sprite->setMaterial(matHandle);
*
* // 方式2只设置纹理使用默认材质
* sprite->setTexture(textureHandle);
* @endcode
*/
class SpriteRenderer : public Component {
public:
static constexpr const char* TYPE_NAME = "SpriteRenderer";
/**
* @brief
*/
SpriteRenderer();
/**
* @brief
* @return
*/
const char* getTypeName() const override { return TYPE_NAME; }
/**
* @brief
* @param owner
*/
void onAttach(Node* owner) override;
// ========================================
// 材质设置(推荐方式)
// ========================================
/**
* @brief
*
*
* @param material
*/
void setMaterial(Handle<Material> material);
/**
* @brief
* @return
*/
Handle<Material> getMaterial() const { return material_; }
// ========================================
// 纹理设置(便捷方式)
// ========================================
/**
* @brief
*
* 使
*
* @param texture
*/
void setTexture(Handle<Texture> texture);
/**
* @brief
* @return
*/
Handle<Texture> getTexture() const { return texture_; }
// ========================================
// 颜色(顶点颜色)
// ========================================
/**
* @brief
* @param color
*/
void setColor(const Color& color);
/**
* @brief
* @return
*/
Color getColor() const { return color_; }
// ========================================
// 渲染
// ========================================
/**
* @brief
*/
void render() override;
private:
Handle<Material> material_; // 材质句柄
Handle<Texture> texture_; // 纹理句柄(便捷方式)
Color color_ = Color::White; // 顶点颜色
};
} // namespace extra2d