JugiMap Framework
jmSFML.h
1 
2 //===================================================================================================
3 // JugiMap API extension for SFML.
4 //===================================================================================================
5 
6 #ifndef JUGIMAP_SFML_H
7 #define JUGIMAP_SFML_H
8 
9 #include <codecvt>
10 #include <SFML/Window.hpp>
11 #include <SFML/Graphics.hpp>
12 #include <SFML/System.hpp>
13 #include <SFML/OpenGL.hpp>
14 #include "../jugimap/jugimap.h"
15 
16 
17 
18 
19 namespace jugimap {
20 
21 
25 {
26 public:
27 
32  BinaryFileStreamReaderSFML(const std::string &fileName)
33  {
34  opened = fis.open(fileName);
35  }
36 
37 
38  ~BinaryFileStreamReaderSFML() override
39  {
40  if(opened){
41  Close();
42  }
43  }
44 
45 
46  bool IsOpen() override {return opened;}
47  int Pos() override {return fis.tell();}
48  void Seek(int _pos) override {fis.seek(_pos);}
49  int Size() override {return fis.getSize();}
50  void Close() override {}
51 
52 
53  unsigned char ReadByte() override
54  {
55  unsigned char value;
56  fis.read(reinterpret_cast<char*>(&value), 1);
57  return value;
58  }
59 
60  int ReadInt() override
61  {
62  int value;
63  fis.read(reinterpret_cast<char*>(&value), 4);
64  return value;
65  }
66 
67  float ReadFloat() override
68  {
69  float value;
70  fis.read(reinterpret_cast<char*>(&value), 4);
71  return value;
72  }
73 
74 
75  std::string ReadString() override;
76 
77 
78 private:
79  sf::FileInputStream fis;
80  bool opened = false;
81 };
82 
83 
84 
85 //===================================================================================================
86 
87 
88 
92 {
93 public:
94  static bool textureSmoothFilter;
95 
96  GraphicFileSFML(){}
97  virtual ~GraphicFileSFML() override;
98 
99  virtual void Init() override;
100 
102  const sf::Texture * GetSFTexture() const {return sfTexture;}
103 
104 private:
105  sf::Texture *sfTexture = nullptr;
106 };
107 
108 
109 //===================================================================================================
110 
111 
115 {
116 public:
117 
118  //StandardSpriteSFML (){}
119  //StandardSpriteSFML (SourceSprite *_sourceSprite, Vec2f _position, SpriteLayer *_spriteLayer);
120 
121  virtual ~StandardSpriteSFML () override;
122 
123 
124  virtual void InitEngineObjects() override;
125  virtual void UpdateEngineObjects() override;
126  virtual void SetActiveImage(GraphicItem *_image) override;
127  virtual void DrawEngineSprite() override;
128  virtual void CaptureForLerpDrawing() override;
129 
131  sf::Sprite * GetSFSprite() {return sfSprite;}
132 
133 private:
134 
135  sf::Sprite *sfSprite = nullptr; // OWNED data!
136  sf::BlendMode sfBlend;
137  jugimap::Vec2f posGlobal;
138  jugimap::Vec2f posGlobalPrevious;
139  sf::Shader *shader = nullptr; // LINK pointer
140 
141  int drawChangeFlags = 0;
142 
143  void ManageShaders_OverlayColor();
144 
145 };
146 
147 
148 //===================================================================================================
149 
150 
154 {
155 public:
156 
157  static Vec2f posOffset;
158 
159  //TextSpriteSFML(){}
160  //TextSpriteSFML(const std::string &_textString, Font* _font, ColorRGBA _color, Vec2f _position, TextHandleVariant _textHandle, SpriteLayer *_spriteLayer);
161  virtual ~TextSpriteSFML();
162 
163  virtual void InitEngineObjects() override;
164  virtual void UpdateEngineObjects() override;
165  virtual bool IsEngineSpriteInitialized() override { return (sfText!=nullptr); }
166  virtual void DrawEngineSprite() override;
167 
168  //---
170  sf::Text* GetSFText(){ return sfText;}
171 
172 
173 private:
174  sf::Text* sfText = nullptr; // OWNED
175 
176 };
177 
178 
179 //===================================================================================================
180 
181 
182 class ShaderSFML_ColorOverlay_SimpleMultiply;
183 class ShaderSFML_ColorOverlay_Normal;
184 class ShaderSFML_ColorOverlay_Multiply;
185 class ShaderSFML_ColorOverlay_LinearDodge;
186 class ShaderSFML_ColorOverlay_Color;
187 
188 class FragmentShaderSFML_ColorOverlay
189 {
190 public:
191  friend class ShaderSFML_ColorOverlay_SimpleMultiply;
192  friend class ShaderSFML_ColorOverlay_Normal;
193  friend class ShaderSFML_ColorOverlay_Multiply;
194  friend class ShaderSFML_ColorOverlay_LinearDodge;
195  friend class ShaderSFML_ColorOverlay_Color;
196 
197 
198  virtual ~FragmentShaderSFML_ColorOverlay(){ if(shader) delete shader; }
199  void Load(const std::string &_filePath);
200 
201  sf::Shader *GetShader(){ return shader; }
202  ColorRGBA GetColorRGBA(){ return colorRGBA; }
203  void SetColorRGBA(ColorRGBA _colorRGBA){ colorRGBA = _colorRGBA; }
204  const std::string &GetColorRGBAname(){ return colorRGBAname; }
205 
206 
207 private:
208  sf::Shader *shader = nullptr;
209 
210  //--- uniforms
211  ColorRGBA colorRGBA{255, 255, 255, 128};
212  std::string colorRGBAname = "overlayColor";
213 };
214 
215 
216 class ShaderSFML_ColorOverlay_SimpleMultiply : public FragmentShaderSFML_ColorOverlay
217 {};
218 
219 
220 class ShaderSFML_ColorOverlay_Normal : public FragmentShaderSFML_ColorOverlay
221 {};
222 
223 
224 class ShaderSFML_ColorOverlay_Multiply : public FragmentShaderSFML_ColorOverlay
225 {};
226 
227 
228 class ShaderSFML_ColorOverlay_LinearDodge : public FragmentShaderSFML_ColorOverlay
229 {};
230 
231 
232 class ShaderSFML_ColorOverlay_Color : public FragmentShaderSFML_ColorOverlay
233 {};
234 
235 
236 namespace shaders
237 {
238  extern ShaderSFML_ColorOverlay_SimpleMultiply ColorOverlay_SimpleMultiply;
239  extern ShaderSFML_ColorOverlay_Normal ColorOverlay_Normal;
240  extern ShaderSFML_ColorOverlay_Multiply ColorOverlay_Multiply;
241  extern ShaderSFML_ColorOverlay_LinearDodge ColorOverlay_LinearDodge;
242  extern ShaderSFML_ColorOverlay_Color ColorOverlay_Color;
243 
244  void LoadJugimapShaders();
245 
246 }
247 
248 
249 //===================================================================================================
250 
251 
254 class FontSFML : public Font
255 {
256 public:
257  static std::wstring_convert<std::codecvt_utf8<sf::Uint32>, sf::Uint32> conv;
258 
259  FontSFML(const std::string &_relativeFilePath, int _size, FontKind _kind);
260  ~FontSFML();
261 
262  virtual int GetPixelWidth(const std::string &s) override;
263  virtual int GetPixelHeight(const std::string &s) override;
264  virtual Vec2f GetPixelSize(const std::string &s) override;
265 
267  sf::Font* GetSFFont(){ return sfFont;}
268 
269 private:
270  sf::Font* sfFont = nullptr; // OWNED
271  sf::Text* sfText = nullptr;
272 };
273 
274 
275 
276 
277 /*
278 
281 class TextSFML : public Text
282 {
283 public:
284  static std::wstring_convert<std::codecvt_utf8<sf::Uint32>, sf::Uint32> conv;
285 
286  TextSFML(TextLayer* _textLayer, Font *_font, const std::string &_textString, Vec2f _position, ColorRGBA _color);
287 
288  virtual ~TextSFML();
289 
290  //virtual void InitEngineText();
291  virtual void UpdateEngineText();
292  virtual bool IsEngineTextInitialized(){ return (sfText!=nullptr); }
293 
295  sf::Text* GetSFText(){ return sfText;}
296 
297 private:
298  sf::Text* sfText = nullptr; // OWNED
299 
300 };
301 
302 
305 class TextLayerSFML : public TextLayer
306 {
307 public:
308 
309  TextLayerSFML(const std::string &_name) : TextLayer(_name){}
310 
311  virtual void DrawEngineLayer() override;
312 };
313 
314 */
315 
316 //===================================================================================================
317 
318 
321 class DrawerSFML : public Drawer
322 {
323 public:
324 
325  virtual void SetOutlineColor(ColorRGBA _outlineColor) override;
326  virtual void Line(jugimap::Vec2f p1, jugimap::Vec2f p2) override;
327  virtual void RectangleOutline(const jugimap::Rectf &rect) override;
328  virtual void EllipseOutline(jugimap::Vec2f c, jugimap::Vec2f r) override;
329  virtual void Dot(jugimap::Vec2f p) override;
330 
331 private:
332  sf::Color sfOutlineColor;
333 
334 };
335 
336 
337 //===================================================================================================
338 
339 
342 class MapSFML : public Map
343 {
344 public:
345 
346  MapSFML(){}
347  MapSFML(int _zOrderStart) : Map(_zOrderStart) {}
348 
349  void DrawEngineObjects() override;
350 
351  //void UpdateAndDrawEngineMap();
352 };
353 
354 
355 //===================================================================================================
356 
357 
358 class EngineSceneSFML : public EngineScene
359 {
360 public:
361 
362  EngineSceneSFML(Scene *_scene) : EngineScene(_scene){}
363 
364  void PreUpdate() override;
365 
366 };
367 
368 
369 //===================================================================================================
370 
371 
372 class EngineAppSFML : public EngineApp
373 {
374 public:
375 
376  EngineAppSFML(App *_app) : EngineApp(_app){}
377 
378  void SetSystemMouseCursorVisible(bool _visible) override;
379 
380 };
381 
382 
383 //===================================================================================================
384 
385 /*
386 class CommandsSFML : public Commands
387 {
388 public:
389 
390  virtual void PreAppUpdate() override;
391  virtual void PostAppUpdate() override;
392  virtual void SetSystemMouseCursorVisible(bool _visible) override;
393 
394 
395 };
396 */
397 
398 /*
399 class KeyboardImplSFML : public KeyboardImpl
400 {
401 public:
402 
403  KeyboardImplSFML();
404 
405  virtual bool IsKeyDown(KeyCode _keyCode) override;
406 
407 //private:
408  std::vector<sf::Keyboard::Key>keyCodesConversionTable;
409 
410 };
411 */
412 
413 
414 struct KeyboardConversionTable
415 {
416 
417  KeyboardConversionTable();
418 
419  std::vector<jugimap::KeyCode>table;
420 
421 };
422 
423 
424 void ProcessEvents(sf::Event &event);
425 
426 
427 
428 /*
429 class MouseSFML : public Mouse
430 {
431 public:
432 
433  MouseSFML(){}
434 
435 
436  virtual bool ButtonDown(MouseButton _mouseButton) override;
437  virtual bool ButtonPressed(MouseButton _mouseButton) override;
438  virtual bool ButtonReleased(MouseButton _mouseButton) override;
439 
440 };
441 
442 */
443 
444 
445 //===================================================================================================
446 
447 
448 
452 {
453 public:
454 
455 
456  virtual BinaryStreamReader* NewBinaryFileStreamReader(const std::string &fileName) override { return new BinaryFileStreamReaderSFML(fileName);}
457  virtual GraphicFile* NewFile() override { return new GraphicFileSFML(); }
458  virtual Map* NewMap(int _zOrderStart) override { return new MapSFML(_zOrderStart); }
459  virtual StandardSprite *NewStandardSprite() override { return new StandardSpriteSFML (); }
460  //virtual StandardSprite *NewStandardSprite(SourceSprite *_sourceSprite, Vec2f _position, SpriteLayer *_spriteLayer) override
461  //{
462  // return new StandardSpriteSFML(_sourceSprite, _position, _spriteLayer);
463  //}
464  virtual TextSprite *NewTextSprite() override { return new TextSpriteSFML(); }
465  //virtual TextSprite *NewTextSprite(const std::string &_textString, Font* _font, ColorRGBA _color, Vec2f _position, TextHandleVariant _textHandle, SpriteLayer *_spriteLayer) override
466  //{
467  // return new TextSpriteSFML (_textString, _font, _color, _position, _textHandle, _spriteLayer);
468  //}
469  virtual EngineScene * NewEngineScene(Scene *_scene) override { return new EngineSceneSFML(_scene); }
470  virtual EngineApp * NewEngineApp(App *_app) override { return new EngineAppSFML(_app); }
471 
472  virtual Font* NewFont(const std::string &_relativeFilePath, int _size, FontKind _fontKind) override
473  {
474  return new FontSFML(_relativeFilePath, _size, _fontKind);
475  }
476 
477  virtual Drawer* NewDrawer() override { return new DrawerSFML(); }
478 
479 };
480 
481 
482 
483 namespace globSFML{
484 
485 
486 extern sf::RenderTarget *CurrentRenderTarget;
487 extern sf::Window *CurrentWindow;
488 
489 extern int countSpriteDrawCalls;
490 extern int countDrawnSprites;
491 extern int countDrawnFrames;
492 
493 }
494 
495 
496 }
497 
498 
499 
500 
501 
502 
503 #endif
jugimap::DrawerSFML::EllipseOutline
virtual void EllipseOutline(jugimap::Vec2f c, jugimap::Vec2f r) override
Draw the outline of an ellipse defined by the given center point c and radius r.
Definition: jmSFML.cpp:746
jugimap::BinaryFileStreamReaderSFML::Seek
void Seek(int _pos) override
Set the current reading position of the stream.
Definition: jmSFML.h:48
jugimap::BinaryFileStreamReaderSFML::IsOpen
bool IsOpen() override
Returns true if the stream of this object is open for reading; if not it returns false.
Definition: jmSFML.h:46
jugimap::StandardSpriteSFML::InitEngineObjects
virtual void InitEngineObjects() override
Initialize the engine sprite.
Definition: jmSFML.cpp:98
jugimap::TextSpriteSFML::GetSFText
sf::Text * GetSFText()
Returns the SFML text object.
Definition: jmSFML.h:170
jugimap::TextSpriteSFML::DrawEngineSprite
virtual void DrawEngineSprite() override
Draw the engine sprite.
Definition: jmSFML.cpp:502
jugimap::StandardSpriteSFML::UpdateEngineObjects
virtual void UpdateEngineObjects() override
Update the engine sprite.
Definition: jmSFML.cpp:157
jugimap::TextSpriteSFML
Extended TextSprite class for SFML.
Definition: jmSFML.h:153
jugimap::DrawerSFML
Extended Drawer class for SFML.
Definition: jmSFML.h:321
jugimap::Rect< float >
jugimap::ObjectFactorySFML::NewStandardSprite
virtual StandardSprite * NewStandardSprite() override
Returns a new standard sprite object.
Definition: jmSFML.h:459
jugimap::ColorRGBA
Color in RGBA color space - integer variant.
Definition: jmColor.h:15
jugimap::GraphicFileSFML::Init
virtual void Init() override
Initialize this GraphicFile.
Definition: jmSFML.cpp:43
jugimap::EngineScene
The EngineScene class defines engine specific scene properties.
Definition: jmScene.h:109
jugimap::App
The App is the base class of the application.
Definition: jmApp.h:22
jugimap::ObjectFactorySFML::NewTextSprite
virtual TextSprite * NewTextSprite() override
Returns a new standard sprite object.
Definition: jmSFML.h:464
jugimap::FontSFML
Extended Font class for SFML.
Definition: jmSFML.h:254
jugimap::BinaryFileStreamReaderSFML::Size
int Size() override
Returns the size of the stream.
Definition: jmSFML.h:49
jugimap::Scene
The Scene class is the base class for the application scenes.
Definition: jmScene.h:23
jugimap::DrawerSFML::Dot
virtual void Dot(jugimap::Vec2f p) override
Draw a dot at the given position p.
Definition: jmSFML.cpp:768
jugimap::ObjectFactorySFML::NewMap
virtual Map * NewMap(int _zOrderStart) override
Returns a new map object.
Definition: jmSFML.h:458
jugimap::TextSpriteSFML::IsEngineSpriteInitialized
virtual bool IsEngineSpriteInitialized() override
Returns true if the engine sprite of this sprite has been initialized; otherwise returns false.
Definition: jmSFML.h:165
jugimap::GraphicItem
The GraphicItem class defines the equivalent object from JugiMap Editor.
Definition: jmSourceGraphics.h:34
jugimap::EngineApp
The EngineApp class defines engine specific application properties.
Definition: jmApp.h:115
jugimap::BinaryFileStreamReaderSFML::ReadInt
int ReadInt() override
Read and returns the integer number (4 bytes).
Definition: jmSFML.h:60
jugimap::BinaryStreamReader
The base abstract class for reading binary streams.
Definition: jmStreams.h:33
jugimap::Map::Map
Map()
Constructor.
Definition: jmMap.h:34
jugimap::StandardSprite
The StandardSprite class defines the sprite from JugiMap Editor.
Definition: jmSprites.h:787
jugimap::ObjectFactorySFML::NewEngineScene
virtual EngineScene * NewEngineScene(Scene *_scene) override
Returns a new map object.
Definition: jmSFML.h:469
jugimap::BinaryFileStreamReaderSFML::Pos
int Pos() override
Returns the current reading position of the stream.
Definition: jmSFML.h:47
jugimap::GraphicFileSFML
Extended GraphicFile class for SFML.
Definition: jmSFML.h:91
jugimap::StandardSpriteSFML::GetSFSprite
sf::Sprite * GetSFSprite()
Returns the SFML sprite object.
Definition: jmSFML.h:131
jugimap::FontKind
FontKind
The kinds of font.
Definition: jmGlobal.h:124
jugimap::BinaryFileStreamReaderSFML::ReadString
std::string ReadString() override
Read and returns the string. The length of string is written as the integer at the start.
Definition: jmSFML.cpp:18
jugimap::StandardSpriteSFML::DrawEngineSprite
virtual void DrawEngineSprite() override
Draw the engine sprite.
Definition: jmSFML.cpp:243
jugimap::BinaryFileStreamReaderSFML::ReadFloat
float ReadFloat() override
Read and returns the float number (4 bytes).
Definition: jmSFML.h:67
jugimap::GraphicFile
The GraphicFile class defines the equivalent object from JugiMap Editor.
Definition: jmSourceGraphics.h:148
jugimap::DrawerSFML::RectangleOutline
virtual void RectangleOutline(const jugimap::Rectf &rect) override
Draw the outline of the given rectangle rect.
Definition: jmSFML.cpp:731
jugimap::ObjectFactorySFML::NewFont
virtual Font * NewFont(const std::string &_relativeFilePath, int _size, FontKind _fontKind) override
Returns a new text object.
Definition: jmSFML.h:472
jugimap::FontSFML::GetSFFont
sf::Font * GetSFFont()
Returns the SFML font object.
Definition: jmSFML.h:267
jugimap::Drawer
The Drawer is the base drawer class.
Definition: jmDrawing.h:20
jugimap::ObjectFactorySFML::NewEngineApp
virtual EngineApp * NewEngineApp(App *_app) override
Returns a new map object.
Definition: jmSFML.h:470
jugimap::GraphicFileSFML::textureSmoothFilter
static bool textureSmoothFilter
Set true for smooth texture filtering; set false for no filtering.
Definition: jmSFML.h:94
jugimap::MapSFML::DrawEngineObjects
void DrawEngineObjects() override
Draw the engine map objects.
Definition: jmSFML.cpp:786
jugimap::ObjectFactorySFML::NewFile
virtual GraphicFile * NewFile() override
Returns a new graphic file object.
Definition: jmSFML.h:457
jugimap::DrawerSFML::Line
virtual void Line(jugimap::Vec2f p1, jugimap::Vec2f p2) override
Draw a line from the given position p1 to p2.
Definition: jmSFML.cpp:720
jugimap::Font
The Font class defines fonts used in TextSprite objects.
Definition: jmFont.h:16
jugimap::GraphicFileSFML::GetSFTexture
const sf::Texture * GetSFTexture() const
Returns the SFML texture object.
Definition: jmSFML.h:102
jugimap::ObjectFactory
The ObjectFactory is the base class for engine specific object factories.
Definition: jmObjectFactory.h:48
jugimap::StandardSpriteSFML
Extended StandardSprite class for SFML.
Definition: jmSFML.h:114
jugimap::BinaryFileStreamReaderSFML
Extended BinaryStreamReader class for SFML.
Definition: jmSFML.h:24
jugimap::DrawerSFML::SetOutlineColor
virtual void SetOutlineColor(ColorRGBA _outlineColor) override
Set outline color to the given *_outlineColor*.
Definition: jmSFML.cpp:714
jugimap::TextSpriteSFML::InitEngineObjects
virtual void InitEngineObjects() override
Initialize the engine sprite.
Definition: jmSFML.cpp:388
jugimap::Vec2< float >
jugimap::MapSFML
Extended Map class for SFML.
Definition: jmSFML.h:342
jugimap::TextSpriteSFML::UpdateEngineObjects
virtual void UpdateEngineObjects() override
Update the engine sprite.
Definition: jmSFML.cpp:417
jugimap::StandardSpriteSFML::CaptureForLerpDrawing
virtual void CaptureForLerpDrawing() override
Capture the sprite properties, usually the position only, required for the lerp drawing.
Definition: jmSFML.cpp:236
jugimap::BinaryFileStreamReaderSFML::BinaryFileStreamReaderSFML
BinaryFileStreamReaderSFML(const std::string &fileName)
Constructor.
Definition: jmSFML.h:32
jugimap::TextSprite
The TextSprite class defines the text sprite from JugiMap Editor.
Definition: jmSprites.h:889
jugimap::StandardSpriteSFML::SetActiveImage
virtual void SetActiveImage(GraphicItem *_image) override
Set the active image to the given *_image*.
Definition: jmSFML.cpp:128
jugimap::BinaryFileStreamReaderSFML::ReadByte
unsigned char ReadByte() override
Read and returns the byte number.
Definition: jmSFML.h:53
jugimap::Map
The Map class defines the map element from JugiMap Editor.
Definition: jmMap.h:26
jugimap::ObjectFactorySFML
Extended ObjectFactory class for SFML.
Definition: jmSFML.h:451
jugimap::BinaryFileStreamReaderSFML::Close
void Close() override
Close the stream.
Definition: jmSFML.h:50
jugimap::ObjectFactorySFML::NewDrawer
virtual Drawer * NewDrawer() override
Returns a new drawer object.
Definition: jmSFML.h:477