Files
Aerofoil/PortabilityLayer/PLMovies.h

91 lines
1.7 KiB
C
Raw Normal View History

2019-11-11 00:11:59 -05:00
#pragma once
#ifndef __PL_MOVIES_H__
#define __PL_MOVIES_H__
#include "PLApplication.h"
2020-02-20 03:13:15 -05:00
#include "VirtualDirectory.h"
2019-11-11 00:11:59 -05:00
2020-02-20 03:13:15 -05:00
namespace PortabilityLayer
2019-11-11 00:11:59 -05:00
{
struct IResourceArchive;
2021-03-07 04:24:13 -05:00
class MultiStreamFile;
class CompositeFile;
2020-02-20 03:13:15 -05:00
}
2019-11-11 00:11:59 -05:00
2020-02-20 03:13:15 -05:00
struct DrawSurface;
class AnimationPackage;
2019-11-11 00:11:59 -05:00
2020-02-20 03:13:15 -05:00
struct AnimationPlayer
2019-11-11 00:11:59 -05:00
{
2020-02-20 03:13:15 -05:00
AnimationPackage *m_animPackage;
Rect m_renderRect;
Rect m_constrainRect;
DrawSurface *m_surface;
bool m_playing;
uint32_t m_timer;
uint16_t m_frameIndex;
bool m_isFrameCurrent;
AnimationPlayer *m_next;
AnimationPlayer *m_prev;
AnimationPlayer();
void SetPackage(AnimationPackage *animPackage);
void Restart();
2019-11-11 00:11:59 -05:00
};
2020-02-20 03:13:15 -05:00
class AnimationPackage final
2019-11-11 00:11:59 -05:00
{
2020-02-20 03:13:15 -05:00
public:
static AnimationPackage *Create();
void Destroy();
2021-03-07 04:24:13 -05:00
PLError_t Load(PortabilityLayer::VirtualDirectory_t dirID, const PLPasStr &name);
2020-02-20 03:13:15 -05:00
const THandle<BitmapImage> &GetFrame(size_t index) const;
size_t NumFrames() const;
uint32_t GetFrameRateNumerator() const;
uint32_t GetFrameRateDenominator() const;
private:
explicit AnimationPackage();
~AnimationPackage();
THandle<BitmapImage> *m_images;
PortabilityLayer::IResourceArchive *m_resArchive;
2021-03-07 04:24:13 -05:00
PortabilityLayer::CompositeFile *m_compositeFile;
2020-02-20 03:13:15 -05:00
size_t m_numImages;
uint32_t m_frameRateNumerator;
uint32_t m_frameRateDenominator;
2019-11-11 00:11:59 -05:00
};
2020-02-20 03:13:15 -05:00
struct AnimationPlayerRef
2019-11-11 00:11:59 -05:00
{
2020-02-20 03:13:15 -05:00
AnimationPlayer *m_player;
2019-11-11 00:11:59 -05:00
};
2020-02-20 03:13:15 -05:00
class AnimationManager final
{
public:
void RegisterPlayer(AnimationPlayer *player);
void RemovePlayer(AnimationPlayer *player);
void RefreshPlayer(AnimationPlayer *player);
void TickPlayers(uint32_t numTicks);
static AnimationManager *GetInstance();
private:
AnimationManager();
AnimationPlayer *m_firstPlayer;
AnimationPlayer *m_lastPlayer;
static AnimationManager ms_instance;
};
2019-11-11 00:11:59 -05:00
#endif