Gorgon Game Engine
TintedObject.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "AnimationStorage.h"
4 #include "../Graphics/TintedObject.h"
5 
6 
7 namespace Gorgon {
8  namespace Resource {
9  class File;
10  class Reader;
11 
17  public:
20 
23 
26 
29  own = true;
30  }
31 
34  own = true;
35  }
36 
39  own = true;
40  }
41 
44 
45  ITintedObjectProvider &MoveOutProvider() override;
46 
47  GID::Type GetGID() const override {
48  return GID::TintedObject;
49  }
50 
54  prov = &value;
55  }
56 
60  prov = &value;
61  }
62 
66  prov = &value;
67  }
68 
72  prov = &value;
73  own = true;
74  }
75 
79  prov = &value;
80  own = true;
81  }
82 
86  prov = &value;
87  own = true;
88  }
89 
91  void RemoveProvider() {
92  if(own)
93  delete prov;
94 
95  own = false;
96 
97  prov = nullptr;
98  }
99 
100  virtual Graphics::RectangularAnimation &CreateBase() const override {
101  if(!prov)
102  throw std::runtime_error("Provider is not set.");
103 
104  return prov->CreateBase();
105  }
106 
107  virtual Graphics::RGBAf GetColor() const override {
108  if(!prov)
109  throw std::runtime_error("Provider is not set.");
110 
111  return prov->GetColor();
112  }
113  virtual void SetColor(const Graphics::RGBAf &value) override {
114  if(!prov)
115  throw std::runtime_error("Provider is not set.");
116 
117  return prov->SetColor(value);
118  }
119 
121  if(!prov)
122  throw std::runtime_error("Provider is not set.");
123 
124  return dynamic_cast<Gorgon::Graphics::TintedObject &>(prov->CreateAnimation(timer));
125  }
126 
127  virtual Graphics::TintedObject &CreateAnimation(bool create=true) const override {
128  if(!prov)
129  throw std::runtime_error("Provider is not set.");
130 
131  return dynamic_cast<Gorgon::Graphics::TintedObject &>(prov->CreateAnimation(create));
132  }
133 
134  virtual Geometry::Size GetSize() const override {
135  if(!prov)
136  throw std::runtime_error("Provider is not set.");
137 
138  return prov->GetSize();
139  }
140 
142  static TintedObject *LoadResource(std::weak_ptr<File> file, std::shared_ptr<Reader> reader, unsigned long size);
143 
144  static void SaveThis(Writer &writer, const Graphics::ITintedObjectProvider &provider);
145 
146  protected:
147  void save(Writer &writer) const override;
148 
150 
151  private:
152  virtual ~TintedObject() {
153  if(own)
154  delete prov;
155  }
156 
157  ITintedObjectProvider *prov = nullptr;
158 
159  bool own = false;
160  };
161  }
162 }
Gorgon::Resource::TintedObject::SetColor
virtual void SetColor(const Graphics::RGBAf &value) override
Definition: TintedObject.h:113
Gorgon::Resource::TintedObject::save
void save(Writer &writer) const override
Definition: TintedObject.cpp:128
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::Animation::ControllerBase
Controllers are required to progress animations.
Definition: Animation.h:65
Gorgon::Resource::TintedObject::CreateAnimation
virtual Graphics::TintedObject & 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: TintedObject.h:120
Gorgon::Resource::TintedObject::AssumeProvider
void AssumeProvider(Graphics::TintedObjectProvider &value)
Changes the provider stored in this tinted object, ownership will be transferred.
Definition: TintedObject.h:84
Gorgon::Graphics::RGBAf
Represents a four channel 32 bit float per channel color information.
Definition: Color.h:373
Gorgon::Resource::GID::TintedObject
constexpr Type TintedObject
Definition: GID.h:244
Gorgon::Graphics::basic_TintedObjectProvider
This object creates a scalable object from a graphic object.
Definition: TintedObject.h:124
Gorgon::Resource::TintedObject::TintedObject
TintedObject(Graphics::TintedObjectProvider &&prov)
Creates a new tinted object using another tinted object provider.
Definition: TintedObject.h:38
Gorgon::Graphics::ITintedObjectProvider
For ease of use in resource system.
Definition: TintedObject.h:11
Gorgon::Graphics::basic_TintedObjectProvider::SetColor
void SetColor(const RGBAf &value) override
Sets the tint color of the object.
Definition: TintedObject.h:188
Gorgon::Resource::TintedObject
This is a tinted object resource.
Definition: TintedObject.h:16
Gorgon::Resource::TintedObject::GetColor
virtual Graphics::RGBAf GetColor() const override
Definition: TintedObject.h:107
Gorgon::Resource::TintedObject::SetProvider
void SetProvider(Graphics::TintedBitmapProvider &value)
Changes the provider stored in this tinted object, ownership will not be transferred.
Definition: TintedObject.h:52
Gorgon::Resource::TintedObject::TintedObject
TintedObject(Graphics::TintedBitmapProvider &&prov)
Creates a new tinted object using another tinted object provider.
Definition: TintedObject.h:28
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::TintedObject::GetGID
GID::Type GetGID() const override
This function shall return Gorgon ID of this resource.
Definition: TintedObject.h:47
Gorgon::Resource::TintedObject::MoveOutProvider
ITintedObjectProvider & MoveOutProvider() override
This function moves this animation provider into a new provider.
Definition: TintedObject.cpp:204
Gorgon::Graphics::basic_TintedObjectProvider::CreateBase
RectangularAnimation & CreateBase() const override
Creates a base animation without controller.
Definition: TintedObject.h:168
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::TintedObject::SetProvider
void SetProvider(Graphics::TintedObjectProvider &value)
Changes the provider stored in this tinted object, ownership will not be transferred.
Definition: TintedObject.h:64
AnimationStorage.h
Gorgon::Graphics::TintedBitmapAnimationProvider
basic_TintedObjectProvider< BitmapAnimationProvider > TintedBitmapAnimationProvider
Definition: TintedObject.h:280
Gorgon::Resource::Writer
This class allows resource objects to save their data to a stream.
Definition: Writer.h:59
Gorgon::Graphics::TintedObjectProvider
basic_TintedObjectProvider< RectangularAnimationProvider > TintedObjectProvider
Definition: TintedObject.h:277
Gorgon::Resource::TintedObject::TintedObject
TintedObject()
Creates a new empty tinted object.
Definition: TintedObject.h:43
Gorgon::Graphics::basic_TintedObject
Definition: TintedObject.h:26
Gorgon::Resource::TintedObject::SetProvider
void SetProvider(Graphics::TintedBitmapAnimationProvider &value)
Changes the provider stored in this tinted object, ownership will not be transferred.
Definition: TintedObject.h:58
Gorgon::Graphics::basic_TintedObjectProvider::GetSize
Geometry::Size GetSize() const override
Definition: TintedObject.h:211
Gorgon::Graphics::basic_TintedObjectProvider::GetColor
RGBAf GetColor() const override
Returns the tint color.
Definition: TintedObject.h:183
Gorgon::Resource::TintedObject::animmoveout
virtual Graphics::RectangularAnimationStorage animmoveout() override
Definition: TintedObject.cpp:200
Gorgon::UI::Graphics
@ Graphics
Definition: Template.h:164
Gorgon::Resource::TintedObject::CreateAnimation
virtual Graphics::TintedObject & CreateAnimation(bool create=true) const override
This function should create and animation and depending on the create parameter, it should create its...
Definition: TintedObject.h:127
Gorgon::Resource::TintedObject::SaveThis
static void SaveThis(Writer &writer, const Graphics::ITintedObjectProvider &provider)
Definition: TintedObject.cpp:147
Gorgon::Resource::TintedObject::AssumeProvider
void AssumeProvider(Graphics::TintedBitmapProvider &value)
Changes the provider stored in this tinted object, ownership will be transferred.
Definition: TintedObject.h:70
Gorgon::Resource::TintedObject::GetSize
virtual Geometry::Size GetSize() const override
Definition: TintedObject.h:134
Gorgon::Resource::TintedObject::AssumeProvider
void AssumeProvider(Graphics::TintedBitmapAnimationProvider &value)
Changes the provider stored in this tinted object, ownership will be transferred.
Definition: TintedObject.h:77
Gorgon::Graphics::TintedBitmapProvider
basic_TintedObjectProvider< Bitmap > TintedBitmapProvider
Definition: TintedObject.h:283
Gorgon::Resource::GID::Type
Type to store GID information.
Definition: GID.h:23
Gorgon::Resource::TintedObject::RemoveProvider
void RemoveProvider()
Removes the provider, if it is own by this resource it will be deleted.
Definition: TintedObject.h:91
Gorgon::Graphics::basic_TintedObjectProvider::CreateAnimation
basic_TintedObject< A_ > & CreateAnimation(bool create=true) const override
Definition: TintedObject.h:159
Gorgon::Resource::TintedObject::CreateBase
virtual Graphics::RectangularAnimation & CreateBase() const override
Definition: TintedObject.h:100
Gorgon::Resource::TintedObject::TintedObject
TintedObject(Graphics::TintedBitmapAnimationProvider &&prov)
Creates a new tinted object using another tinted object provider.
Definition: TintedObject.h:33
Gorgon::Resource::TintedObject::LoadResource
static TintedObject * LoadResource(std::weak_ptr< File > file, std::shared_ptr< Reader > reader, unsigned long size)
This function loads a tinted object resource from the file.
Definition: TintedObject.cpp:35