实现NPC交互时的绿色高亮效果,通过InteractionHighlightSprite类实现 重构NpcAnimation支持复合纹理渲染,优化高亮效果的性能 添加ShaderManager获取所有加载Shader的方法,优化渲染器uniform更新逻辑
57 lines
1.8 KiB
C++
57 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "npc/NpcDataLoader.h"
|
|
#include <frostbite2D/2d/actor.h>
|
|
#include <frostbite2D/2d/canvas_actor.h>
|
|
#include <frostbite2D/animation/animation.h>
|
|
#include <string>
|
|
|
|
namespace frostbite2D {
|
|
|
|
class NpcAnimation : public Actor {
|
|
public:
|
|
struct CompositeFrameInfo {
|
|
bool valid = false;
|
|
Rect localBounds;
|
|
Vec2 originInTexture = Vec2::Zero();
|
|
Vec2 groundAnchorInTexture = Vec2::Zero();
|
|
int width = 1;
|
|
int height = 1;
|
|
};
|
|
|
|
bool Init(const npc::NpcConfig& config);
|
|
void Update(float deltaTime) override;
|
|
void Render() override;
|
|
void SetDirection(int direction);
|
|
bool IsReady() const { return displayAnimation_ != nullptr; }
|
|
bool IsAnimationFinished() const;
|
|
const std::string& GetAnimationPath() const { return animationPath_; }
|
|
bool GetDisplayLocalBounds(Rect& outBounds) const;
|
|
bool EnsureCompositeTextureReady();
|
|
bool HasCompositeTexture() const;
|
|
Ptr<Texture> GetCompositeTexture() const;
|
|
Vec2 GetCompositeTextureSize() const;
|
|
Vec2 GetCompositeGroundAnchorInTexture() const;
|
|
uint64 GetCompositeVersion() const { return compositeVersion_; }
|
|
|
|
private:
|
|
CompositeFrameInfo ComputeCompositeFrameInfo(int direction) const;
|
|
CompositeFrameInfo GetCurrentCompositeFrameInfo() const { return compositeFrameInfo_; }
|
|
uint64 CaptureCurrentRenderSignature() const;
|
|
void MarkCompositeDirty();
|
|
void UpdateCompositeCamera();
|
|
void RefreshCompositeTextureIfNeeded();
|
|
void RenderCurrentAnimationToCompositeCanvas();
|
|
|
|
RefPtr<Animation> displayAnimation_ = nullptr;
|
|
RefPtr<CanvasActor> compositeCanvas_ = nullptr;
|
|
CompositeFrameInfo compositeFrameInfo_;
|
|
std::string animationPath_;
|
|
int direction_ = 1;
|
|
bool compositeDirty_ = true;
|
|
uint64 compositeVersion_ = 0;
|
|
uint64 lastCompositeSignature_ = 0;
|
|
};
|
|
|
|
} // namespace frostbite2D
|