Gorgon Game Engine
MaskedObject.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "AnimationStorage.h"
4 #include "../Graphics/MaskedObject.h"
5 
6 
7 namespace Gorgon { namespace Resource {
8  class File;
9  class Reader;
10 
16  public:
19 
22 
25 
28  own = true;
29  }
30 
33  own = true;
34  }
35 
38  own = true;
39  }
40 
43 
44  IMaskedObjectProvider &MoveOutProvider() override;
45 
46  GID::Type GetGID() const override {
47  return GID::MaskedObject;
48  }
49 
53  prov = &value;
54  }
55 
59  prov = &value;
60  }
61 
65  prov = &value;
66  }
67 
71  prov = &value;
72  own = true;
73  }
74 
78  prov = &value;
79  own = true;
80  }
81 
85  prov = &value;
86  own = true;
87  }
88 
90  void RemoveProvider() {
91  if(own)
92  delete prov;
93 
94  own = false;
95 
96  prov = nullptr;
97  }
98 
99  virtual Graphics::RectangularAnimation &CreateBase() const override {
100  if(!prov)
101  throw std::runtime_error("Provider is not set.");
102 
103  return prov->CreateBase();
104  }
105 
106  virtual Graphics::RectangularAnimation &CreateMask() const override {
107  if(!prov)
108  throw std::runtime_error("Provider is not set.");
109 
110  return prov->CreateMask();
111  }
112 
114  if(!prov)
115  throw std::runtime_error("Provider is not set.");
116 
117  return dynamic_cast<Gorgon::Graphics::MaskedObject &>(prov->CreateAnimation(timer));
118  }
119 
120  virtual Graphics::MaskedObject &CreateAnimation(bool create=true) const override {
121  if(!prov)
122  throw std::runtime_error("Provider is not set.");
123 
124  return dynamic_cast<Gorgon::Graphics::MaskedObject &>(prov->CreateAnimation(create));
125  }
126 
127  virtual Geometry::Size GetSize() const override {
128  if(!prov)
129  throw std::runtime_error("Provider is not set.");
130 
131  return prov->GetSize();
132  }
133 
135  static MaskedObject *LoadResource(std::weak_ptr<File> file, std::shared_ptr<Reader> reader, unsigned long size);
136 
137  static void SaveThis(Writer &writer, const Graphics::IMaskedObjectProvider &provider);
138 
139  protected:
140  void save(Writer &writer) const override;
141 
143 
144  private:
145  virtual ~MaskedObject() {
146  if(own)
147  delete prov;
148  }
149 
150  IMaskedObjectProvider *prov = nullptr;
151 
152  bool own = false;
153  };
154 } }
Gorgon::Animation::basic_Storage
This class stores animations as a part of itself so that it can be moved around as a value rather tha...
Definition: Storage.h:21
Gorgon::Resource::GID::File
constexpr Type File
File.
Definition: GID.h:84
Gorgon::Resource::MaskedObject::GetSize
virtual Geometry::Size GetSize() const override
Definition: MaskedObject.h:127
Gorgon::Resource::MaskedObject::AssumeProvider
void AssumeProvider(Graphics::MaskedBitmapAnimationProvider &value)
Changes the provider stored in this masked object, ownership will be transferred.
Definition: MaskedObject.h:76
Gorgon::Graphics::basic_MaskedObjectProvider::CreateAnimation
basic_MaskedObject< A_ > & CreateAnimation(bool create=true) const override
Definition: MaskedObject.h:151
Gorgon::Animation::ControllerBase
Controllers are required to progress animations.
Definition: Animation.h:65
Gorgon::Resource::GID::MaskedObject
constexpr Type MaskedObject
Definition: GID.h:242
Gorgon::Resource::MaskedObject::RemoveProvider
void RemoveProvider()
Removes the provider, if it is own by this resource it will be deleted.
Definition: MaskedObject.h:90
Gorgon::Resource::MaskedObject::CreateMask
virtual Graphics::RectangularAnimation & CreateMask() const override
Definition: MaskedObject.h:106
Gorgon::Resource::MaskedObject::SetProvider
void SetProvider(Graphics::MaskedObjectProvider &value)
Changes the provider stored in this masked object, ownership will not be transferred.
Definition: MaskedObject.h:63
Gorgon::Resource::MaskedObject::MoveOutProvider
IMaskedObjectProvider & MoveOutProvider() override
This function moves this animation provider into a new provider.
Definition: MaskedObject.cpp:199
Gorgon::Resource::MaskedObject::SaveThis
static void SaveThis(Writer &writer, const Graphics::IMaskedObjectProvider &provider)
Definition: MaskedObject.cpp:141
Gorgon::Resource::MaskedObject::animmoveout
virtual Graphics::RectangularAnimationStorage animmoveout() override
Definition: MaskedObject.cpp:195
Gorgon::Resource::MaskedObject::SetProvider
void SetProvider(Graphics::MaskedBitmapAnimationProvider &value)
Changes the provider stored in this masked object, ownership will not be transferred.
Definition: MaskedObject.h:57
Gorgon::Resource::MaskedObject::save
void save(Writer &writer) const override
Definition: MaskedObject.cpp:122
Gorgon
Root namespace for Gorgon Game Engine.
Definition: Any.h:19
Gorgon::Geometry::basic_Size
This class represents a 2D geometric size.
Definition: Size.h:23
Gorgon::Resource::MaskedObject::MaskedObject
MaskedObject(Graphics::MaskedObjectProvider &&prov)
Creates a new masked object using another masked object provider.
Definition: MaskedObject.h:37
Gorgon::Resource::MaskedObject::SetProvider
void SetProvider(Graphics::MaskedBitmapProvider &value)
Changes the provider stored in this masked object, ownership will not be transferred.
Definition: MaskedObject.h:51
Gorgon::Resource::AnimationStorage
This class denotes the resource is an image animation storage.
Definition: AnimationStorage.h:12
Gorgon::Graphics::RectangularAnimation
Rectangular drawable animation.
Definition: Animations.h:19
Gorgon::Resource::MaskedObject::CreateAnimation
virtual Graphics::MaskedObject & CreateAnimation(Gorgon::Animation::ControllerBase &timer) const override
This function should create a new animation with the given controller and if owner parameter is set t...
Definition: MaskedObject.h:113
AnimationStorage.h
Gorgon::Graphics::basic_MaskedObjectProvider::CreateMask
RectangularAnimation & CreateMask() const override
Creates a mask animation without controller.
Definition: MaskedObject.h:170
Gorgon::Graphics::basic_MaskedObjectProvider
This object creates a masked object from two graphics object.
Definition: MaskedObject.h:109
Gorgon::Graphics::basic_MaskedObjectProvider::CreateBase
RectangularAnimation & CreateBase() const override
Creates a base animation without controller.
Definition: MaskedObject.h:160
Gorgon::Graphics::MaskedObjectProvider
basic_MaskedObjectProvider< RectangularAnimationProvider > MaskedObjectProvider
Definition: MaskedObject.h:342
Gorgon::Resource::Writer
This class allows resource objects to save their data to a stream.
Definition: Writer.h:59
Gorgon::Graphics::basic_MaskedObjectProvider::GetSize
Geometry::Size GetSize() const override
Definition: MaskedObject.h:227
Gorgon::Resource::MaskedObject::LoadResource
static MaskedObject * LoadResource(std::weak_ptr< File > file, std::shared_ptr< Reader > reader, unsigned long size)
This function loads a masked object resource from the file.
Definition: MaskedObject.cpp:37
Gorgon::Resource::MaskedObject::MaskedObject
MaskedObject(Graphics::MaskedBitmapProvider &&prov)
Creates a new masked object using another masked object provider.
Definition: MaskedObject.h:27
Gorgon::Resource::MaskedObject::AssumeProvider
void AssumeProvider(Graphics::MaskedBitmapProvider &value)
Changes the provider stored in this masked object, ownership will be transferred.
Definition: MaskedObject.h:69
Gorgon::UI::Graphics
@ Graphics
Definition: Template.h:164
Gorgon::Resource::MaskedObject::MaskedObject
MaskedObject(Graphics::MaskedBitmapAnimationProvider &&prov)
Creates a new masked object using another masked object provider.
Definition: MaskedObject.h:32
Gorgon::Graphics::MaskedBitmapAnimationProvider
basic_MaskedObjectProvider< BitmapAnimationProvider > MaskedBitmapAnimationProvider
Definition: MaskedObject.h:345
Gorgon::Graphics::IMaskedObjectProvider
For ease of use in resource system.
Definition: MaskedObject.h:10
Gorgon::Resource::MaskedObject
This is a masked object resource.
Definition: MaskedObject.h:15
Gorgon::Resource::GID::Type
Type to store GID information.
Definition: GID.h:23
Gorgon::Graphics::MaskedBitmapProvider
basic_MaskedObjectProvider< Bitmap > MaskedBitmapProvider
Definition: MaskedObject.h:348
Gorgon::Resource::MaskedObject::MaskedObject
MaskedObject()
Creates a new empty masked object.
Definition: MaskedObject.h:42
Gorgon::Resource::MaskedObject::GetGID
GID::Type GetGID() const override
This function shall return Gorgon ID of this resource.
Definition: MaskedObject.h:46
Gorgon::Resource::MaskedObject::CreateBase
virtual Graphics::RectangularAnimation & CreateBase() const override
Definition: MaskedObject.h:99
Gorgon::Graphics::basic_MaskedObject
Definition: MaskedObject.h:22
Gorgon::Resource::MaskedObject::AssumeProvider
void AssumeProvider(Graphics::MaskedObjectProvider &value)
Changes the provider stored in this masked object, ownership will be transferred.
Definition: MaskedObject.h:83
Gorgon::Resource::MaskedObject::CreateAnimation
virtual Graphics::MaskedObject & CreateAnimation(bool create=true) const override
This function should create and animation and depending on the create parameter, it should create its...
Definition: MaskedObject.h:120