Polyphase Game Engine
Loading...
Searching...
No Matches
AnimatedSprite3d.h
Go to the documentation of this file.
1#pragma once
2
3#include "Nodes/3D/Node3d.h"
5#include "AssetRef.h"
6
7#include "glm/glm.hpp"
8
9#include <string>
10#include <vector>
11
12class Texture;
13class Material;
14class SpriteAnimation;
15
16// Drives a connected Material's texture parameters from a SpriteAnimator-style
17// playback. Per-channel toggles let the user route the current frame to any of
18// the three standard texture slots (Diffuse / Alpha / Emission). The atlas UV
19// rect is also pushed as a vec4 parameter so atlas-mode animations work for
20// shaders that sample the atlas via UV transform.
21//
22// Common pattern: place this next to a StaticMesh3D that uses the same Material.
23// The animator updates the material each frame, and any meshes sharing that
24// material will animate.
26{
27public:
28
30
32 virtual ~AnimatedSprite3D();
33
34 virtual const char* GetTypeName() const override;
35 virtual void GatherProperties(std::vector<Property>& outProps) override;
36
37 virtual void Create() override;
38 virtual void Destroy() override;
39 virtual void Start() override;
40 virtual void Tick(float deltaTime) override;
41 virtual void EditorTick(float deltaTime) override;
42
43 // Playback API mirrors SpriteAnimator.
44 void Play();
45 void Pause();
46 void Stop();
47 void PlayAnimation(const std::string& name);
48 void SetFrame(int32_t frameIndex);
49 bool AnimateTo(int32_t targetFrame, bool pauseOnFinished, const ScriptFunc& onFinished);
50 bool AnimateToProgress(float progress, bool pauseOnFinished, const ScriptFunc& onFinished);
51 void CancelAnimateTo() { mPlayback.CancelAnimateTo(); }
52 void SetSpeed(float speed);
53 float GetSpeed() const { return mPlayback.mPlaybackSpeed; }
54 bool IsPlaying() const { return mPlayback.mPlaying; }
55
56 void SetAutoPlay(bool v) { mPlayback.mAutoPlay = v; }
57 bool GetAutoPlay() const { return mPlayback.mAutoPlay; }
58 void SetLoopOverride(bool v) { mPlayback.mLoopOverride = v; }
59 bool GetLoopOverride() const { return mPlayback.mLoopOverride; }
60 void SetDefaultAnimation(const std::string& name) { mPlayback.mDefaultAnimation = name; }
61 const std::string& GetDefaultAnimation() const { return mPlayback.mDefaultAnimation; }
62
63 void AddAnimation(SpriteAnimation* asset) { mPlayback.AddAnimationAsset(asset); }
64 void AddAnimation(const std::string& path) { mPlayback.AddAnimationByPath(path); }
65 void CreateAnimation(const std::string& name) { mPlayback.CreateAnimation(name); }
66 void CreateAnimation(const std::string& name, const std::vector<Texture*>& frames)
67 { mPlayback.CreateAnimation(name, frames); }
68 void AddImage(const std::string& name, Texture* tex) { mPlayback.AddImage(name, tex); }
69 void AddImage(const std::string& name, const std::string& path)
70 { mPlayback.AddImage(name, path); }
71 void AddImages(const std::string& name, const std::vector<std::string>& paths)
72 { mPlayback.AddImages(name, paths); }
73 void RemoveAnimation(const std::string& name) { mPlayback.RemoveAnimation(name); }
74 bool HasAnimation(const std::string& name) const { return mPlayback.HasAnimation(name); }
75
76 float GetProgress() const { return mPlayback.GetProgress(); }
77 Texture* GetCurrentTexture() const { return mPlayback.GetCurrentTexture(); }
78 int32_t GetCurrentFrameIndex() const { return mPlayback.mCurrentFrame; }
79 const std::string& GetCurrentAnimationName() const { return mPlayback.mCurrentName; }
80
81 // Material targeting
82 void SetMaterial(Material* mat);
83 Material* GetMaterial() const;
84 void SetAffectDiffuse(bool v) { mAffectDiffuse = v; }
85 void SetAffectAlpha(bool v) { mAffectAlpha = v; }
86 void SetAffectEmission(bool v) { mAffectEmission = v; }
87 bool GetAffectDiffuse() const { return mAffectDiffuse; }
88 bool GetAffectAlpha() const { return mAffectAlpha; }
89 bool GetAffectEmission() const { return mAffectEmission; }
90
91 bool GetEditorPreview() const { return mEditorPreview; }
92 void SetEditorPreview(bool v) { mEditorPreview = v; }
93
94protected:
95
96 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
97
98 void ApplyCurrentFrameToMaterial();
99
101
102 // Target material + which texture slots the animation drives.
104 bool mAffectDiffuse = true;
105 bool mAffectAlpha = false;
106 bool mAffectEmission = false;
107
108 // For MaterialLite — indexed texture slots (0..3). MaterialLite doesn't
109 // expose named texture parameters; it has fixed slot indices that the
110 // shader samples in order. Defaults match a typical layout where slot 0
111 // is the base color, slot 1 the alpha mask, slot 2 the emissive.
112 int32_t mDiffuseSlot = 0;
113 int32_t mAlphaSlot = 1;
114 int32_t mEmissionSlot = 2;
115
116 // For atlas-mode SpriteAnimations on MaterialLite: which UV map (0 or 1)
117 // to push the per-frame UV scale/offset into. MaterialLite supports up
118 // to two independent UV maps so static and animated textures can coexist
119 // on the same material — assign the animated texture slot(s) to this UV
120 // map in MaterialLite's "UV Map N" property and any static slots to the
121 // other UV map.
122 int32_t mAtlasUvMap = 0;
123
124 // For full Material with custom-shader named params. Used only when the
125 // target Material is NOT a MaterialLite. Adjust to match whatever names
126 // your custom shader exposes.
127 std::string mDiffuseParamName = "DiffuseMap";
128 std::string mAlphaParamName = "AlphaMap";
129 std::string mEmissionParamName = "EmissionMap";
130
131 // If true, also push the current UV rect (u0, v0, u1, v1) as a Vector
132 // parameter so atlas-mode shaders can sample the right cell. Only fires
133 // for full Materials — MaterialLite has no custom parameters.
134 bool mPushUVRect = true;
135 std::string mUVRectParamName = "AnimUVRect";
136
137 // Editor-only preview controls.
138 bool mEditorPreview = false;
139 bool mEditorPlayButton = false;
140 bool mEditorStopButton = false;
141};
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition AnimatedSprite3d.h:26
float GetSpeed() const
Definition AnimatedSprite3d.h:53
AssetRef mMaterial
Definition AnimatedSprite3d.h:103
void RemoveAnimation(const std::string &name)
Definition AnimatedSprite3d.h:73
void SetDefaultAnimation(const std::string &name)
Definition AnimatedSprite3d.h:60
const std::string & GetDefaultAnimation() const
Definition AnimatedSprite3d.h:61
bool GetLoopOverride() const
Definition AnimatedSprite3d.h:59
SpriteAnimPlayback mPlayback
Definition AnimatedSprite3d.h:100
Texture * GetCurrentTexture() const
Definition AnimatedSprite3d.h:77
void SetLoopOverride(bool v)
Definition AnimatedSprite3d.h:58
void AddAnimation(SpriteAnimation *asset)
Definition AnimatedSprite3d.h:63
float GetProgress() const
Definition AnimatedSprite3d.h:76
bool GetAutoPlay() const
Definition AnimatedSprite3d.h:57
bool GetAffectEmission() const
Definition AnimatedSprite3d.h:89
void SetAffectDiffuse(bool v)
Definition AnimatedSprite3d.h:84
void SetAffectAlpha(bool v)
Definition AnimatedSprite3d.h:85
DECLARE_NODE(AnimatedSprite3D, Node3D)
bool HasAnimation(const std::string &name) const
Definition AnimatedSprite3d.h:74
void AddImage(const std::string &name, const std::string &path)
Definition AnimatedSprite3d.h:69
void SetAffectEmission(bool v)
Definition AnimatedSprite3d.h:86
bool GetAffectDiffuse() const
Definition AnimatedSprite3d.h:87
void CancelAnimateTo()
Definition AnimatedSprite3d.h:51
bool IsPlaying() const
Definition AnimatedSprite3d.h:54
const std::string & GetCurrentAnimationName() const
Definition AnimatedSprite3d.h:79
bool GetAffectAlpha() const
Definition AnimatedSprite3d.h:88
void AddImage(const std::string &name, Texture *tex)
Definition AnimatedSprite3d.h:68
void SetAutoPlay(bool v)
Definition AnimatedSprite3d.h:56
void AddAnimation(const std::string &path)
Definition AnimatedSprite3d.h:64
void AddImages(const std::string &name, const std::vector< std::string > &paths)
Definition AnimatedSprite3d.h:71
int32_t GetCurrentFrameIndex() const
Definition AnimatedSprite3d.h:78
void SetEditorPreview(bool v)
Definition AnimatedSprite3d.h:92
void CreateAnimation(const std::string &name, const std::vector< Texture * > &frames)
Definition AnimatedSprite3d.h:66
bool GetEditorPreview() const
Definition AnimatedSprite3d.h:91
void CreateAnimation(const std::string &name)
Definition AnimatedSprite3d.h:65
Definition AssetRef.h:18
Definition Datum.h:164
Definition Material.h:48
Definition Node3d.h:14
virtual void Create() override
Definition Node3d.cpp:96
virtual const char * GetTypeName() const override
Definition Node3d.cpp:119
virtual void Destroy() override
Definition Node3d.cpp:101
virtual void Tick(float deltaTime) override
Definition Node3d.cpp:114
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Node3d.cpp:124
virtual void EditorTick(float deltaTime)
Definition Node.cpp:563
virtual void Stop()
Definition Node.cpp:504
static bool HandlePropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Node.cpp:74
virtual void Start()
Definition Node.cpp:459
Definition ScriptFunc.h:10
Definition SpriteAnimPlayback.h:40
Definition SpriteAnimation.h:31
Definition Texture.h:10