Gorgon Game Engine
StackedObject.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "AnimationStorage.h"
4 #include "../Graphics/StackedObject.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  IStackedObjectProvider &MoveOutProvider() override;
45 
46  GID::Type GetGID() const override {
47  return GID::StackedObject;
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 &CreateTop() const override {
100  if(!prov)
101  throw std::runtime_error("Provider is not set.");
102 
103  return prov->CreateTop();
104  }
105 
106  virtual Graphics::RectangularAnimation &CreateBottom() const override {
107  if(!prov)
108  throw std::runtime_error("Provider is not set.");
109 
110  return prov->CreateBottom();
111  }
112 
113  virtual Geometry::Point GetOffset() const override {
114  if(!prov)
115  throw std::runtime_error("Provider is not set.");
116 
117  return prov->GetOffset();
118  }
119 
120  virtual void SetOffset(const Geometry::Point &value) override {
121  if(!prov)
122  throw std::runtime_error("Provider is not set.");
123 
124  return prov->SetOffset(value);
125  }
126 
128  if(!prov)
129  throw std::runtime_error("Provider is not set.");
130 
131  return dynamic_cast<Gorgon::Graphics::StackedObject &>(prov->CreateAnimation(timer));
132  }
133 
134  virtual Graphics::StackedObject &CreateAnimation(bool create=true) const override {
135  if(!prov)
136  throw std::runtime_error("Provider is not set.");
137 
138  return dynamic_cast<Gorgon::Graphics::StackedObject &>(prov->CreateAnimation(create));
139  }
140 
141  virtual Geometry::Size GetSize() const override {
142  if(!prov)
143  throw std::runtime_error("Provider is not set.");
144 
145  return prov->GetSize();
146  }
147 
149  static StackedObject *LoadResource(std::weak_ptr<File> file, std::shared_ptr<Reader> reader, unsigned long size);
150 
151  static void SaveThis(Writer &writer, const Graphics::IStackedObjectProvider &provider);
152 
153  protected:
154  void save(Writer &writer) const override;
155 
157 
158  private:
159  virtual ~StackedObject() {
160  if(own)
161  delete prov;
162  }
163 
164  IStackedObjectProvider *prov = nullptr;
165 
166  bool own = false;
167  };
168 } }
Gorgon::Graphics::basic_StackedObjectProvider::SetOffset
void SetOffset(const Geometry::Point &value) override
Sets the offset of the top image.
Definition: StackedObject.h:246
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::StackedObject::StackedObject
StackedObject(Graphics::StackedObjectProvider &&prov)
Creates a new stacked object using another stacked object provider.
Definition: StackedObject.h:37
Gorgon::Resource::GID::File
constexpr Type File
File.
Definition: GID.h:84
Gorgon::Graphics::basic_StackedObjectProvider
This object creates an object that has two subobjects drawn on top of each other.
Definition: StackedObject.h:116
Gorgon::Resource::StackedObject::CreateBottom
virtual Graphics::RectangularAnimation & CreateBottom() const override
Definition: StackedObject.h:106
Gorgon::Resource::StackedObject::GetOffset
virtual Geometry::Point GetOffset() const override
Definition: StackedObject.h:113
Gorgon::Graphics::StackedObjectProvider
basic_StackedObjectProvider< RectangularAnimationProvider > StackedObjectProvider
Definition: StackedObject.h:357
Gorgon::Resource::StackedObject::SetProvider
void SetProvider(Graphics::StackedBitmapAnimationProvider &value)
Changes the provider stored in this stacked object, ownership will not be transferred.
Definition: StackedObject.h:57
Gorgon::Resource::StackedObject::CreateTop
virtual Graphics::RectangularAnimation & CreateTop() const override
Definition: StackedObject.h:99
Gorgon::Resource::GID::StackedObject
constexpr Type StackedObject
Definition: GID.h:250
Gorgon::Animation::ControllerBase
Controllers are required to progress animations.
Definition: Animation.h:65
Gorgon::Graphics::basic_StackedObjectProvider::CreateAnimation
basic_StackedObject< A_ > & CreateAnimation(bool create=true) const override
Definition: StackedObject.h:186
Gorgon::Resource::StackedObject::GetSize
virtual Geometry::Size GetSize() const override
Definition: StackedObject.h:141
Gorgon::Resource::StackedObject::SetProvider
void SetProvider(Graphics::StackedObjectProvider &value)
Changes the provider stored in this stacked object, ownership will not be transferred.
Definition: StackedObject.h:63
Gorgon::Resource::StackedObject::SaveThis
static void SaveThis(Writer &writer, const Graphics::IStackedObjectProvider &provider)
Definition: StackedObject.cpp:151
Gorgon::Graphics::basic_StackedObject
Definition: StackedObject.h:25
Gorgon::Graphics::basic_StackedObjectProvider::CreateTop
RectangularAnimation & CreateTop() const override
Creates a top animation without controller.
Definition: StackedObject.h:195
Gorgon::Resource::StackedObject::SetProvider
void SetProvider(Graphics::StackedBitmapProvider &value)
Changes the provider stored in this stacked object, ownership will not be transferred.
Definition: StackedObject.h:51
Gorgon::Resource::StackedObject::AssumeProvider
void AssumeProvider(Graphics::StackedBitmapProvider &value)
Changes the provider stored in this stacked object, ownership will be transferred.
Definition: StackedObject.h:69
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::StackedObject
This is a stacked object resource.
Definition: StackedObject.h:15
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::Graphics::basic_StackedObjectProvider::GetSize
Geometry::Size GetSize() const override
Definition: StackedObject.h:272
Gorgon::Resource::StackedObject::AssumeProvider
void AssumeProvider(Graphics::StackedObjectProvider &value)
Changes the provider stored in this stacked object, ownership will be transferred.
Definition: StackedObject.h:83
AnimationStorage.h
Gorgon::Resource::StackedObject::CreateAnimation
virtual Graphics::StackedObject & CreateAnimation(bool create=true) const override
This function should create and animation and depending on the create parameter, it should create its...
Definition: StackedObject.h:134
Gorgon::Resource::StackedObject::GetGID
GID::Type GetGID() const override
This function shall return Gorgon ID of this resource.
Definition: StackedObject.h:46
Gorgon::Graphics::IStackedObjectProvider
For ease of use in resource system.
Definition: StackedObject.h:10
Gorgon::Resource::StackedObject::CreateAnimation
virtual Graphics::StackedObject & 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: StackedObject.h:127
Gorgon::Geometry::basic_Point
This class represents a 2D point.
Definition: Point.h:32
Gorgon::Resource::Writer
This class allows resource objects to save their data to a stream.
Definition: Writer.h:59
Gorgon::Resource::StackedObject::save
void save(Writer &writer) const override
Definition: StackedObject.cpp:132
Gorgon::Graphics::basic_StackedObjectProvider::CreateBottom
RectangularAnimation & CreateBottom() const override
Creates a bottom animation without controller.
Definition: StackedObject.h:205
Gorgon::Resource::StackedObject::AssumeProvider
void AssumeProvider(Graphics::StackedBitmapAnimationProvider &value)
Changes the provider stored in this stacked object, ownership will be transferred.
Definition: StackedObject.h:76
Gorgon::UI::Graphics
@ Graphics
Definition: Template.h:164
Gorgon::Graphics::basic_StackedObjectProvider::GetOffset
Geometry::Point GetOffset() const override
Returns the offset of the top image.
Definition: StackedObject.h:241
Gorgon::Resource::StackedObject::SetOffset
virtual void SetOffset(const Geometry::Point &value) override
Definition: StackedObject.h:120
Gorgon::Resource::GID::Type
Type to store GID information.
Definition: GID.h:23
Gorgon::Resource::StackedObject::RemoveProvider
void RemoveProvider()
Removes the provider, if it is own by this resource it will be deleted.
Definition: StackedObject.h:90
Gorgon::Resource::StackedObject::MoveOutProvider
IStackedObjectProvider & MoveOutProvider() override
This function moves this animation provider into a new provider.
Definition: StackedObject.cpp:211
Gorgon::Graphics::StackedBitmapAnimationProvider
basic_StackedObjectProvider< BitmapAnimationProvider > StackedBitmapAnimationProvider
Definition: StackedObject.h:360
Gorgon::Resource::StackedObject::LoadResource
static StackedObject * LoadResource(std::weak_ptr< File > file, std::shared_ptr< Reader > reader, unsigned long size)
This function loads a stacked object resource from the file.
Definition: StackedObject.cpp:36
Gorgon::Graphics::StackedBitmapProvider
basic_StackedObjectProvider< Bitmap > StackedBitmapProvider
Definition: StackedObject.h:363
Gorgon::Resource::StackedObject::StackedObject
StackedObject(Graphics::StackedBitmapAnimationProvider &&prov)
Creates a new stacked object using another stacked object provider.
Definition: StackedObject.h:32
Gorgon::Resource::StackedObject::animmoveout
virtual Graphics::RectangularAnimationStorage animmoveout() override
Definition: StackedObject.cpp:207
Gorgon::Resource::StackedObject::StackedObject
StackedObject(Graphics::StackedBitmapProvider &&prov)
Creates a new stacked object using another stacked object provider.
Definition: StackedObject.h:27
Gorgon::Resource::StackedObject::StackedObject
StackedObject()
Creates a new empty stacked object.
Definition: StackedObject.h:42