diff --git a/Makefile b/Makefile index 5dead02..5308fc5 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC = g++ CFLAGS = -Wall -O2 -g -LDFLAGS = -lSDL -lSDL2 -lGLU -lglut -lGL -lGLEW -lm -lSDL_mixer +LDFLAGS = -lSDL -lSDL2 -lGLU -lglut -lGL -lGLEW -lm -lSDL_mixer -lSDL_image -lSDL_ttf APP_BIN = glrunner SRC_PATH = src diff --git a/README.md b/README.md index c0804aa..c971cbf 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,7 @@ # GL_runner OpenGL project - IMAC-2 + +PLEASE COMPILE FROM THE MARION BRANCH /!\ + +Compile with make +Execute with ./bin/glrunner diff --git a/bin/EXECUTABLES.txt b/bin/EXECUTABLES.txt deleted file mode 100644 index e69de29..0000000 diff --git a/bin/glrunner b/bin/glrunner deleted file mode 100755 index 7291cfa..0000000 Binary files a/bin/glrunner and /dev/null differ diff --git a/doc/html/_app_manager_8hpp_source.html b/doc/html/_app_manager_8hpp_source.html new file mode 100644 index 0000000..e7f3481 --- /dev/null +++ b/doc/html/_app_manager_8hpp_source.html @@ -0,0 +1,104 @@ + + + + + + + +SpacImac Runner: include/AppManager.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AppManager.hpp
+
+
+
1 #include <GL/glew.h>
2 #include <iostream>
3 #include <glimac/common.hpp>
4 #include <glimac/SDLWindowManager.hpp>
5 #include <string>
6 
9 class AppManager
10 {
11 public:
12 
14  AppManager();
15 
17  inline const std::string getWindowName() const {
18  return m_window_name;
19  }
20 
22  inline const int getAppWidth() const {
23  return m_width;
24  }
25 
27  inline const int getAppHeight() const {
28  return m_height;
29  }
30 
32  int start(char** argv);
33 
34 public:
35  std::string m_window_name = "SpacImac Runner";
36  int m_width = 800;
37  int m_height = 600;
38  int m_score = 0;
39 
40 };
const std::string getWindowName() const
Getter for the window name.
Definition: AppManager.hpp:17
+
const int getAppHeight() const
Getter for the window&#39;s height.
Definition: AppManager.hpp:27
+
AppManager()
Default Constructor of class AppManager.
Definition: AppManager.cpp:59
+
const int getAppWidth() const
Getter for the window&#39;s width.
Definition: AppManager.hpp:22
+
Definition: AppManager.hpp:9
+
int start(char **argv)
method which launch the application
Definition: AppManager.cpp:62
+
+
+ + + + diff --git a/doc/html/_b_box_8hpp_source.html b/doc/html/_b_box_8hpp_source.html new file mode 100644 index 0000000..81d5d3d --- /dev/null +++ b/doc/html/_b_box_8hpp_source.html @@ -0,0 +1,100 @@ + + + + + + + +SpacImac Runner: include/glimac/BBox.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
BBox.hpp
+
+
+
1 #pragma once
2 
3 #include "glm.hpp"
4 
5 namespace glimac {
6 
7 struct BBox3f
8 {
9  static const auto dim = 3;
10  glm::vec3 lower, upper;
11 
12  BBox3f ( ) { }
13  BBox3f ( const BBox3f& other ) { lower = other.lower; upper = other.upper; }
14  BBox3f& operator=( const BBox3f& other ) { lower = other.lower; upper = other.upper; return *this; }
15 
16  BBox3f ( const glm::vec3& v ) : lower(v), upper(v) {}
17  BBox3f ( const glm::vec3& lower, const glm::vec3& upper ) : lower(lower), upper(upper) {}
18 
19  void grow(const BBox3f& other) { lower = glm::min(lower,other.lower); upper = glm::max(upper,other.upper); }
20  void grow(const glm::vec3 & other) { lower = glm::min(lower,other ); upper = glm::max(upper,other ); }
21 
22  bool empty() const { for (auto i = 0u; i < dim; i++) if (lower[i] > upper[i]) return true; return false; }
23 
24  glm::vec3 size() const { return upper - lower; }
25 };
26 
28 inline bool isEmpty(const BBox3f& box) { return box.empty(); }
29 
31 inline const glm::vec3 center (const BBox3f& box) { return .5f * (box.lower + box.upper); }
32 inline const glm::vec3 center2(const BBox3f& box) { return box.lower + box.upper; }
33 
35 inline const glm::vec3 size(const BBox3f& box) { return box.size(); }
36 
38 inline const BBox3f merge( const BBox3f& a, const glm::vec3& b ) { return BBox3f(glm::min(a.lower, b ), glm::max(a.upper, b )); }
39 inline const BBox3f merge( const glm::vec3& a, const BBox3f& b ) { return BBox3f(glm::min(a , b.lower), glm::max(a , b.upper)); }
40 inline const BBox3f merge( const BBox3f& a, const BBox3f& b ) { return BBox3f(glm::min(a.lower, b.lower), glm::max(a.upper, b.upper)); }
41 inline const BBox3f merge( const BBox3f& a, const BBox3f& b, const BBox3f& c ) { return merge(a,merge(b,c)); }
42 inline const BBox3f& operator+=( BBox3f& a, const BBox3f& b ) { return a = merge(a,b); }
43 inline const BBox3f& operator+=( BBox3f& a, const glm::vec3& b ) { return a = merge(a,b); }
44 
46 inline BBox3f merge(const BBox3f& a, const BBox3f& b, const BBox3f& c, const BBox3f& d) {
47  return merge(merge(a,b),merge(c,d));
48 }
49 
51 inline BBox3f merge(const BBox3f& a, const BBox3f& b, const BBox3f& c, const BBox3f& d,
52  const BBox3f& e, const BBox3f& f, const BBox3f& g, const BBox3f& h) {
53  return merge(merge(a,b,c,d),merge(e,f,g,h));
54 }
55 
57 inline bool operator==( const BBox3f& a, const BBox3f& b ) { return a.lower == b.lower && a.upper == b.upper; }
58 inline bool operator!=( const BBox3f& a, const BBox3f& b ) { return a.lower != b.lower || a.upper != b.upper; }
59 
61 inline BBox3f operator *( const float& a, const BBox3f& b ) { return BBox3f(a*b.lower,a*b.upper); }
62 
64 inline const BBox3f intersect( const BBox3f& a, const BBox3f& b ) { return BBox3f(glm::max(a.lower, b.lower), glm::min(a.upper, b.upper)); }
65 inline const BBox3f intersect( const BBox3f& a, const BBox3f& b, const BBox3f& c ) { return intersect(a,intersect(b,c)); }
66 
68 inline bool disjoint( const BBox3f& a, const BBox3f& b )
69 { const glm::vec3 d = glm::min(a.upper, b.upper) - glm::max(a.lower, b.lower); for ( size_t i = 0 ; i < BBox3f::dim ; i++ ) if ( d[i] < 0.f ) return true; return false; }
70 inline bool disjoint( const BBox3f& a, const glm::vec3& b )
71 { const glm::vec3 d = glm::min(a.upper, b) - glm::max(a.lower, b); for ( size_t i = 0 ; i < BBox3f::dim ; i++ ) if ( d[i] < 0.f ) return true; return false; }
72 inline bool disjoint( const glm::vec3& a, const BBox3f& b )
73 { const glm::vec3 d = glm::min(a, b.upper) - glm::max(a, b.lower); for ( size_t i = 0 ; i < BBox3f::dim ; i++ ) if ( d[i] < 0.f ) return true; return false; }
74 
76 inline bool conjoint( const BBox3f& a, const BBox3f& b )
77 { const glm::vec3 d = glm::min(a.upper, b.upper) - glm::max(a.lower, b.lower); for ( size_t i = 0 ; i < BBox3f::dim ; i++ ) if ( d[i] < 0.f ) return false; return true; }
78 inline bool conjoint( const BBox3f& a, const glm::vec3& b )
79 { const glm::vec3 d = glm::min(a.upper, b) - glm::max(a.lower, b); for ( size_t i = 0 ; i < BBox3f::dim ; i++ ) if ( d[i] < 0.f ) return false; return true; }
80 inline bool conjoint( const glm::vec3& a, const BBox3f& b )
81 { const glm::vec3 d = glm::min(a, b.upper) - glm::max(a, b.lower); for ( size_t i = 0 ; i < BBox3f::dim ; i++ ) if ( d[i] < 0.f ) return false; return true; }
82 
84 inline bool subset( const BBox3f& a, const BBox3f& b )
85 {
86  for ( size_t i = 0 ; i < BBox3f::dim ; i++ ) if ( a.lower[i]*1.00001f < b.lower[i] ) return false;
87  for ( size_t i = 0 ; i < BBox3f::dim ; i++ ) if ( a.upper[i] > b.upper[i]*1.00001f ) return false;
88  return true;
89 }
90 
92 inline std::ostream& operator<<(std::ostream& cout, const BBox3f& box) {
93  return cout << "[" << box.lower << "; " << box.upper << "]";
94 }
95 
96 inline void boundingSphere(const BBox3f& bbox, glm::vec3& c,
97  float& radius) {
98  c = center(bbox);
99  radius = glm::length(size(bbox)) * 0.5f;
100 }
101 
102 }
Definition: BBox.hpp:7
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_character_8hpp_source.html b/doc/html/_character_8hpp_source.html new file mode 100644 index 0000000..9fb23fb --- /dev/null +++ b/doc/html/_character_8hpp_source.html @@ -0,0 +1,110 @@ + + + + + + + +SpacImac Runner: include/motor_game/Character.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Character.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <string>
5 #include <GL/glew.h>
6 #include <glm/glm.hpp>
7 #include <list>
8 #include <vector>
9 
10 // héritage de class printableElement
11 #include "PrintableElement.hpp"
12 class Element;
13 
15 {
16  public:
20  Character();
21 
25  Character(const glm::vec3 &position, const float &speed, const std::string &type);
26 
28  void run();
29  void run(const int &axe);
30 
32  void up();
33 
35  void down();
36 
38  void moveLeft();
39  void moveLeft(const int &axe);
40 
42  void moveRight();
43  void moveRight(const int &axe);
44 
45  inline void setSpeed(float const &inSpeed){
46  m_speed = inSpeed;
47  }
48 
49  inline float getSpeed() const {
50  return m_speed;
51  }
52 
53  void translate(const float &x, const float &z);
54 
55 
56 
58  bool checkCollision(const PrintableElement &b);
59 
60 
63  // bool checkCollisionMovement(const PrintableElement &b, const char &movement);
64 
67  // void scanList(std::list<Element> &list, const char &movement);
68 
69 
70 
71  //void scanVec(std::vector<std::vector<std::vector<Element>>> &vecList, const char &movement);
72 
73  //const Element* scanList(const std::list<Element> &list, const char &movement);
74 
76  virtual void printElement() const;
77 
79 
81  ~Character();
82 
83 
84  protected:
85  float m_speed;
86 
87 };
~Character()
default destructor of class character
Definition: Character.cpp:14
+
Definition: Element.hpp:11
+
void run()
method allowing the character to move forward on the z axis
Definition: Character.cpp:23
+
void up()
method allowing the character to jump up the y axis
Definition: Character.cpp:75
+
bool checkCollision(const PrintableElement &b)
method checking the collision between a character instance and a printableElement instance which is p...
Definition: Character.cpp:97
+
void moveRight()
method allowing the character to move right along the x axis
Definition: Character.cpp:59
+
Definition: PrintableElement.hpp:11
+
Character()
Definition: Character.cpp:6
+
void down()
method allowing the character to crawl under obstacles: their height is then 1 instead of 2 ...
Definition: Character.cpp:82
+
Definition: Character.hpp:14
+
void moveLeft()
method allowing the character to move left along the x axis
Definition: Character.cpp:42
+
virtual void printElement() const
brief method to display the value of our Element&#39;s attributes: TO ERASE ????
Definition: Character.cpp:17
+
+
+ + + + diff --git a/doc/html/_coin_8hpp_source.html b/doc/html/_coin_8hpp_source.html new file mode 100644 index 0000000..0501dd9 --- /dev/null +++ b/doc/html/_coin_8hpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: include/motor_game/Coin.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Coin.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <string>
5 #include <GL/glew.h>
6 #include <glm/glm.hpp>
7 #include "Element.hpp"
8 #include "Hero.hpp"
9 
10 class Coin : public Element
11 {
12  public:
14  Coin();
15 
18  Coin(const glm::vec3 &position, const unsigned int &value, const std::string &type="Coin");
19 
21  inline const int value() const {
22  return m_value;
23  }
24 
26  ~Coin();
27 
29  void printElement() const;
30 
33  void collide(Hero &hero);
34 
35  private:
36  unsigned int m_value ;
38 };
Definition: Element.hpp:11
+
Definition: Coin.hpp:10
+
~Coin()
default destructor of our Coin
Definition: Coin.cpp:13
+
Definition: Hero.hpp:12
+
void printElement() const
brief method to display the value of Coin&#39;s attributes
Definition: Coin.cpp:22
+
void collide(Hero &hero)
Definition: Coin.cpp:16
+
const int value() const
brief method to retrieve the value of the Coin
Definition: Coin.hpp:21
+
Coin()
default constructor of class Coin
Definition: Coin.cpp:5
+
+
+ + + + diff --git a/doc/html/_cone_8hpp_source.html b/doc/html/_cone_8hpp_source.html new file mode 100644 index 0000000..f311bab --- /dev/null +++ b/doc/html/_cone_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: include/glimac/Cone.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Cone.hpp
+
+
+
1 #pragma once
2 
3 #include <vector>
4 #include "common.hpp"
5 #include "Object.hpp"
6 
7 namespace glimac {
8 
9 // Représente un cone ouvert discrétisé dont la base est centrée en (0, 0, 0) (dans son repère local)
10 // Son axe vertical est (0, 1, 0) et ses axes transversaux sont (1, 0, 0) et (0, 0, 1)
11 class Cone :public Object {
12  // Alloue et construit les données (implantation dans le .cpp)
13  void build(GLfloat height, GLfloat radius, GLsizei discLat, GLsizei discHeight);
14 
15 public:
16  // Constructeur: alloue le tableau de données et construit les attributs des vertex
17  Cone(GLfloat height=1, GLfloat radius=1, GLsizei discLat=100, GLsizei discHeight=100):
18  m_nVertexCount(0) {
19  build(height, radius, discLat, discHeight); // Construction (voir le .cpp)
20  }
21 
22  // Renvoit le pointeur vers les données
23  const ShapeVertex* getDataPointer() const {
24  return &m_Vertices[0];
25  }
26 
27  // Renvoit le nombre de vertex
28  GLsizei getVertexCount() const {
29  return m_nVertexCount;
30  }
31 
32 
33  void vboManager(GLuint &vbo);
34  void vaoManager(GLuint &vao,GLuint &vbo);
35 
36  inline
37  GLuint getVao() const
38  {
39  return m_vao;
40  }
41 
42  void draw();
43 
44  void description()
45  {
46  std::cout<<"Je suis un Cone"<<std::endl;
47  }
48 
49 private:
50  GLuint m_vbo,m_vao;
51  std::vector<ShapeVertex> m_Vertices;
52  GLsizei m_nVertexCount; // Nombre de sommets
53 };
54 
55 }
Definition: common.hpp:8
+
Definition: Object.hpp:9
+
Definition: Cone.hpp:11
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_element_8hpp_source.html b/doc/html/_element_8hpp_source.html new file mode 100644 index 0000000..7639afa --- /dev/null +++ b/doc/html/_element_8hpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: include/motor_game/Element.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Element.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <string>
5 #include <GL/glew.h>
6 #include <glm/glm.hpp>
7 
8 #include "PrintableElement.hpp"
9 class Hero;
10 
11 class Element : public PrintableElement
12 {
13  public:
16  Element();
17 
20  Element(const glm::vec3 &position, const std::string &type);
21 
23  virtual void printElement() const;
24 
26  virtual void collide(Hero &hero);
27 
29  inline void collision(Hero &hero)
30  {
31  this->collide(hero);
32  }
33 
35  ~Element();
36 
37 };
Definition: Element.hpp:11
+
Definition: Hero.hpp:12
+
virtual void printElement() const
brief method to display the value of Element&#39;s attributes
Definition: Element.cpp:16
+
Definition: PrintableElement.hpp:11
+
Element()
Definition: Element.cpp:4
+
void collision(Hero &hero)
brief method to implement the polymorphism of the collide method for different inherited Element clas...
Definition: Element.hpp:29
+
~Element()
default destructor of our Element
Definition: Element.cpp:13
+
virtual void collide(Hero &hero)
method to determine the behavior of an End when the player is colliding with it
Definition: Element.cpp:22
+
+
+ + + + diff --git a/doc/html/_end_8hpp_source.html b/doc/html/_end_8hpp_source.html new file mode 100644 index 0000000..067de01 --- /dev/null +++ b/doc/html/_end_8hpp_source.html @@ -0,0 +1,107 @@ + + + + + + + +SpacImac Runner: include/motor_game/End.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
End.hpp
+
+
+
1 #pragma once
2 
3 #include "Element.hpp"
4 #include "Hero.hpp"
5 
6 namespace motor_game{
9  class End : public Element
10  {
11  public :
13  End() = default;
14 
17  inline End(const glm::vec3 &position, const std::string &type = "End")
18  : Element(position, type) {}
19 
21  void collide(Hero &hero);
22 
24  void printElement() const;
25 
27  ~End() = default;
28 
29  };
30 }
Definition: Element.hpp:11
+
Definition: End.hpp:6
+
Definition: Hero.hpp:12
+
~End()=default
default destructor of our End
+
End(const glm::vec3 &position, const std::string &type="End")
Definition: End.hpp:17
+
void collide(Hero &hero)
method to determine the behavior of an End when the player is colliding with it
Definition: End.cpp:5
+
End()=default
default constructor of class End
+
void printElement() const
brief method to display the value of End&#39;s attributes
Definition: End.cpp:9
+
Definition: End.hpp:9
+
+
+ + + + diff --git a/doc/html/_enemy_8hpp_source.html b/doc/html/_enemy_8hpp_source.html new file mode 100644 index 0000000..b76e8d8 --- /dev/null +++ b/doc/html/_enemy_8hpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: include/motor_game/Enemy.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Enemy.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <string>
5 #include <GL/glew.h>
6 #include <glm/glm.hpp>
7 
8  #include "Character.hpp"
9 #include "Hero.hpp"
10 
11 class Enemy : public Character
12 {
13  public:
15  Enemy();
16 
19  Enemy(const glm::vec3 &position, const float &speed, const std::string &type="Enemy");
20 
21  // A VOIR SI ON GARDE : fonction appelée dans la fonction collide ???
22  void killHero();
23 
25  void collide(Hero &hero);
26 
28  void printElement() const;
29 
31  ~Enemy();
32 
33 
34  protected:
35 
36 
37 };
Definition: Hero.hpp:12
+
void printElement() const
brief method to display the value of Enemy&#39;s attributes
Definition: Enemy.cpp:16
+
void collide(Hero &hero)
method to determine the behavior of an Enemy when the player is colliding with it ...
+
Enemy()
default constructor of class Enemy
Definition: Enemy.cpp:5
+
~Enemy()
default destructor of our Enemy
Definition: Enemy.cpp:13
+
Definition: Character.hpp:14
+
void killHero()
constructor with parameters
Definition: Enemy.cpp:21
+
Definition: Enemy.hpp:11
+
+
+ + + + diff --git a/doc/html/_except_i_m_a_c_8hpp_source.html b/doc/html/_except_i_m_a_c_8hpp_source.html new file mode 100644 index 0000000..3fdb74e --- /dev/null +++ b/doc/html/_except_i_m_a_c_8hpp_source.html @@ -0,0 +1,100 @@ + + + + + + + +SpacImac Runner: include/exception/ExceptIMAC.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ExceptIMAC.hpp
+
+
+
1 #ifndef ERREUR_HPP
2 #define ERREUR_HPP
3 
4 #pragma once
5 
6 #include <exception>
7 #include <iostream>
8 #include <string>
9 #include <sstream>
10 
11 namespace cpp_IMAC{
12 
13  class ExceptIMAC : public std::exception{
14  public :
15  // CONSTRUCTOR AND DESTRUCTOR
16  ExceptIMAC(
17  const std::string &description,
18  const std::string &filename,
19  const unsigned int line
20  ) throw();
21  ~ExceptIMAC() throw() = default;
22 
23 
24  const char* what() const throw(){
25  return m_what.c_str();
26  }
27 
28  private :
29  // ATTRIBUTE
30  std::string m_description;
31  std::string m_filename;
32  unsigned int m_line;
33  std::string m_what;
34  };
35 
36 }
37 
38 //macro (cf TP) --> pour que le code soit recopié par le compilateur,
39 //pour avoir la bonne ligne et le bon fichier
40 #define THROW_EXCEPTION(str) throw cpp_IMAC::ExceptIMAC(str, __FILE__, __LINE__)
41 
42 #endif
Definition: ExceptIMAC.hpp:13
+
Definition: ExceptIMAC.hpp:11
+
+
+ + + + diff --git a/doc/html/_file_path_8hpp_source.html b/doc/html/_file_path_8hpp_source.html new file mode 100644 index 0000000..8aaf053 --- /dev/null +++ b/doc/html/_file_path_8hpp_source.html @@ -0,0 +1,107 @@ + + + + + + + +SpacImac Runner: include/glimac/FilePath.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
FilePath.hpp
+
+
+
1 #pragma once
2 
3 #include <string>
4 
5 namespace glimac {
6 
7 class FilePath {
8 public:
9 #ifdef _WIN32
10  static const char PATH_SEPARATOR = '\\';
11 #else
12  static const char PATH_SEPARATOR = '/';
13 #endif
14 
15  FilePath() = default;
16 
17  FilePath(const char* filepath): m_FilePath(filepath) {
18  format();
19  }
20 
21  FilePath(const std::string& filepath): m_FilePath(filepath) {
22  format();
23  }
24 
25  operator std::string() const { return m_FilePath; }
26 
27  const std::string& str() const { return m_FilePath; }
28 
29  const char* c_str() const { return m_FilePath.c_str(); }
30 
31  bool empty() const {
32  return m_FilePath.empty();
33  }
34 
36  FilePath dirPath() const {
37  size_t pos = m_FilePath.find_last_of(PATH_SEPARATOR);
38  if (pos == std::string::npos) { return FilePath(); }
39  return m_FilePath.substr(0, pos);
40  }
41 
43  std::string file() const {
44  size_t pos = m_FilePath.find_last_of(PATH_SEPARATOR);
45  if (pos == std::string::npos) { return m_FilePath; }
46  return m_FilePath.substr(pos + 1);
47  }
48 
50  std::string ext() const {
51  size_t pos = m_FilePath.find_last_of('.');
52  if (pos == std::string::npos || pos == 0) { return ""; }
53  return m_FilePath.substr(pos + 1);
54  }
55 
56  bool hasExt(const std::string& ext) const {
57  int offset = (int) m_FilePath.size() - (int) ext.size();
58  return offset >= 0 && m_FilePath.substr(offset, ext.size()) == ext;
59  }
60 
62  FilePath addExt(const std::string& ext = "") const {
63  return FilePath(m_FilePath + ext);
64  }
65 
67  FilePath operator +(const FilePath& other) const {
68  if (m_FilePath.empty()) {
69  return other;
70  } else {
71  if(other.empty()) {
72  return m_FilePath;
73  }
74  FilePath copy(*this);
75  if(other.m_FilePath.front() != PATH_SEPARATOR) {
76  copy.m_FilePath += PATH_SEPARATOR;
77  }
78  copy.m_FilePath += other.m_FilePath;
79  return copy;
80  }
81  }
82 
83  bool operator ==(const FilePath& other) const {
84  return other.m_FilePath == m_FilePath;
85  }
86 
87  bool operator !=(const FilePath& other) const {
88  return !operator ==(other);
89  }
90 
92  friend std::ostream& operator<<(std::ostream& cout, const FilePath& filepath) {
93  return (cout << filepath.m_FilePath);
94  }
95 
96 private:
97  void format() {
98  for (size_t i = 0; i < m_FilePath.size(); ++i) {
99  if (m_FilePath[i] == '\\' || m_FilePath[i] == '/') {
100  m_FilePath[i] = PATH_SEPARATOR;
101  }
102  }
103  while (!m_FilePath.empty() && m_FilePath.back() == PATH_SEPARATOR) {
104  m_FilePath.pop_back();
105  }
106  }
107 
108  std::string m_FilePath;
109 };
110 
111 }
112 
113 namespace std {
114  template <>
115  struct hash<glimac::FilePath> {
116  std::size_t operator()(const glimac::FilePath& k) const {
117  return std::hash<std::string>()(k.str());
118  }
119  };
120 }
FilePath dirPath() const
Definition: FilePath.hpp:36
+
Definition: FilePath.hpp:113
+
Definition: FilePath.hpp:7
+
std::string file() const
Definition: FilePath.hpp:43
+
FilePath addExt(const std::string &ext="") const
Definition: FilePath.hpp:62
+
FilePath operator+(const FilePath &other) const
Definition: FilePath.hpp:67
+
std::string ext() const
Definition: FilePath.hpp:50
+
Definition: BBox.hpp:5
+
friend std::ostream & operator<<(std::ostream &cout, const FilePath &filepath)
Definition: FilePath.hpp:92
+
+
+ + + + diff --git a/doc/html/_floor_8hpp_source.html b/doc/html/_floor_8hpp_source.html new file mode 100644 index 0000000..9e60743 --- /dev/null +++ b/doc/html/_floor_8hpp_source.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: include/motor_game/Floor.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Floor.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <string>
5 #include "Element.hpp"
6 
7 
8 // TO ERASE ???? we don't have to check floor collision
9 class Floor : public Element
10 {
11  public:
13  Floor();
14 
15 
16  Floor(const glm::vec3 &position, const std::string &type = "Floor");
17 
19  void printElement() const;
20 
22  ~Floor();
23 
24 // TO ADD : collide ??
25 
26 };
Definition: Element.hpp:11
+
Definition: Floor.hpp:9
+
void printElement() const
brief method to display the value of Floor&#39;s attributes
Definition: Floor.cpp:16
+
~Floor()
default destructor of our Floor
Definition: Floor.cpp:13
+
Floor()
default constructor of class Floor
Definition: Floor.cpp:5
+
+
+ + + + diff --git a/doc/html/_font_8hpp_source.html b/doc/html/_font_8hpp_source.html new file mode 100644 index 0000000..20c0b68 --- /dev/null +++ b/doc/html/_font_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: include/graphic_engine/Font.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Font.hpp
+
+
+
1 #pragma once
2 
3 #include <GL/glew.h>
4 #include "SDL/SDL.h"
5 #include "SDL/SDL_image.h"
6 #include "SDL/SDL_ttf.h"
7 //#include "AppManager.hpp"
8 
9 class Font
10 {
11 public:
13  Font();
14 
15 
18  Font(const std::string &fontPath);
19 
20  int puissance2sup(const int i);
21 
22 
24  void setFontPath(const std::string &fontPath);
25 
26  inline std::string getFontPath() const{
27  return m_fontPath;
28  }
29 
31  ~Font();
32 
33 
34  // bool loadFont(AppManager *app);
35  void loadFont();
36 
37 
38 private:
39  std::string m_fontPath;
40 };
Definition: Font.hpp:9
+
Font()
default constructor
Definition: Font.cpp:6
+
void setFontPath(const std::string &fontPath)
setter for filePath
Definition: Font.cpp:14
+
~Font()
default destructor
Definition: Font.cpp:18
+
+
+ + + + diff --git a/doc/html/_freely_camera_8hpp_source.html b/doc/html/_freely_camera_8hpp_source.html new file mode 100644 index 0000000..094c033 --- /dev/null +++ b/doc/html/_freely_camera_8hpp_source.html @@ -0,0 +1,100 @@ + + + + + + + +SpacImac Runner: include/glimac/FreelyCamera.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
FreelyCamera.hpp
+
+
+
1 #pragma once
2 
3 #include <glm/glm.hpp>
4 #include <glm/gtc/random.hpp>
5 #include <cmath>
6 
7 namespace glimac {
8 
9 
11 {
12 public:
13 
14  FreelyCamera()
15  {
16  m_Position = ()
17  };
18  FreelyCamera(glm::vec3 _Position);
19 
20 
21 
22 
23 private:
24 
25  void computeDirectionVectors()
26  {
27  m_FrontVector[0] = cos(m_fTheta)*sin(m_fPhi);
28  m_FrontVector[1] = sin(m_fTheta);
29  m_FrontVector[2] = cos(m_fTheta)*cos(m_fPhi);
30 
31  m_LeftVector[0] = sin(m_fPhi +(M_PI/2));
32  m_LeftVector[1] = 0;
33  m_LeftVector[2] = cos(m_fPhi + (M_PI/2));
34 
35  m_UpVector = m_FrontVector * m_LeftVector;
36  };
37 
38  glm::vec3 m_Position;
39  glm::vec3 m_FrontVector;
40  glm::vec3 m_LeftVector;
41  glm::vec3 m_UpVector;
42 
43  float m_fPhi;
44  float m_fTheta;
45 
46 
47 
48 
49 
50 };
51 
52 }
53 
54 
Definition: FreelyCamera.hpp:10
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_gap_8hpp_source.html b/doc/html/_gap_8hpp_source.html new file mode 100644 index 0000000..29c4298 --- /dev/null +++ b/doc/html/_gap_8hpp_source.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: include/motor_game/Gap.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Gap.hpp
+
+
+
1 #pragma once
2 
3 #include <GL/glew.h>
4 #include <glm/glm.hpp>
5 #include <iostream>
6 #include <string>
7 #include "Element.hpp"
8 class Hero;
9 
10 namespace motor_game{
11 
12  class Gap : public Element
13  {
14  public:
15  Gap();
18  /*Gap(const glm::vec3 &position = glm::vec3(0), const std::string &type = "Gap")
19  : m_position(position), m_type(type) {}*/
20  Gap(const glm::vec3 &position, const std::string &type="Gap");
21 
23  ~Gap() = default;
24 
26  void collide(Hero &hero);
27 
29  void printElement() const;
30  };
31 }
Definition: Element.hpp:11
+
Definition: End.hpp:6
+
Definition: Hero.hpp:12
+
Definition: Gap.hpp:12
+
void collide(Hero &hero)
method determining the behavior of a Gap when the player is colliding with it
Definition: Gap.cpp:12
+
void printElement() const
brief method to display the value of Gap&#39;s attributes
Definition: Gap.cpp:16
+
~Gap()=default
brief default destructor
+
+
+ + + + diff --git a/doc/html/_geometry_8hpp_source.html b/doc/html/_geometry_8hpp_source.html new file mode 100644 index 0000000..c083c12 --- /dev/null +++ b/doc/html/_geometry_8hpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: include/glimac/Geometry.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Geometry.hpp
+
+
+
1 #pragma once
2 
3 #include <glm/glm.hpp>
4 #include <vector>
5 #include <string>
6 #include "Image.hpp"
7 #include "FilePath.hpp"
8 #include "BBox.hpp"
9 
10 namespace glimac {
11 
12 class Geometry {
13 public:
14  struct Vertex {
15  glm::vec3 m_Position;
16  glm::vec3 m_Normal;
17  glm::vec2 m_TexCoords;
18  };
19 
20  struct Mesh {
21  std::string m_sName;
22  unsigned int m_nIndexOffset; // Offset in the index buffer
23  unsigned int m_nIndexCount; // Number of indices
24  int m_nMaterialIndex; // -1 if no material assigned
25 
26  Mesh(std::string name, unsigned int indexOffset, unsigned int indexCount, int materialIndex):
27  m_sName(move(name)), m_nIndexOffset(indexOffset), m_nIndexCount(indexCount), m_nMaterialIndex(materialIndex) {
28  }
29  };
30 
31  struct Material {
32  glm::vec3 m_Ka;
33  glm::vec3 m_Kd;
34  glm::vec3 m_Ks;
35  glm::vec3 m_Tr;
36  glm::vec3 m_Le;
37  float m_Shininess;
38  float m_RefractionIndex;
39  float m_Dissolve;
40  const Image* m_pKaMap;
41  const Image* m_pKdMap;
42  const Image* m_pKsMap;
43  const Image* m_pNormalMap;
44  };
45 
46 private:
47  std::vector<Vertex> m_VertexBuffer;
48  std::vector<unsigned int> m_IndexBuffer;
49  std::vector<Mesh> m_MeshBuffer;
50  std::vector<Material> m_Materials;
51  BBox3f m_BBox;
52 
53  void generateNormals(unsigned int meshIndex);
54 
55 public:
56  const Vertex* getVertexBuffer() const {
57  return m_VertexBuffer.data();
58  }
59 
60  size_t getVertexCount() const {
61  return m_VertexBuffer.size();
62  }
63 
64  const unsigned int* getIndexBuffer() const {
65  return m_IndexBuffer.data();
66  }
67 
68  size_t getIndexCount() const {
69  return m_IndexBuffer.size();
70  }
71 
72  const Mesh* getMeshBuffer() const {
73  return m_MeshBuffer.data();
74  }
75 
76  size_t getMeshCount() const {
77  return m_MeshBuffer.size();
78  }
79 
80  bool loadOBJ(const FilePath& filepath, const FilePath& mtlBasePath, bool loadTextures = true);
81 
82  const BBox3f& getBoundingBox() const {
83  return m_BBox;
84  }
85 };
86 
87 }
Definition: BBox.hpp:7
+
Definition: Image.hpp:12
+
Definition: Geometry.hpp:12
+
Definition: FilePath.hpp:7
+
Definition: Geometry.hpp:31
+
Definition: Geometry.hpp:14
+
Definition: Geometry.hpp:20
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_grid_8hpp_source.html b/doc/html/_grid_8hpp_source.html new file mode 100644 index 0000000..13653a0 --- /dev/null +++ b/doc/html/_grid_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: include/glimac/Grid.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Grid.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <vector>
5 #include "common.hpp"
6 #include "Object.hpp"
7 
8 
9 namespace glimac{
10 
11 class Grid :public Object
12 {
13 
14  void build();
15 
16 public:
17 
18  Grid()
19  {
20  build(); // Construction (voir le .cpp)
21  }
22 
23  // Renvoit le pointeur vers les données
24  const ShapeVertex* getDataPointer() const {
25  return &m_Vertices[0];
26  }
27 
28  // Renvoit le nombre de vertex
29  GLsizei getVertexCount() const {
30  return m_nVertexCount;
31  }
32 
33  void vboManager(GLuint &vbo);
34  void vaoManager(GLuint &vao,GLuint &vbo);
35 
36  inline
37  GLuint getVao() const
38  {
39  return m_vao;
40  }
41 
42  void draw();
43 
44  void description()
45  {
46  std::cout<<"Je suis un Grid"<<std::endl;
47  }
48 
49 private:
50 
51  GLuint m_vbo,m_vao;
52  std::vector<ShapeVertex> m_Vertices;
53  GLsizei m_nVertexCount = 0; // Nombre de sommets
54 
55 };
56 
57 }
Definition: common.hpp:8
+
Definition: Object.hpp:9
+
Definition: Grid.hpp:11
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_hero_8hpp_source.html b/doc/html/_hero_8hpp_source.html new file mode 100644 index 0000000..ae61f86 --- /dev/null +++ b/doc/html/_hero_8hpp_source.html @@ -0,0 +1,109 @@ + + + + + + + +SpacImac Runner: include/motor_game/Hero.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Hero.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <string>
5 #include <GL/glew.h>
6 #include <glm/glm.hpp>
7 #include "Character.hpp"
8 
9 #include "Element.hpp"
10 #include "Map.hpp"
11 
12 class Hero : public Character
13 {
14  public:
16  Hero();
17 
19  Hero(const glm::vec3 &position, const float &speed, const std::string &type = "Hero");
20 
22  void printElement() const;
23 
25  ~Hero();
26 
29 
30  inline void setScore(float &inScore){
31  m_score += inScore;
32  }
33 
35  inline int getScore() const{
36  return m_score;
37  }
38 
42  bool scanArray(Element* (*list)[50][50], const char &movement);
43 
44  //bool checkCollide(Map map, const char &movement);
45 
46  bool checkCollision(const PrintableElement &b);
47 
48 
49  private:
50  unsigned int m_score;
52 };
int getScore() const
brief method to retrieve the score of Hero
Definition: Hero.hpp:35
+
bool scanArray(Element *(*list)[50][50], const char &movement)
+
bool checkCollision(const PrintableElement &b)
Definition: Hero.cpp:22
+
Definition: Element.hpp:11
+
void printElement() const
brief method to display the value of Hero&#39;s attributes
Definition: Hero.cpp:15
+
Definition: Hero.hpp:12
+
void setScore(float &inScore)
Definition: Hero.hpp:30
+
~Hero()
default destructor of our Hero
Definition: Hero.cpp:12
+
Definition: PrintableElement.hpp:11
+
Definition: Character.hpp:14
+
Hero()
default constructor of class Hero
Definition: Hero.cpp:4
+
+
+ + + + diff --git a/doc/html/_image_8hpp_source.html b/doc/html/_image_8hpp_source.html new file mode 100644 index 0000000..2065643 --- /dev/null +++ b/doc/html/_image_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: include/glimac/Image.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Image.hpp
+
+
+
1 #pragma once
2 
3 #include <vector>
4 #include <memory>
5 #include <unordered_map>
6 
7 #include "glm.hpp"
8 #include "FilePath.hpp"
9 
10 namespace glimac {
11 
12 class Image {
13 private:
14  unsigned int m_nWidth = 0u;
15  unsigned int m_nHeight = 0u;
16  std::unique_ptr<glm::vec4[]> m_Pixels;
17 public:
18  Image(unsigned int width, unsigned int height):
19  m_nWidth(width), m_nHeight(height), m_Pixels(new glm::vec4[width * height]) {
20  }
21 
22  unsigned int getWidth() const {
23  return m_nWidth;
24  }
25 
26  unsigned int getHeight() const {
27  return m_nHeight;
28  }
29 
30  const glm::vec4* getPixels() const {
31  return m_Pixels.get();
32  }
33 
34  glm::vec4* getPixels() {
35  return m_Pixels.get();
36  }
37 };
38 
39 std::unique_ptr<Image> loadImage(const FilePath& filepath);
40 
41 class ImageManager {
42 private:
43  static std::unordered_map<FilePath, std::unique_ptr<Image>> m_ImageMap;
44 public:
45  static const Image* loadImage(const FilePath& filepath);
46 };
47 
48 }
Definition: Image.hpp:12
+
Definition: FilePath.hpp:7
+
Definition: BBox.hpp:5
+
Definition: Image.hpp:41
+
+
+ + + + diff --git a/doc/html/_landmark_8hpp_source.html b/doc/html/_landmark_8hpp_source.html new file mode 100644 index 0000000..27412da --- /dev/null +++ b/doc/html/_landmark_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: include/glimac/Landmark.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Landmark.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <vector>
5 #include "common.hpp"
6 #include "Object.hpp"
7 
8 
9 namespace glimac{
10 
11 class Landmark :public Object
12 {
13 
14  void build();
15 
16 public:
17 
18  Landmark():
19  m_nVertexCount(6)
20  {
21  build(); // Construction (voir le .cpp)
22  }
23 
24  // Renvoit le pointeur vers les données
25  inline
26  const ShapeVertex* getDataPointer() const {
27  return &m_Vertices[0];
28  }
29 
30  // Renvoit le nombre de vertex
31  inline
32  GLsizei getVertexCount() const {
33  return m_nVertexCount;
34  }
35 
36  void vboManager(GLuint &vbo);
37  void vaoManager(GLuint &vao,GLuint &vbo);
38 
39  inline
40  GLuint getVao() const
41  {
42  return m_vao;
43  }
44 
45  void draw();
46 
47  void description()
48  {
49  std::cout<<"Je suis un repere"<<std::endl;
50  }
51 
52 private:
53 
54  GLuint m_vbo,m_vao;
55  std::vector<ShapeVertex> m_Vertices;
56  GLsizei m_nVertexCount; // Nombre de sommets
57 
58 };
59 
60 }
Definition: common.hpp:8
+
Definition: Object.hpp:9
+
Definition: Landmark.hpp:11
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_map_8hpp_source.html b/doc/html/_map_8hpp_source.html new file mode 100644 index 0000000..c884fef --- /dev/null +++ b/doc/html/_map_8hpp_source.html @@ -0,0 +1,112 @@ + + + + + + + +SpacImac Runner: include/motor_game/Map.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Map.hpp
+
+
+
1 #ifndef MAP_HPP
2 #define MAP_HPP
3 #pragma once
4 
5 #include <vector>
6 
7 #include "Element.hpp"
8 #include "negative_vector.hpp"
9 
10 namespace motor_game{
13  class Map{
14  public :
15  Map() = delete;
16  Map(const int &x, const int &y, const int &z);
17 
20  Element *element(const int &x, const int &y, const int &z) const;
21 
22  inline const unsigned int size(){
23  return m_elements.size();
24  }
25 
26  inline const negative_vector<Element*> getVector(){
27  return m_elements;
28  }
29 
30  Element* getElementi(const int i) const;
33  void element(
34  const int &x, const int &y, const int &z,
35  Element *element
36  );
37 
38 
40  inline const int &x() const{
41  return m_x;
42  }
43 
45  inline const int &y() const{
46  return m_y;
47  }
48 
49 
51  inline const int &z() const{
52  return m_z;
53  }
54 
56  inline int projectionX() const{
57  return m_projectionX;
58  }
59 
61  inline int projectionY() const{
62  return m_projectionY;
63  }
64 
66  inline int projectionZ() const{
67  return m_projectionZ;
68  }
69 
71  inline void projectionX(const int x){
72  m_projectionX = x;
73  }
74 
76  inline void projectionY(const int y){
77  m_projectionY = y;
78  }
79 
81  inline void projectionZ(const int z){
82  m_projectionZ = z;
83  }
84 
85  void printElement();
86  void translateMap(const float &x, const float &z);
87  void rotateRight();
88  void rotateLeft();
89  void eraseElement(const int &x, const int &y, const int &z);
90 
91 
92 
93  private :
94  negative_vector<Element*> m_elements;
95 
96  int m_x=0;
97  int m_y=2;
98  int m_z=0;
99 
100  int m_projectionX = -2;
101  int m_projectionY = -3;
102  int m_projectionZ = -3;
103 
104 
105  };
106 
107 }
108 #endif
Definition: Element.hpp:11
+
Definition: End.hpp:6
+
const int & y() const
getter of y-coordinate
Definition: Map.hpp:45
+
contains the level elements, and the dimensions&#39; level
Definition: Map.hpp:13
+
const int & z() const
getter of z-coordinate
Definition: Map.hpp:51
+
int projectionZ() const
getter of projection on Z
Definition: Map.hpp:66
+
int projectionX() const
getter of projection on X
Definition: Map.hpp:56
+
const int & x() const
getter of x-coordiconst unsigned int &x, const unsigned int &y, const unsigned int &znate ...
Definition: Map.hpp:40
+
Definition: negative_vector.hpp:3
+
void projectionZ(const int z)
getter of projection on Z
Definition: Map.hpp:81
+
Element * element(const int &x, const int &y, const int &z) const
getter of an Element
Definition: Map.cpp:12
+
void projectionX(const int x)
setter of projection on X
Definition: Map.hpp:71
+
int projectionY() const
getter of projection on Y
Definition: Map.hpp:61
+
void projectionY(const int y)
getter of projection on Y
Definition: Map.hpp:76
+
+
+ + + + diff --git a/doc/html/_menu_8hpp_source.html b/doc/html/_menu_8hpp_source.html new file mode 100644 index 0000000..ce5852d --- /dev/null +++ b/doc/html/_menu_8hpp_source.html @@ -0,0 +1,104 @@ + + + + + + + +SpacImac Runner: include/Menu.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Menu.hpp
+
+
+
1 #include <glimac/SDLWindowManager.hpp>
2 #include <GL/glew.h>
3 #include <iostream>
4 #include <glimac/common.hpp>
5 #include <glimac/Sphere.hpp>
6 #include <glimac/cube.hpp>
7 #include <glimac/Object.hpp>
8 #include <glimac/Program.hpp>
9 #include "TrackballCamera.hpp"
10 #include <glimac/FilePath.hpp>
11 #include <glimac/Image.hpp>
12 #include <glimac/Landmark.hpp>
13 #include <glimac/Grid.hpp>
14 #include <glm/glm.hpp>
15 #include <glm/gtc/random.hpp>
16 #include <vector>
17 #include <cstdlib>
18 //#include <GLFW/glfw3.h>
19 #include <fstream>
20 
21 #pragma once
22 
24 class Menu
25 {
26 
28  void build();
29 
30 public:
31  Menu()
32  {
33  build();
34  }
35 
37  inline
38  bool visibility() const
39  {
40  return isVisible;
41  }
42 
44  inline
45  void setVisibility(bool inBool)
46  {
47  isVisible = inBool;
48  }
49 
51  inline
52  int type() const
53  {
54  return m_type;
55  }
56 
58  inline
59  void type(const int inType)
60  {
61  m_type = inType;
62  }
63 
64  void initMenu(GLuint &vbo,GLuint &vao);
65  void displayMenu() const;
66 
67  // Renvoit le pointeur vers les données
68  const ShapeVertex* getDataPointer() const {
69  return &m_Vertices[0];
70  }
71 
72  // Renvoit le nombre de vertex
73  GLsizei getVertexCount() const {
74  return m_nVertexCount;
75  }
76 
77  void vboManager(GLuint &vbo);
78  void vaoManager(GLuint &vao,GLuint &vbo);
79 
80  int onMouseEvent(glm::ivec2 position);
81 
82 private:
83  bool isVisible = true;
84  int m_type = 0;
85 
86  GLuint m_vbo,m_vao;
87  std::vector<ShapeVertex> m_Vertices;
88  GLsizei m_nVertexCount = 6;
89 
90 
91 };
Class Menu.
Definition: Menu.hpp:24
+
void type(const int inType)
Brief setter of menu type.
Definition: Menu.hpp:59
+
int type() const
Brief getter menu type.
Definition: Menu.hpp:52
+
Definition: common.hpp:8
+
void setVisibility(bool inBool)
Brief Setter Menu visibility.
Definition: Menu.hpp:45
+
bool visibility() const
Brief Getter Menu visibility.
Definition: Menu.hpp:38
+
+
+ + + + diff --git a/doc/html/_object_8hpp_source.html b/doc/html/_object_8hpp_source.html new file mode 100644 index 0000000..04dbad7 --- /dev/null +++ b/doc/html/_object_8hpp_source.html @@ -0,0 +1,101 @@ + + + + + + + +SpacImac Runner: include/glimac/Object.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Object.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <vector>
5 #include "common.hpp"
6 
7 namespace glimac{
8 
9  class Object
10  {
11  //virtual void build() = 0;
12 
13  public:
14 
15  Object()
16  {}
17 
18  // Renvoit le pointeur vers les données
19  inline
20  const ShapeVertex* getDataPointer() const {
21  return &m_Vertices[0];
22  }
23 
24  // Renvoit le nombre de vertex
25  inline
26  GLsizei getVertexCount() const {
27  return m_nVertexCount;
28  }
29 
30  virtual void vboManager(GLuint &vbo);
31  virtual void vaoManager(GLuint &vao,GLuint &vbo);
32 
33  inline
34  GLuint getVao() const
35  {
36  return m_vao;
37  }
38 
39  virtual void draw()
40  {}
41 
42 
43 
44 
45 /********************************************TEST********/
46  int x = 0;
47  int y = 0;
48 /********************************************************/
49  private:
50 
51  GLuint m_vbo,m_vao;
52  std::vector<ShapeVertex> m_Vertices;
53  GLsizei m_nVertexCount; // Nombre de sommets
54 
55 
56 
57  };
58 }
Definition: common.hpp:8
+
Definition: Object.hpp:9
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_obstacle_8hpp_source.html b/doc/html/_obstacle_8hpp_source.html new file mode 100644 index 0000000..0bbd149 --- /dev/null +++ b/doc/html/_obstacle_8hpp_source.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: include/motor_game/Obstacle.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Obstacle.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <string>
5 #include "Element.hpp"
6 class Hero;
7 
8 class Obstacle : public Element
9 {
10  public:
12  Obstacle();
15  Obstacle(const glm::vec3 &position, const std::string &type = "Obstacle");
16 
18  ~Obstacle();
19 
21  void printElement() const;
22 
24  void collide(Hero &hero);
25 
26 
27 };
Definition: Element.hpp:11
+
void printElement() const
method to display the value of Obstacle&#39;s attributes
Definition: Obstacle.cpp:16
+
Definition: Hero.hpp:12
+
Obstacle()
default constructor of class Obstacle
Definition: Obstacle.cpp:5
+
~Obstacle()
default destructor of our Floor
Definition: Obstacle.cpp:13
+
void collide(Hero &hero)
method to determine the behavior of an Obstacle when the player is colliding with it ...
Definition: Obstacle.cpp:22
+
Definition: Obstacle.hpp:8
+
+
+ + + + diff --git a/doc/html/_p_p_m_8hpp_source.html b/doc/html/_p_p_m_8hpp_source.html new file mode 100644 index 0000000..33044bf --- /dev/null +++ b/doc/html/_p_p_m_8hpp_source.html @@ -0,0 +1,117 @@ + + + + + + + +SpacImac Runner: include/motor_game/PPM.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PPM.hpp
+
+
+
1 #ifndef RUNNER_PPM_HPP
2 #define RUNNER_PPM_HPP
3 
4 #pragma once
5 
6 #include <fstream>
7 #include <string>
8 #include <vector>
9 #include <iostream>
10 
11 #include "Hero.hpp"
12 #include "Enemy.hpp"
13 #include "Map.hpp"
14 
15 namespace motor_game{
16 
17 
18  class PPM{
19  public :
20  PPM() = delete;
21 
24  inline PPM(int x,int y,int z)
25  : m_map(Map(x, y, z)) {}
26 
27  ~PPM() = default;
28 
30  inline const Map map() const{
31  return m_map;
32  }
33 
35  inline Map &map(){
36  return m_map;
37  }
38 
40  inline const Hero &hero() const{
41  return m_hero;
42  }
43 
45  inline Hero &hero(){
46  return m_hero;
47  }
48 
50  inline const Enemy &enemy() const{
51  return m_enemy;
52  }
53 
55  inline Enemy &enemy(){
56  return m_enemy;
57  }
58 
60  inline const glm::vec3 dimensions() const{
61  return glm::vec3(m_map.x(), m_map.y(), m_map.z());
62  }
63 
65  inline int x(){
66  return m_map.x();
67  }
68 
70  inline int y(){
71  return m_map.y();
72  }
73 
75  inline int z(){
76  return m_map.z();
77  }
78 
79 
80  private:
81  Map m_map;
82  Hero m_hero;
83  Enemy m_enemy;
84  };
85 
86 }
87 
88 #endif
const glm::vec3 dimensions() const
getter : returns the dimensions of the map
Definition: PPM.hpp:60
+
int y()
setter : y-dimension of the map
Definition: PPM.hpp:70
+
Definition: End.hpp:6
+
Definition: Hero.hpp:12
+
const int & y() const
getter of y-coordinate
Definition: Map.hpp:45
+
contains the level elements, and the dimensions&#39; level
Definition: Map.hpp:13
+
const int & z() const
getter of z-coordinate
Definition: Map.hpp:51
+
int x()
setter : the x-dimension of the map
Definition: PPM.hpp:65
+
Definition: PPM.hpp:18
+
const Map map() const
getter : Element vector of the level
Definition: PPM.hpp:30
+
int z()
setter : the z-dimension of the map
Definition: PPM.hpp:75
+
const int & x() const
getter of x-coordiconst unsigned int &x, const unsigned int &y, const unsigned int &znate ...
Definition: Map.hpp:40
+
PPM(int x, int y, int z)
constructor
Definition: PPM.hpp:24
+
Map & map()
setter : Element vector of the level
Definition: PPM.hpp:35
+
Hero & hero()
setter : the hero
Definition: PPM.hpp:45
+
const Hero & hero() const
getter : returns the hero
Definition: PPM.hpp:40
+
Enemy & enemy()
setter : the enemy
Definition: PPM.hpp:55
+
Definition: Enemy.hpp:11
+
const Enemy & enemy() const
getter : returns the enemy
Definition: PPM.hpp:50
+
+
+ + + + diff --git a/doc/html/_p_p_mreader_8hpp_source.html b/doc/html/_p_p_mreader_8hpp_source.html new file mode 100644 index 0000000..175e200 --- /dev/null +++ b/doc/html/_p_p_mreader_8hpp_source.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: include/motor_game/PPMreader.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PPMreader.hpp
+
+
+
1 #ifndef RUNNER_PPM_READER_HPP
2 #define RUNNER_PPM_READER_HPP
3 
4 #pragma once
5 
6 #include <string>
7 #include <cassert>
8 #include <fstream>
9 #include <string>
10 #include <iostream>
11 
12 #include "PPM.hpp"
13 #include "Element.hpp"
14 #include "End.hpp"
15 #include "Floor.hpp"
16 #include "Coin.hpp"
17 #include "Wall.hpp"
18 #include "Gap.hpp"
19 #include "Obstacle.hpp"
20 #include "Turn.hpp"
21 
22 namespace motor_game{
23  class PPMreader{
24  public:
27  PPMreader(const std::string &filename);
28 
29  PPMreader() = delete;
30 
32  ~PPMreader();
33 
35  const PPM readFile();
36 
39  void readFile(PPM &ppm);
40 
41  private :
42  // return the next valid string in the file (ie not a comment)
43  // don't manage end of file
44  const std::string nextString();
45  // verify the validity of the file, and set m_x and m_y
46  const bool validPPM();
47  std::string m_currentStr;
48  std::string m_r;
49  std::string m_g;
50  std::string m_b;
51  std::ifstream m_ppm_1;
52  int m_x=0;
53  int m_y=3;
54  int m_z=0;
55  };
56 
57 }
58 
59 #endif
Definition: End.hpp:6
+
Definition: PPM.hpp:18
+
Definition: PPMreader.hpp:23
+
const PPM readFile()
read the file and set the ppm
Definition: PPMreader.cpp:41
+
~PPMreader()
destructor
Definition: PPMreader.cpp:162
+
+
+ + + + diff --git a/doc/html/_printable_element_8hpp_source.html b/doc/html/_printable_element_8hpp_source.html new file mode 100644 index 0000000..8d2ba31 --- /dev/null +++ b/doc/html/_printable_element_8hpp_source.html @@ -0,0 +1,111 @@ + + + + + + + +SpacImac Runner: include/motor_game/PrintableElement.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PrintableElement.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <string>
5 #include <GL/glew.h>
6 #include <glm/glm.hpp>
7 #include "common.hpp"
8 
9 
10 //class Element;
12 {
13  public:
14 
18 
21  PrintableElement(const glm::vec3 &position, const std::string &type);
22 
24  inline glm::vec3 getPosition() const {
25  return m_position;
26  }
27 
29  inline void setPosition(glm::vec3 pos){
30  m_position=pos;
31  }
32 
34  inline float getX() const {
35  return m_position.x;
36  }
37 
39  inline float getY() const {
40  return m_position.y;
41  }
42 
44  inline float getZ() const {
45  return m_position.z;
46  }
47 
49  inline std::string getType() const {
50  return m_type;
51  }
52 
53 
55  virtual void printElement() const;
56 
58  inline void description()
59  {
60  this->printElement();
61  }
62 
63 
66 
67 
68  protected:
69  glm::vec3 m_position;
70  std::string m_type;
72 };
float getZ() const
method allowing us to know the z coordinate of PrintableElement
Definition: PrintableElement.hpp:44
+
glm::vec3 m_position
Definition: PrintableElement.hpp:69
+
void setPosition(glm::vec3 pos)
setter of position
Definition: PrintableElement.hpp:29
+
~PrintableElement()
default destructor of our PrintableElement
Definition: PrintableElement.cpp:13
+
float getX() const
method allowing us to know the x coordinate of PrintableElement
Definition: PrintableElement.hpp:34
+
float getY() const
method allowing us to know the y coordinate of PrintableElement
Definition: PrintableElement.hpp:39
+
std::string m_type
Definition: PrintableElement.hpp:70
+
Definition: PrintableElement.hpp:11
+
virtual void printElement() const
method to display the value of PrintableElement&#39;s attributes
Definition: PrintableElement.cpp:16
+
PrintableElement()
default constructor of class PrintableElement
Definition: PrintableElement.cpp:5
+
void description()
brief method to implement the polymorphism of the printElement method for different inherited Printab...
Definition: PrintableElement.hpp:58
+
glm::vec3 getPosition() const
method allowing us to know the x, y and z coordinates of our object
Definition: PrintableElement.hpp:24
+
std::string getType() const
method allowing us to know the type of PrintableElement
Definition: PrintableElement.hpp:49
+
+
+ + + + diff --git a/doc/html/_program_8hpp_source.html b/doc/html/_program_8hpp_source.html new file mode 100644 index 0000000..b97131d --- /dev/null +++ b/doc/html/_program_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: include/glimac/Program.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Program.hpp
+
+
+
1 #pragma once
2 
3 #include <GL/glew.h>
4 #include "Shader.hpp"
5 #include "FilePath.hpp"
6 
7 namespace glimac {
8 
9 class Program {
10 public:
11  Program(): m_nGLId(glCreateProgram()) {
12  }
13 
14  ~Program() {
15  glDeleteProgram(m_nGLId);
16  }
17 
18  Program(Program&& rvalue): m_nGLId(rvalue.m_nGLId) {
19  rvalue.m_nGLId = 0;
20  }
21 
22  Program& operator =(Program&& rvalue) {
23  m_nGLId = rvalue.m_nGLId;
24  rvalue.m_nGLId = 0;
25  return *this;
26  }
27 
28  GLuint getGLId() const {
29  return m_nGLId;
30  }
31 
32  void attachShader(const Shader& shader) {
33  glAttachShader(m_nGLId, shader.getGLId());
34  }
35 
36  bool link();
37 
38  const std::string getInfoLog() const;
39 
40  void use() const {
41  glUseProgram(m_nGLId);
42  }
43 
44 private:
45  Program(const Program&);
46  Program& operator =(const Program&);
47 
48  GLuint m_nGLId;
49 };
50 
51 // Build a GLSL program from source code
52 Program buildProgram(const GLchar* vsSrc, const GLchar* fsSrc);
53 
54 // Load source code from files and build a GLSL program
55 Program loadProgram(const FilePath& vsFile, const FilePath& fsFile);
56 
57 
58 }
Definition: Shader.hpp:11
+
Definition: FilePath.hpp:7
+
Definition: Program.hpp:9
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_s_d_l_window_manager_8hpp_source.html b/doc/html/_s_d_l_window_manager_8hpp_source.html new file mode 100644 index 0000000..e21178f --- /dev/null +++ b/doc/html/_s_d_l_window_manager_8hpp_source.html @@ -0,0 +1,100 @@ + + + + + + + +SpacImac Runner: include/glimac/SDLWindowManager.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SDLWindowManager.hpp
+
+
+
1 #pragma once
2 
3 #include <cstdint>
4 #include <SDL/SDL.h>
5 #include "glm.hpp"
6 
7 namespace glimac {
8 
10 public:
11  SDLWindowManager(uint32_t width, uint32_t height, const char* title);
12 
14 
15  bool pollEvent(SDL_Event& e);
16 
17  bool isKeyPressed(SDLKey key) const;
18 
19  // button can SDL_BUTTON_LEFT, SDL_BUTTON_RIGHT and SDL_BUTTON_MIDDLE
20  bool isMouseButtonPressed(uint32_t button) const;
21 
22  glm::ivec2 getMousePosition() const;
23 
24  void swapBuffers();
25 
26  // Return the time in seconds
27  float getTime() const;
28 };
29 
30 }
Definition: BBox.hpp:5
+
Definition: SDLWindowManager.hpp:9
+
+
+ + + + diff --git a/doc/html/_scene_8hpp_source.html b/doc/html/_scene_8hpp_source.html new file mode 100644 index 0000000..b8887ce --- /dev/null +++ b/doc/html/_scene_8hpp_source.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: include/graphic_engine/Scene.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Scene.hpp
+
+
+
1 #pragma once
2 
3 #include <glimac/Object.hpp>
4 #include <glimac/cube.hpp>
5 #include <glimac/Landmark.hpp>
6 #include <glimac/common.hpp>
7 
8 #include <vector>
9 #include <memory>
10 
11 #include "camera.hpp"
12 #include "Element.hpp"
13 #include "Map.hpp"
14 #include "Hero.hpp"
15 #include "perspectiveShader.hpp"
16 
17 class Scene
18 {
19 
20 public:
21 
23 
24  Scene();
25 
28 
29  Scene(
30  std::vector<std::unique_ptr<glimac::Object>> inDataObject,
31  std::shared_ptr<Camera> inCamera);
32 
33 
34  Scene(
35  std::vector<std::unique_ptr<glimac::Object>> inDataObject,
36  std::shared_ptr<Camera> inCamera,
37  std::vector<GLuint*> inTexture,
38  std::vector<PerspectiveShader*> inShader);
39 
41  ~Scene();
42 
44  void loadScene(motor_game::Map &inMap,float speed);
45 
46 private:
47 
48 
49  std::vector<std::unique_ptr<glimac::Object>> m_dataObject;
50  std::shared_ptr<Camera> m_camera;
51  std::vector<GLuint*> m_texture;
52  std::vector<PerspectiveShader*> m_shader;
53 
54 };
~Scene()
Destructor.
Definition: Scene.cpp:123
+
contains the level elements, and the dimensions&#39; level
Definition: Map.hpp:13
+
Scene()
Constructor by default.
Definition: Scene.cpp:15
+
Definition: Scene.hpp:17
+
void loadScene(motor_game::Map &inMap, float speed)
Methods which draw the scene with a speed translation by reading the map.
Definition: Scene.cpp:39
+
+
+ + + + diff --git a/doc/html/_scores_8hpp_source.html b/doc/html/_scores_8hpp_source.html new file mode 100644 index 0000000..b5c2bad --- /dev/null +++ b/doc/html/_scores_8hpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: include/motor_game/Scores.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Scores.hpp
+
+
+
1 #ifndef SCORES_HPP
2 #define SCORES_HPP
3 
4 #pragma once
5 
6 #include "ExceptIMAC.hpp"
7 
8 #include <map>
9 #include <string>
10 #include <fstream>
11 #include <utility>
12 
13 namespace motor_game{
14  class Scores{
15  public :
18  Scores(const size_t &maxSize=7);
19 
20 
22  void read(const std::string &filename);
23 
25  const std::multimap<long,std::string,std::greater<long>> &multimap() const;
26 
28  void save(const std::string &filename);
29 
31  void add(const std::pair<long,std::string> &score);
32 
34  void clear();
35 
36  ~Scores() = default;
37 
38  private :
39  std::multimap<long, std::string, std::greater<long>> m_scores; // scores
40  size_t m_maxSize; // max number of scores stored
41  size_t m_size=0; // cuurent number of scores stored
42  };
43 }
44 
45 #endif
void clear()
empty the Scores data
Definition: Scores.cpp:47
+
Definition: End.hpp:6
+
Scores(const size_t &maxSize=7)
constructor
Definition: Scores.cpp:25
+
void save(const std::string &filename)
save scores into a file - can throw an exception
Definition: Scores.cpp:56
+
void add(const std::pair< long, std::string > &score)
add the score, if it is high enough. A name is present only one time.
Definition: Scores.cpp:29
+
Definition: Scores.hpp:14
+
void read(const std::string &filename)
Definition: Scores.cpp:5
+
const std::multimap< long, std::string, std::greater< long > > & multimap() const
getter : returns the multimap which contains the scores
Definition: Scores.cpp:51
+
+
+ + + + diff --git a/doc/html/_shader_8hpp_source.html b/doc/html/_shader_8hpp_source.html new file mode 100644 index 0000000..74a5445 --- /dev/null +++ b/doc/html/_shader_8hpp_source.html @@ -0,0 +1,101 @@ + + + + + + + +SpacImac Runner: include/glimac/Shader.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Shader.hpp
+
+
+
1 #pragma once
2 
3 #include <GL/glew.h>
4 #include <string>
5 #include "FilePath.hpp"
6 
7 #define GLIMAC_SHADER_SRC(str) #str
8 
9 namespace glimac {
10 
11 class Shader {
12 public:
13  Shader(GLenum type): m_nGLId(glCreateShader(type)) {
14  }
15 
16  ~Shader() {
17  glDeleteShader(m_nGLId);
18  }
19 
20  Shader(Shader&& rvalue): m_nGLId(rvalue.m_nGLId) {
21  rvalue.m_nGLId = 0;
22  }
23 
24  Shader& operator =(Shader&& rvalue) {
25  m_nGLId = rvalue.m_nGLId;
26  rvalue.m_nGLId = 0;
27  return *this;
28  }
29 
30  GLuint getGLId() const {
31  return m_nGLId;
32  }
33 
34  void setSource(const char* src) {
35  glShaderSource(m_nGLId, 1, &src, 0);
36  }
37 
38  bool compile();
39 
40  const std::string getInfoLog() const;
41 
42 private:
43  Shader(const Shader&);
44  Shader& operator =(const Shader&);
45  GLuint m_nGLId;
46 
47 };
48 
49 // Load a shader (but does not compile it)
50 Shader loadShader(GLenum type, const FilePath& filepath);
51 
52 }
Definition: Shader.hpp:11
+
Definition: FilePath.hpp:7
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_shader_l_8hpp_source.html b/doc/html/_shader_l_8hpp_source.html new file mode 100644 index 0000000..d6e6ccc --- /dev/null +++ b/doc/html/_shader_l_8hpp_source.html @@ -0,0 +1,99 @@ + + + + + + + +SpacImac Runner: include/glimac/ShaderL.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ShaderL.hpp
+
+
+
1 #ifndef SHADERL_H
2 #define SHADERL_H
3 
4 //#include <glad/glad.h>
5 #include <glm/glm.hpp>
6 
7 #include <string>
8 #include <fstream>
9 #include <sstream>
10 #include <iostream>
11 
12 class ShaderL
13 {
14 public:
15  unsigned int ID;
16  // constructor generates the shader on the fly
17  // ------------------------------------------------------------------------
18  ShaderL(const char* vertexPath, const char* fragmentPath, const char* geometryPath = nullptr)
19  {
20  // 1. retrieve the vertex/fragment source code from filePath
21  std::string vertexCode;
22  std::string fragmentCode;
23  std::string geometryCode;
24  std::ifstream vShaderFile;
25  std::ifstream fShaderFile;
26  std::ifstream gShaderFile;
27  // ensure ifstream objects can throw exceptions:
28  vShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit);
29  fShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit);
30  gShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit);
31  try
32  {
33  // open files
34  vShaderFile.open(vertexPath);
35  fShaderFile.open(fragmentPath);
36  std::stringstream vShaderStream, fShaderStream;
37  // read file's buffer contents into streams
38  vShaderStream << vShaderFile.rdbuf();
39  fShaderStream << fShaderFile.rdbuf();
40  // close file handlers
41  vShaderFile.close();
42  fShaderFile.close();
43  // convert stream into string
44  vertexCode = vShaderStream.str();
45  fragmentCode = fShaderStream.str();
46  // if geometry shader path is present, also load a geometry shader
47  if(geometryPath != nullptr)
48  {
49  gShaderFile.open(geometryPath);
50  std::stringstream gShaderStream;
51  gShaderStream << gShaderFile.rdbuf();
52  gShaderFile.close();
53  geometryCode = gShaderStream.str();
54  }
55  }
56  catch (std::ifstream::failure e)
57  {
58  std::cout << "ERROR::SHADER::FILE_NOT_SUCCESFULLY_READ" << std::endl;
59  }
60  const char* vShaderCode = vertexCode.c_str();
61  const char * fShaderCode = fragmentCode.c_str();
62  // 2. compile shaders
63  unsigned int vertex, fragment;
64  // vertex shader
65  vertex = glCreateShader(GL_VERTEX_SHADER);
66  glShaderSource(vertex, 1, &vShaderCode, NULL);
67  glCompileShader(vertex);
68  checkCompileErrors(vertex, "VERTEX");
69  // fragment Shader
70  fragment = glCreateShader(GL_FRAGMENT_SHADER);
71  glShaderSource(fragment, 1, &fShaderCode, NULL);
72  glCompileShader(fragment);
73  checkCompileErrors(fragment, "FRAGMENT");
74  // if geometry shader is given, compile geometry shader
75  unsigned int geometry;
76  if(geometryPath != nullptr)
77  {
78  const char * gShaderCode = geometryCode.c_str();
79  geometry = glCreateShader(GL_GEOMETRY_SHADER);
80  glShaderSource(geometry, 1, &gShaderCode, NULL);
81  glCompileShader(geometry);
82  checkCompileErrors(geometry, "GEOMETRY");
83  }
84  // shader Program
85  ID = glCreateProgram();
86  glAttachShader(ID, vertex);
87  glAttachShader(ID, fragment);
88  if(geometryPath != nullptr)
89  glAttachShader(ID, geometry);
90  glLinkProgram(ID);
91  checkCompileErrors(ID, "PROGRAM");
92  // delete the shaders as they're linked into our program now and no longer necessery
93  glDeleteShader(vertex);
94  glDeleteShader(fragment);
95  if(geometryPath != nullptr)
96  glDeleteShader(geometry);
97 
98  }
99  // activate the shader
100  // ------------------------------------------------------------------------
101  void use()
102  {
103  glUseProgram(ID);
104  }
105  // utility uniform functions
106  // ------------------------------------------------------------------------
107  void setBool(const std::string &name, bool value) const
108  {
109  glUniform1i(glGetUniformLocation(ID, name.c_str()), (int)value);
110  }
111  // ------------------------------------------------------------------------
112  void setInt(const std::string &name, int value) const
113  {
114  glUniform1i(glGetUniformLocation(ID, name.c_str()), value);
115  }
116  // ------------------------------------------------------------------------
117  void setFloat(const std::string &name, float value) const
118  {
119  glUniform1f(glGetUniformLocation(ID, name.c_str()), value);
120  }
121  // ------------------------------------------------------------------------
122  void setVec2(const std::string &name, const glm::vec2 &value) const
123  {
124  glUniform2fv(glGetUniformLocation(ID, name.c_str()), 1, &value[0]);
125  }
126  void setVec2(const std::string &name, float x, float y) const
127  {
128  glUniform2f(glGetUniformLocation(ID, name.c_str()), x, y);
129  }
130  // ------------------------------------------------------------------------
131  void setVec3(const std::string &name, const glm::vec3 &value) const
132  {
133  glUniform3fv(glGetUniformLocation(ID, name.c_str()), 1, &value[0]);
134  }
135  void setVec3(const std::string &name, float x, float y, float z) const
136  {
137  glUniform3f(glGetUniformLocation(ID, name.c_str()), x, y, z);
138  }
139  // ------------------------------------------------------------------------
140  void setVec4(const std::string &name, const glm::vec4 &value) const
141  {
142  glUniform4fv(glGetUniformLocation(ID, name.c_str()), 1, &value[0]);
143  }
144  void setVec4(const std::string &name, float x, float y, float z, float w)
145  {
146  glUniform4f(glGetUniformLocation(ID, name.c_str()), x, y, z, w);
147  }
148  // ------------------------------------------------------------------------
149  void setMat2(const std::string &name, const glm::mat2 &mat) const
150  {
151  glUniformMatrix2fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE, &mat[0][0]);
152  }
153  // ------------------------------------------------------------------------
154  void setMat3(const std::string &name, const glm::mat3 &mat) const
155  {
156  glUniformMatrix3fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE, &mat[0][0]);
157  }
158  // ------------------------------------------------------------------------
159  void setMat4(const std::string &name, const glm::mat4 &mat) const
160  {
161  glUniformMatrix4fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE, &mat[0][0]);
162  }
163 
164 private:
165  // utility function for checking shader compilation/linking errors.
166  // ------------------------------------------------------------------------
167  void checkCompileErrors(GLuint shader, std::string type)
168  {
169  GLint success;
170  GLchar infoLog[1024];
171  if(type != "PROGRAM")
172  {
173  glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
174  if(!success)
175  {
176  glGetShaderInfoLog(shader, 1024, NULL, infoLog);
177  std::cout << "ERROR::SHADER_COMPILATION_ERROR of type: " << type << "\n" << infoLog << "\n -- --------------------------------------------------- -- " << std::endl;
178  }
179  }
180  else
181  {
182  glGetProgramiv(shader, GL_LINK_STATUS, &success);
183  if(!success)
184  {
185  glGetProgramInfoLog(shader, 1024, NULL, infoLog);
186  std::cout << "ERROR::PROGRAM_LINKING_ERROR of type: " << type << "\n" << infoLog << "\n -- --------------------------------------------------- -- " << std::endl;
187  }
188  }
189  }
190 };
191 #endif
192 
Definition: ShaderL.hpp:12
+
+
+ + + + diff --git a/doc/html/_skybox_8hpp_source.html b/doc/html/_skybox_8hpp_source.html new file mode 100644 index 0000000..9e3e4d8 --- /dev/null +++ b/doc/html/_skybox_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: include/graphic_engine/Skybox.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Skybox.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <vector>
5 
6 #include "common.hpp"
7 #include "TextureLoader.hpp"
8 
9 
10 
11 class Skybox
12 {
13 
14 public:
15 
18  {
19  voManager();
20  createTexture();
21  }
22 
24  void voManager();
25 
27  void createTexture();
30  void createTexture(std::vector <const char*> faces);
31 
32  void displaySkybox();
33 
34 private:
35 
36  GLuint m_vbo,m_vao;
37  GLuint m_cubemapTexture;
38  GLfloat m_skyboxVertices[108] = {
39  // Positions
40  -1.0f, 1.0f, -1.0f,
41  -1.0f, -1.0f, -1.0f,
42  1.0f, -1.0f, -1.0f,
43  1.0f, -1.0f, -1.0f,
44  1.0f, 1.0f, -1.0f,
45  -1.0f, 1.0f, -1.0f,
46 
47  -1.0f, -1.0f, 1.0f,
48  -1.0f, -1.0f, -1.0f,
49  -1.0f, 1.0f, -1.0f,
50  -1.0f, 1.0f, -1.0f,
51  -1.0f, 1.0f, 1.0f,
52  -1.0f, -1.0f, 1.0f,
53 
54  1.0f, -1.0f, -1.0f,
55  1.0f, -1.0f, 1.0f,
56  1.0f, 1.0f, 1.0f,
57  1.0f, 1.0f, 1.0f,
58  1.0f, 1.0f, -1.0f,
59  1.0f, -1.0f, -1.0f,
60 
61  -1.0f, -1.0f, 1.0f,
62  -1.0f, 1.0f, 1.0f,
63  1.0f, 1.0f, 1.0f,
64  1.0f, 1.0f, 1.0f,
65  1.0f, -1.0f, 1.0f,
66  -1.0f, -1.0f, 1.0f,
67 
68  -1.0f, 1.0f, -1.0f,
69  1.0f, 1.0f, -1.0f,
70  1.0f, 1.0f, 1.0f,
71  1.0f, 1.0f, 1.0f,
72  -1.0f, 1.0f, 1.0f,
73  -1.0f, 1.0f, -1.0f,
74 
75  -1.0f, -1.0f, -1.0f,
76  -1.0f, -1.0f, 1.0f,
77  1.0f, -1.0f, -1.0f,
78  1.0f, -1.0f, -1.0f,
79  -1.0f, -1.0f, 1.0f,
80  1.0f, -1.0f, 1.0f
81  };
82 
83 };
Definition: Skybox.hpp:11
+
Skybox()
Default Skybox constructor.
Definition: Skybox.hpp:17
+
void createTexture()
method which create a texture by default
Definition: Skybox.cpp:24
+
void voManager()
method which create the vbo and the vao for the skybox
Definition: Skybox.cpp:12
+
+
+ + + + diff --git a/doc/html/_sphere_8hpp_source.html b/doc/html/_sphere_8hpp_source.html new file mode 100644 index 0000000..35a77e4 --- /dev/null +++ b/doc/html/_sphere_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: include/glimac/Sphere.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Sphere.hpp
+
+
+
1 #pragma once
2 
3 #include <vector>
4 
5 #include "common.hpp"
6 #include "Object.hpp"
7 
8 namespace glimac {
9 
10 // Représente une sphère discrétisée centrée en (0, 0, 0) (dans son repère local)
11 // Son axe vertical est (0, 1, 0) et ses axes transversaux sont (1, 0, 0) et (0, 0, 1)
12 class Sphere :public Object{
13  // Alloue et construit les données (implantation dans le .cpp)
14  void build(GLfloat radius, GLsizei discLat, GLsizei discLong);
15 
16 public:
17  // Constructeur: alloue le tableau de données et construit les attributs des vertex
18  Sphere(GLfloat radius=0.5, GLsizei discLat=100, GLsizei discLong=100):
19  m_nVertexCount(0) {
20  build(radius, discLat, discLong); // Construction (voir le .cpp)
21  }
22 
23  // Renvoit le pointeur vers les données
24  const ShapeVertex* getDataPointer() const {
25  return &m_Vertices[0];
26  }
27 
28  // Renvoit le nombre de vertex
29  GLsizei getVertexCount() const {
30  return m_nVertexCount;
31  }
32 
33  void vboManager(GLuint &vbo);
34  void vaoManager(GLuint &vao,GLuint &vbo);
35 
36  inline
37  GLuint getVao() const
38  {
39  return m_vao;
40  }
41 
42  void draw();
43 
44  void description()
45  {
46  std::cout<<"Je suis une Sphere"<<std::endl;
47  }
48 
49 
50 private:
51  GLuint m_vbo,m_vao;
52  std::vector<ShapeVertex> m_Vertices;
53  GLsizei m_nVertexCount; // Nombre de sommets
54 };
55 
56 }
Definition: Sphere.hpp:12
+
Definition: common.hpp:8
+
Definition: Object.hpp:9
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_texture_loader_8hpp_source.html b/doc/html/_texture_loader_8hpp_source.html new file mode 100644 index 0000000..77a856b --- /dev/null +++ b/doc/html/_texture_loader_8hpp_source.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: include/graphic_engine/TextureLoader.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
TextureLoader.hpp
+
+
+
1 #pragma once
2 
3 #include <glimac/common.hpp>
4 #include <glimac/FilePath.hpp>
5 #include <glimac/Program.hpp>
6 #include <glimac/Image.hpp>
7 
8 #include <memory>
9 
10 using namespace glimac;
12 {
13 public:
14 
17  static GLuint LoadTexture( const char* FilePath )
18  {
19 
20  std::unique_ptr<Image> pImage;
21  pImage = loadImage(FilePath);
22  GLuint texture;
23  glGenTextures(1,&texture);
24  glBindTexture(GL_TEXTURE_2D,texture);
25  glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,pImage->getWidth(),
26  pImage->getHeight(),0,GL_RGBA,GL_FLOAT,pImage->getPixels());
27  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
28  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
29  glBindTexture(GL_TEXTURE_2D,0);
30 
31  return texture;
32  }
33 
36  static GLuint LoadCubeMap( std::vector<const char*> faces )
37  {
38  std::unique_ptr<Image> pImage;
39  GLuint texture;
40 
41  glGenTextures(1,&texture);
42  glBindTexture(GL_TEXTURE_CUBE_MAP,texture);
43  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
44  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
45 
46  for (unsigned int i = 0; i < faces.size(); i++)
47  {
48 
49 
50  pImage = loadImage(faces[i]);
51  glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,0,GL_RGBA,pImage->getWidth(),
52  pImage->getHeight(),0,GL_RGBA,GL_FLOAT,pImage->getPixels());
53  pImage.reset(nullptr);
54  }
55 
56  glBindTexture(GL_TEXTURE_CUBE_MAP,0);
57 
58  return texture;
59  }
60 
61 
62 };
Definition: FilePath.hpp:7
+
static GLuint LoadCubeMap(std::vector< const char *> faces)
Definition: TextureLoader.hpp:36
+
Definition: TextureLoader.hpp:11
+
static GLuint LoadTexture(const char *FilePath)
Definition: TextureLoader.hpp:17
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_trackball_camera_8hpp_source.html b/doc/html/_trackball_camera_8hpp_source.html new file mode 100644 index 0000000..7ea5b1d --- /dev/null +++ b/doc/html/_trackball_camera_8hpp_source.html @@ -0,0 +1,107 @@ + + + + + + + +SpacImac Runner: include/graphic_engine/TrackballCamera.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
TrackballCamera.hpp
+
+
+
1 #pragma once
2 
3 #include <glm/glm.hpp>
4 #include <glm/gtc/random.hpp>
5 #include "camera.hpp"
6 
7 using namespace glimac;
8 
10 class TrackballCamera :public Camera
11 {
12 public:
13 
16  m_fDistance(0),m_fAngleX(0),m_fAngleY(0)
17  {}
18 
20  TrackballCamera(const float fDistance,const float fAngleX,const float fAngleY)
21  :m_fDistance(fDistance),m_fAngleX(fAngleX),m_fAngleY(fAngleY)
22  {}
23 
25  void onKeyboardEvent(const SDL_Event &event)
26  {
27  if ((event.type == SDL_KEYDOWN) && (event.key.keysym.sym == SDLK_r))
28  {
29  m_fAngleX = 0;
30  m_fAngleY = 0;
31  }
32  }
33 
35  void onMouseWheelEvent(const SDL_Event &e)
36  {
37  if (e.button.button == SDL_BUTTON_WHEELUP)
38  {
39  // Move BACK
40  m_fDistance+=0.1;
41  }
42 
43  if (e.button.button == SDL_BUTTON_WHEELDOWN)
44  {
45  // Move FRONT
46  m_fDistance-=0.1;
47  }
48  }
49 
51  void onMouseEvent(const SDL_Event &e)
52  {
53  // Rotate UP
54  m_fAngleY += e.motion.yrel;
55  // Rotate LEFT
56  m_fAngleX += e.motion.xrel;
57  }
58 
60  glm::mat4 getViewMatrix() const
61  {
62 
63  glm::mat4 viewMatrix(1.0f);
64 
65 
66  viewMatrix = glm::translate(glm::mat4(1.0),glm::vec3(0,0,m_fDistance));
67  viewMatrix *= glm::rotate(viewMatrix,glm::radians(m_fAngleY),glm::vec3(1.0,0.0,0.0));
68 
69  viewMatrix *= glm::rotate(viewMatrix,glm::radians(m_fAngleX),glm::vec3(0.0,1.0,0.0));
70 
71  return viewMatrix;
72  }
73 
74 
75 
76 
77 
78 
79 private:
80  float m_fDistance;
81  float m_fAngleX;
82  float m_fAngleY;
83 
84 
85 };
TrackballCamera()
Default constructor TrackballCameracamera.
Definition: TrackballCamera.hpp:15
+
void onMouseEvent(const SDL_Event &e)
method which handle sdl mouse position event
Definition: TrackballCamera.hpp:51
+
Mother Class Camera.
Definition: camera.hpp:6
+
Class TrackballCamera derived from camera.
Definition: TrackballCamera.hpp:10
+
void onMouseWheelEvent(const SDL_Event &e)
method which handle sdl mouse wheel event
Definition: TrackballCamera.hpp:35
+
TrackballCamera(const float fDistance, const float fAngleX, const float fAngleY)
Constructor with parameters.
Definition: TrackballCamera.hpp:20
+
void onKeyboardEvent(const SDL_Event &event)
method which handle sdl keyboard event
Definition: TrackballCamera.hpp:25
+
glm::mat4 getViewMatrix() const
Method wich return a view Matrix set up with camera parameters.
Definition: TrackballCamera.hpp:60
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/_turn_8hpp_source.html b/doc/html/_turn_8hpp_source.html new file mode 100644 index 0000000..7227edb --- /dev/null +++ b/doc/html/_turn_8hpp_source.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: include/motor_game/Turn.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Turn.hpp
+
+
+
1 #ifndef TURN_HPP
2 #define TURN_HPP
3 
4 #pragma once
5 
6 #include "Floor.hpp"
7 
8 namespace motor_game{
9 
11  class Turn final : public Floor{
12  public :
13  Turn() = delete;
14 
17  Turn(const glm::vec3 &position, const std::string &type);
18 
20  void printElement() const;
21 
23  void collide(Hero *hero) const;
24 
26  ~Turn() = default;
27  };
28 }
29 #endif
Definition: Turn.hpp:11
+
~Turn()=default
destructor
+
Definition: End.hpp:6
+
Definition: Hero.hpp:12
+
Definition: Floor.hpp:9
+
void collide(Hero *hero) const
method to call when the Character is on the Turn
Definition: Turn.cpp:13
+
void printElement() const
method to display the value of Turn&#39;s attributes
Definition: Turn.cpp:8
+
+
+ + + + diff --git a/doc/html/_user_8hpp_source.html b/doc/html/_user_8hpp_source.html new file mode 100644 index 0000000..9b7d1ed --- /dev/null +++ b/doc/html/_user_8hpp_source.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: include/motor_game/User.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
User.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <string>
5 
6 
7 class User
8 {
9  public:
10  //methode
11  User();
12 
14  User(std::string &inName);
15 
17  inline std::string getName() const {
18  return m_name;
19  }
20 
22  inline void setName(std::string const &inName) {
23  m_name = inName;
24  }
26  inline void printPlayer() const {
27  std::cout<<"Name :"<<m_name<<std::endl;
28  // std::cout<<"Score :"<<m_score<<std::endl;
29  }
30 
32  ~User();
33 
34  private:
35  std::string m_name;
38 };
Definition: User.hpp:7
+
~User()
destructor of our Element
Definition: User.cpp:11
+
void setName(std::string const &inName)
method to set the value of User&#39;s name
Definition: User.hpp:22
+
std::string getName() const
method to retrieve the value of User&#39;s attributes
Definition: User.hpp:17
+
void printPlayer() const
method to test the value of User&#39;s attributes
Definition: User.hpp:26
+
+
+ + + + diff --git a/doc/html/_wall_8hpp_source.html b/doc/html/_wall_8hpp_source.html new file mode 100644 index 0000000..44042ca --- /dev/null +++ b/doc/html/_wall_8hpp_source.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: include/motor_game/Wall.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Wall.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <string>
5 #include "Element.hpp"
6 #include "Hero.hpp"
7 
8 class Wall : public Element
9 {
10  public:
12  Wall();
13 
15  Wall(const glm::vec3 &position, const std::string &type = "Wall");
16 
18  ~Wall();
19 
21  void printElement() const;
22 
25  void collide(Hero &hero);
26 
27 
28 };
Definition: Element.hpp:11
+
Definition: Hero.hpp:12
+
void printElement() const
method to test the value of Wall&#39;s attributes
Definition: Wall.cpp:17
+
Wall()
constructor of class Wall
Definition: Wall.cpp:5
+
Definition: Wall.hpp:8
+
void collide(Hero &hero)
Definition: Wall.cpp:23
+
~Wall()
default destructor of our Wall
Definition: Wall.cpp:14
+
+
+ + + + diff --git a/doc/html/annotated.html b/doc/html/annotated.html new file mode 100644 index 0000000..16433ac --- /dev/null +++ b/doc/html/annotated.html @@ -0,0 +1,167 @@ + + + + + + + +SpacImac Runner: Class List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ncpp_IMAC
 CExceptIMAC
 Nglimac
 CBBox3f
 CCone
 CCube
 CFilePath
 CFreelyCamera
 CGeometry
 CMaterial
 CMesh
 CVertex
 CGrid
 CImage
 CImageManager
 CLandmark
 CObject
 CProgram
 CSDLWindowManager
 CShader
 CShapeVertex
 CSphere
 Nmotor_game
 CEnd
 CGap
 CMapLevel elements, and the dimensions' level
 CPPM
 CPPMreader
 CScores
 CTurn
 Nstd
 Chash< glimac::FilePath >
 Ntinyobj
 Cmaterial_t
 CMaterialFileReader
 CMaterialReader
 Cmesh_t
 Cobj_shape
 Cshape_t
 Cvertex_index
 CAppManager
 CCameraMother Class Camera
 CCharacter
 CCoin
 Cconstructor
 CElement
 CEnemy
 CEyeCamera
 CFloor
 CfloorPlayer can turn
 CFont
 CHero
 CLightShader
 CMenuClass Menu
 Cnegative_vector
 CObstacle
 CPerspectiveShaderShader program class
 CPrintableElement
 CScene
 CShaderL
 CSkybox
 Cstbi_io_callbacks
 CTextureLoader
 CTrackballCameraClass TrackballCamera derived from camera
 CUser
 CWall
+
+
+
+ + + + diff --git a/doc/html/annotated_dup.js b/doc/html/annotated_dup.js new file mode 100644 index 0000000..1b3d02d --- /dev/null +++ b/doc/html/annotated_dup.js @@ -0,0 +1,71 @@ +var annotated_dup = +[ + [ "cpp_IMAC", null, [ + [ "ExceptIMAC", "classcpp___i_m_a_c_1_1_except_i_m_a_c.html", "classcpp___i_m_a_c_1_1_except_i_m_a_c" ] + ] ], + [ "glimac", null, [ + [ "BBox3f", "structglimac_1_1_b_box3f.html", "structglimac_1_1_b_box3f" ], + [ "Cone", "classglimac_1_1_cone.html", "classglimac_1_1_cone" ], + [ "Cube", "classglimac_1_1_cube.html", "classglimac_1_1_cube" ], + [ "FilePath", "classglimac_1_1_file_path.html", "classglimac_1_1_file_path" ], + [ "FreelyCamera", "classglimac_1_1_freely_camera.html", "classglimac_1_1_freely_camera" ], + [ "Geometry", "classglimac_1_1_geometry.html", "classglimac_1_1_geometry" ], + [ "Grid", "classglimac_1_1_grid.html", "classglimac_1_1_grid" ], + [ "Image", "classglimac_1_1_image.html", "classglimac_1_1_image" ], + [ "ImageManager", "classglimac_1_1_image_manager.html", null ], + [ "Landmark", "classglimac_1_1_landmark.html", "classglimac_1_1_landmark" ], + [ "Object", "classglimac_1_1_object.html", "classglimac_1_1_object" ], + [ "Program", "classglimac_1_1_program.html", "classglimac_1_1_program" ], + [ "SDLWindowManager", "classglimac_1_1_s_d_l_window_manager.html", "classglimac_1_1_s_d_l_window_manager" ], + [ "Shader", "classglimac_1_1_shader.html", "classglimac_1_1_shader" ], + [ "ShapeVertex", "structglimac_1_1_shape_vertex.html", "structglimac_1_1_shape_vertex" ], + [ "Sphere", "classglimac_1_1_sphere.html", "classglimac_1_1_sphere" ] + ] ], + [ "motor_game", null, [ + [ "End", "classmotor__game_1_1_end.html", "classmotor__game_1_1_end" ], + [ "Gap", "classmotor__game_1_1_gap.html", "classmotor__game_1_1_gap" ], + [ "Map", "classmotor__game_1_1_map.html", "classmotor__game_1_1_map" ], + [ "PPM", "classmotor__game_1_1_p_p_m.html", "classmotor__game_1_1_p_p_m" ], + [ "PPMreader", "classmotor__game_1_1_p_p_mreader.html", "classmotor__game_1_1_p_p_mreader" ], + [ "Scores", "classmotor__game_1_1_scores.html", "classmotor__game_1_1_scores" ], + [ "Turn", "classmotor__game_1_1_turn.html", "classmotor__game_1_1_turn" ] + ] ], + [ "std", null, [ + [ "hash< glimac::FilePath >", "structstd_1_1hash_3_01glimac_1_1_file_path_01_4.html", "structstd_1_1hash_3_01glimac_1_1_file_path_01_4" ] + ] ], + [ "tinyobj", null, [ + [ "material_t", "structtinyobj_1_1material__t.html", "structtinyobj_1_1material__t" ], + [ "MaterialFileReader", "classtinyobj_1_1_material_file_reader.html", "classtinyobj_1_1_material_file_reader" ], + [ "MaterialReader", "classtinyobj_1_1_material_reader.html", "classtinyobj_1_1_material_reader" ], + [ "mesh_t", "structtinyobj_1_1mesh__t.html", "structtinyobj_1_1mesh__t" ], + [ "obj_shape", "structtinyobj_1_1obj__shape.html", "structtinyobj_1_1obj__shape" ], + [ "shape_t", "structtinyobj_1_1shape__t.html", "structtinyobj_1_1shape__t" ], + [ "vertex_index", "structtinyobj_1_1vertex__index.html", "structtinyobj_1_1vertex__index" ] + ] ], + [ "AppManager", "class_app_manager.html", "class_app_manager" ], + [ "Camera", "class_camera.html", "class_camera" ], + [ "Character", "class_character.html", "class_character" ], + [ "Coin", "class_coin.html", "class_coin" ], + [ "constructor", "classconstructor.html", null ], + [ "Element", "class_element.html", "class_element" ], + [ "Enemy", "class_enemy.html", "class_enemy" ], + [ "EyeCamera", "class_eye_camera.html", "class_eye_camera" ], + [ "Floor", "class_floor.html", "class_floor" ], + [ "floor", "classfloor.html", null ], + [ "Font", "class_font.html", "class_font" ], + [ "Hero", "class_hero.html", "class_hero" ], + [ "LightShader", "class_light_shader.html", "class_light_shader" ], + [ "Menu", "class_menu.html", "class_menu" ], + [ "negative_vector", "classnegative__vector.html", "classnegative__vector" ], + [ "Obstacle", "class_obstacle.html", "class_obstacle" ], + [ "PerspectiveShader", "class_perspective_shader.html", "class_perspective_shader" ], + [ "PrintableElement", "class_printable_element.html", "class_printable_element" ], + [ "Scene", "class_scene.html", "class_scene" ], + [ "ShaderL", "class_shader_l.html", "class_shader_l" ], + [ "Skybox", "class_skybox.html", "class_skybox" ], + [ "stbi_io_callbacks", "structstbi__io__callbacks.html", "structstbi__io__callbacks" ], + [ "TextureLoader", "class_texture_loader.html", null ], + [ "TrackballCamera", "class_trackball_camera.html", "class_trackball_camera" ], + [ "User", "class_user.html", "class_user" ], + [ "Wall", "class_wall.html", "class_wall" ] +]; \ No newline at end of file diff --git a/doc/html/bc_s.png b/doc/html/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/doc/html/bc_s.png differ diff --git a/doc/html/bdwn.png b/doc/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/doc/html/bdwn.png differ diff --git a/doc/html/camera_8hpp_source.html b/doc/html/camera_8hpp_source.html new file mode 100644 index 0000000..6a1abd2 --- /dev/null +++ b/doc/html/camera_8hpp_source.html @@ -0,0 +1,99 @@ + + + + + + + +SpacImac Runner: include/graphic_engine/camera.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
camera.hpp
+
+
+
1 #pragma once
2 
3 #include <glimac/common.hpp>
4 
6 class Camera
7 {
8 public:
9  virtual glm::mat4 getViewMatrix() const = 0;
10 };
Mother Class Camera.
Definition: camera.hpp:6
+
+
+ + + + diff --git a/doc/html/class_app_manager-members.html b/doc/html/class_app_manager-members.html new file mode 100644 index 0000000..6a92a37 --- /dev/null +++ b/doc/html/class_app_manager-members.html @@ -0,0 +1,109 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AppManager Member List
+
+
+ +

This is the complete list of members for AppManager, including all inherited members.

+ + + + + + + + + + +
AppManager()AppManager
getAppHeight() constAppManagerinline
getAppWidth() constAppManagerinline
getWindowName() constAppManagerinline
m_height (defined in AppManager)AppManager
m_score (defined in AppManager)AppManager
m_width (defined in AppManager)AppManager
m_window_name (defined in AppManager)AppManager
start(char **argv)AppManager
+
+ + + + diff --git a/doc/html/class_app_manager.html b/doc/html/class_app_manager.html new file mode 100644 index 0000000..da84a4b --- /dev/null +++ b/doc/html/class_app_manager.html @@ -0,0 +1,170 @@ + + + + + + + +SpacImac Runner: AppManager Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
AppManager Class Reference
+
+
+ +

#include <AppManager.hpp>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

AppManager ()
 Default Constructor of class AppManager.
 
+const std::string getWindowName () const
 Getter for the window name.
 
+const int getAppWidth () const
 Getter for the window's width.
 
+const int getAppHeight () const
 Getter for the window's height.
 
int start (char **argv)
 method which launch the application More...
 
+ + + + + + + + + +

+Public Attributes

+std::string m_window_name = "SpacImac Runner"
 
+int m_width = 800
 
+int m_height = 600
 
+int m_score = 0
 
+

Detailed Description

+

AppManager Class manage all the Game Create all the game elements

+

Member Function Documentation

+ +

◆ start()

+ +
+
+ + + + + + + + +
int AppManager::start (char ** argv)
+
+ +

method which launch the application

+

PLUS PROPRE A TROUVER

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_app_manager.js b/doc/html/class_app_manager.js new file mode 100644 index 0000000..0eac42f --- /dev/null +++ b/doc/html/class_app_manager.js @@ -0,0 +1,12 @@ +var class_app_manager = +[ + [ "AppManager", "class_app_manager.html#a6221fc1ede71f2ac539c052bbe0c7f6a", null ], + [ "getAppHeight", "class_app_manager.html#affae46e05f7c0832fce71c97a628a1a2", null ], + [ "getAppWidth", "class_app_manager.html#ac44f43240b8165fee3ef7732677db5ce", null ], + [ "getWindowName", "class_app_manager.html#a2de910deb66a72a84ba7e489d6762a04", null ], + [ "start", "class_app_manager.html#a3326c2410ec8a898f828e8051c414e96", null ], + [ "m_height", "class_app_manager.html#a911a13a85841f2f8101fd4129e333ba4", null ], + [ "m_score", "class_app_manager.html#aef10f2fdfd3a9881017582bd4d33022f", null ], + [ "m_width", "class_app_manager.html#a8c24936fdb38dcd2784071b1e33465f3", null ], + [ "m_window_name", "class_app_manager.html#ae8d2d91a6994d9a6d21508f4f4927496", null ] +]; \ No newline at end of file diff --git a/doc/html/class_camera-members.html b/doc/html/class_camera-members.html new file mode 100644 index 0000000..7a5a49b --- /dev/null +++ b/doc/html/class_camera-members.html @@ -0,0 +1,101 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Camera Member List
+
+
+ +

This is the complete list of members for Camera, including all inherited members.

+ + +
getViewMatrix() const =0 (defined in Camera)Camerapure virtual
+
+ + + + diff --git a/doc/html/class_camera.html b/doc/html/class_camera.html new file mode 100644 index 0000000..8785f2d --- /dev/null +++ b/doc/html/class_camera.html @@ -0,0 +1,128 @@ + + + + + + + +SpacImac Runner: Camera Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Camera Class Referenceabstract
+
+
+ +

Mother Class Camera. + More...

+ +

#include <camera.hpp>

+
+Inheritance diagram for Camera:
+
+
+ + +EyeCamera +TrackballCamera + +
+ + + + +

+Public Member Functions

+virtual glm::mat4 getViewMatrix () const =0
 
+

Detailed Description

+

Mother Class Camera.

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/class_camera.js b/doc/html/class_camera.js new file mode 100644 index 0000000..6ca332a --- /dev/null +++ b/doc/html/class_camera.js @@ -0,0 +1,4 @@ +var class_camera = +[ + [ "getViewMatrix", "class_camera.html#a3de2dd732fcdcc89258e8aeeef0ade2f", null ] +]; \ No newline at end of file diff --git a/doc/html/class_camera.png b/doc/html/class_camera.png new file mode 100644 index 0000000..9248db9 Binary files /dev/null and b/doc/html/class_camera.png differ diff --git a/doc/html/class_character-members.html b/doc/html/class_character-members.html new file mode 100644 index 0000000..293affd --- /dev/null +++ b/doc/html/class_character-members.html @@ -0,0 +1,129 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Character Member List
+
+
+ +

This is the complete list of members for Character, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Character()Character
Character(const glm::vec3 &position, const float &speed, const std::string &type)Character
checkCollision(const PrintableElement &b)Character
description()PrintableElementinline
down()Character
getPosition() constPrintableElementinline
getSpeed() const (defined in Character)Characterinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
m_positionPrintableElementprotected
m_speed (defined in Character)Characterprotected
m_typePrintableElementprotected
moveLeft()Character
moveLeft(const int &axe) (defined in Character)Character
moveRight()Character
moveRight(const int &axe) (defined in Character)Character
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constCharactervirtual
run()Character
run(const int &axe) (defined in Character)Character
setPosition(glm::vec3 pos)PrintableElementinline
setSpeed(float const &inSpeed) (defined in Character)Characterinline
translate(const float &x, const float &z) (defined in Character)Character
up()Character
~Character()Character
~PrintableElement()PrintableElement
+
+ + + + diff --git a/doc/html/class_character.html b/doc/html/class_character.html new file mode 100644 index 0000000..6624790 --- /dev/null +++ b/doc/html/class_character.html @@ -0,0 +1,331 @@ + + + + + + + +SpacImac Runner: Character Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Character Class Reference
+
+
+
+Inheritance diagram for Character:
+
+
+ + +PrintableElement +Enemy +Hero + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Character ()
 
 Character (const glm::vec3 &position, const float &speed, const std::string &type)
 
+void run ()
 method allowing the character to move forward on the z axis
 
+void run (const int &axe)
 
+void up ()
 method allowing the character to jump up the y axis
 
+void down ()
 method allowing the character to crawl under obstacles: their height is then 1 instead of 2
 
+void moveLeft ()
 method allowing the character to move left along the x axis
 
+void moveLeft (const int &axe)
 
+void moveRight ()
 method allowing the character to move right along the x axis
 
+void moveRight (const int &axe)
 
+void setSpeed (float const &inSpeed)
 
+float getSpeed () const
 
+void translate (const float &x, const float &z)
 
bool checkCollision (const PrintableElement &b)
 method checking the collision between a character instance and a printableElement instance which is passed as a parameter More...
 
virtual void printElement () const
 brief method to display the value of our Element's attributes: TO ERASE ???? More...
 
~Character ()
 default destructor of class character
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + + + +

+Protected Attributes

+float m_speed
 
- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+

Constructor & Destructor Documentation

+ +

◆ Character() [1/2]

+ +
+
+ + + + + + + +
Character::Character ()
+
+

default constructor of class character our class character is only abstract contrary to other elements, a character isn't a cube of 1*1*1: it's a pavement with an height of 2

+ +
+
+ +

◆ Character() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Character::Character (const glm::vec3 & position,
const float & speed,
const std::string & type 
)
+
+

constructor with parameters param type : a string which will allow us to know what kind of character we're dealing with param speed : the speed in which our character will run, can be changed with bonus elements

+ +
+
+

Member Function Documentation

+ +

◆ checkCollision()

+ +
+
+ + + + + + + + +
bool Character::checkCollision (const PrintableElementb)
+
+ +

method checking the collision between a character instance and a printableElement instance which is passed as a parameter

+

character's heighth is two

+ +
+
+ +

◆ printElement()

+ +
+
+ + + + + +
+ + + + + + + +
void Character::printElement () const
+
+virtual
+
+ +

brief method to display the value of our Element's attributes: TO ERASE ????

+

method checking the collision between a character instance and a printableElement instance which is passed as a parameter this method is activated when the player wants to move and checks if the position is available. the direction of the movement (determined by the pressed touch) is passed as a second parameter. method scanning a list of Element objects until a collision is detected (using our checkCollision methods) this method is activated when the player wants to move and checks if the position is available. the direction of the movement (determined by the pressed touch) is passed as a second parameter.

+ +

Reimplemented from PrintableElement.

+ +

Reimplemented in Enemy, and Hero.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_character.js b/doc/html/class_character.js new file mode 100644 index 0000000..dba2106 --- /dev/null +++ b/doc/html/class_character.js @@ -0,0 +1,20 @@ +var class_character = +[ + [ "Character", "class_character.html#adc27bdd255876169bad2ed0bae0cffb5", null ], + [ "Character", "class_character.html#a77e33a11f703b3eebb8af8699dfc5785", null ], + [ "~Character", "class_character.html#a9e9be564d05ded80962b2045aa70b3fc", null ], + [ "checkCollision", "class_character.html#af39a1917fe85e9b89455cd4bc85b8ad7", null ], + [ "down", "class_character.html#aef04abffec842976df3313e01673251b", null ], + [ "getSpeed", "class_character.html#afb7791a8c122e8b88244f0a1a54506c0", null ], + [ "moveLeft", "class_character.html#a88dfc867ab226d3f115b891fc3b34d67", null ], + [ "moveLeft", "class_character.html#a3b9c5fdd6d1587034d0def2f427ca3d6", null ], + [ "moveRight", "class_character.html#a0a8bf66e3d70c196a0fa8ce183f4aeb4", null ], + [ "moveRight", "class_character.html#a8ea1d3546570fe89d83dd29177787543", null ], + [ "printElement", "class_character.html#a3600d60ee2a732b9776277df6b76790a", null ], + [ "run", "class_character.html#a42e9030d75b7096984c27e2abe7ae603", null ], + [ "run", "class_character.html#ae421d9bbd63476f327cb9a749255c901", null ], + [ "setSpeed", "class_character.html#accb710d32fe5ebd07e1a36eb1ca5956d", null ], + [ "translate", "class_character.html#a73172138780a4dc49750e3c0242e46a1", null ], + [ "up", "class_character.html#aa8a72c17bc8e2a3e50b2b37a25e50931", null ], + [ "m_speed", "class_character.html#a7d7a6d44667cbe171f18ea7142f39289", null ] +]; \ No newline at end of file diff --git a/doc/html/class_character.png b/doc/html/class_character.png new file mode 100644 index 0000000..ed90b71 Binary files /dev/null and b/doc/html/class_character.png differ diff --git a/doc/html/class_coin-members.html b/doc/html/class_coin-members.html new file mode 100644 index 0000000..a0ff3c3 --- /dev/null +++ b/doc/html/class_coin-members.html @@ -0,0 +1,122 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Coin Member List
+
+
+ +

This is the complete list of members for Coin, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
Coin()Coin
Coin(const glm::vec3 &position, const unsigned int &value, const std::string &type="Coin")Coin
collide(Hero &hero)Coinvirtual
collision(Hero &hero)Elementinline
description()PrintableElementinline
Element()Element
Element(const glm::vec3 &position, const std::string &type)Element
getPosition() constPrintableElementinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
m_positionPrintableElementprotected
m_typePrintableElementprotected
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constCoinvirtual
setPosition(glm::vec3 pos)PrintableElementinline
value() constCoininline
~Coin()Coin
~Element()Element
~PrintableElement()PrintableElement
+
+ + + + diff --git a/doc/html/class_coin.html b/doc/html/class_coin.html new file mode 100644 index 0000000..8a805e9 --- /dev/null +++ b/doc/html/class_coin.html @@ -0,0 +1,265 @@ + + + + + + + +SpacImac Runner: Coin Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Coin Class Reference
+
+
+
+Inheritance diagram for Coin:
+
+
+ + +Element +PrintableElement + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Coin ()
 default constructor of class Coin
 
 Coin (const glm::vec3 &position, const unsigned int &value, const std::string &type="Coin")
 
+const int value () const
 brief method to retrieve the value of the Coin
 
~Coin ()
 default destructor of our Coin
 
+void printElement () const
 brief method to display the value of Coin's attributes
 
void collide (Hero &hero)
 
- Public Member Functions inherited from Element
 Element ()
 
 Element (const glm::vec3 &position, const std::string &type)
 
+void collision (Hero &hero)
 brief method to implement the polymorphism of the collide method for different inherited Element classes
 
~Element ()
 default destructor of our Element
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+

Constructor & Destructor Documentation

+ +

◆ Coin()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Coin::Coin (const glm::vec3 & position,
const unsigned int & value,
const std::string & type = "Coin" 
)
+
+

constructor with parameters param value to give each Coin a number to increment the hero's score

+ +
+
+

Member Function Documentation

+ +

◆ collide()

+ +
+
+ + + + + +
+ + + + + + + + +
void Coin::collide (Herohero)
+
+virtual
+
+

method to check the specific behavior if the player collides with a Coin takes an Hero instance as parameter and increments their score with the value of the Coin

+ +

Reimplemented from Element.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_coin.js b/doc/html/class_coin.js new file mode 100644 index 0000000..6e5586d --- /dev/null +++ b/doc/html/class_coin.js @@ -0,0 +1,9 @@ +var class_coin = +[ + [ "Coin", "class_coin.html#a94b2130e2d3ac956ba47271ad81c64f5", null ], + [ "Coin", "class_coin.html#ab7ffaedf9c89eceb543f279a7d1475ce", null ], + [ "~Coin", "class_coin.html#ad0371a6d98c194a0f6de615206829b16", null ], + [ "collide", "class_coin.html#a933e7c8b20c0b79b2f859df992dc8bd6", null ], + [ "printElement", "class_coin.html#ae787238d6ec9f44f58eb7b503e8043a0", null ], + [ "value", "class_coin.html#a16cf116e47f3fddb7722dbc8b20ea2a8", null ] +]; \ No newline at end of file diff --git a/doc/html/class_coin.png b/doc/html/class_coin.png new file mode 100644 index 0000000..0db8808 Binary files /dev/null and b/doc/html/class_coin.png differ diff --git a/doc/html/class_element-members.html b/doc/html/class_element-members.html new file mode 100644 index 0000000..6f64bc5 --- /dev/null +++ b/doc/html/class_element-members.html @@ -0,0 +1,118 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Element Member List
+
+
+ +

This is the complete list of members for Element, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
collide(Hero &hero)Elementvirtual
collision(Hero &hero)Elementinline
description()PrintableElementinline
Element()Element
Element(const glm::vec3 &position, const std::string &type)Element
getPosition() constPrintableElementinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
m_positionPrintableElementprotected
m_typePrintableElementprotected
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constElementvirtual
setPosition(glm::vec3 pos)PrintableElementinline
~Element()Element
~PrintableElement()PrintableElement
+
+ + + + diff --git a/doc/html/class_element.html b/doc/html/class_element.html new file mode 100644 index 0000000..f486a4e --- /dev/null +++ b/doc/html/class_element.html @@ -0,0 +1,240 @@ + + + + + + + +SpacImac Runner: Element Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Element Class Reference
+
+
+
+Inheritance diagram for Element:
+
+
+ + +PrintableElement +Coin +Floor +motor_game::End +motor_game::Gap +Obstacle +Wall +motor_game::Turn + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Element ()
 
 Element (const glm::vec3 &position, const std::string &type)
 
+virtual void printElement () const
 brief method to display the value of Element's attributes
 
+virtual void collide (Hero &hero)
 method to determine the behavior of an End when the player is colliding with it
 
+void collision (Hero &hero)
 brief method to implement the polymorphism of the collide method for different inherited Element classes
 
~Element ()
 default destructor of our Element
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+

Constructor & Destructor Documentation

+ +

◆ Element() [1/2]

+ +
+
+ + + + + + + +
Element::Element ()
+
+

default constructor of class Element our class Element is only abstract

+ +
+
+ +

◆ Element() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
Element::Element (const glm::vec3 & position,
const std::string & type 
)
+
+

constructor with parameters param type : a string which will allow us to know what kind of Element we're dealing with

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_element.js b/doc/html/class_element.js new file mode 100644 index 0000000..e3ea566 --- /dev/null +++ b/doc/html/class_element.js @@ -0,0 +1,9 @@ +var class_element = +[ + [ "Element", "class_element.html#ab0d0e20be9a36ae676202db753faeec9", null ], + [ "Element", "class_element.html#a47e87e435ffe285ca18013d452c12a3e", null ], + [ "~Element", "class_element.html#a13d54ba9c08b6bec651402f1c2bb002c", null ], + [ "collide", "class_element.html#aec262d765312fa14a594695b7e1e2428", null ], + [ "collision", "class_element.html#abe9303d83544623d814c9291c0eeee72", null ], + [ "printElement", "class_element.html#a3315b21d304cc392f56f8d19a2cf2d56", null ] +]; \ No newline at end of file diff --git a/doc/html/class_element.png b/doc/html/class_element.png new file mode 100644 index 0000000..65bafa5 Binary files /dev/null and b/doc/html/class_element.png differ diff --git a/doc/html/class_enemy-members.html b/doc/html/class_enemy-members.html new file mode 100644 index 0000000..b841144 --- /dev/null +++ b/doc/html/class_enemy-members.html @@ -0,0 +1,134 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Enemy Member List
+
+
+ +

This is the complete list of members for Enemy, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Character()Character
Character(const glm::vec3 &position, const float &speed, const std::string &type)Character
checkCollision(const PrintableElement &b)Character
collide(Hero &hero)Enemy
description()PrintableElementinline
down()Character
Enemy()Enemy
Enemy(const glm::vec3 &position, const float &speed, const std::string &type="Enemy")Enemy
getPosition() constPrintableElementinline
getSpeed() const (defined in Character)Characterinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
killHero()Enemy
m_positionPrintableElementprotected
m_speed (defined in Character)Characterprotected
m_typePrintableElementprotected
moveLeft()Character
moveLeft(const int &axe) (defined in Character)Character
moveRight()Character
moveRight(const int &axe) (defined in Character)Character
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constEnemyvirtual
run()Character
run(const int &axe) (defined in Character)Character
setPosition(glm::vec3 pos)PrintableElementinline
setSpeed(float const &inSpeed) (defined in Character)Characterinline
translate(const float &x, const float &z) (defined in Character)Character
up()Character
~Character()Character
~Enemy()Enemy
~PrintableElement()PrintableElement
+
+ + + + diff --git a/doc/html/class_enemy.html b/doc/html/class_enemy.html new file mode 100644 index 0000000..12c1d0f --- /dev/null +++ b/doc/html/class_enemy.html @@ -0,0 +1,278 @@ + + + + + + + +SpacImac Runner: Enemy Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Enemy Class Reference
+
+
+
+Inheritance diagram for Enemy:
+
+
+ + +Character +PrintableElement + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Enemy ()
 default constructor of class Enemy
 
 Enemy (const glm::vec3 &position, const float &speed, const std::string &type="Enemy")
 
+void killHero ()
 constructor with parameters
 
+void collide (Hero &hero)
 method to determine the behavior of an Enemy when the player is colliding with it
 
+void printElement () const
 brief method to display the value of Enemy's attributes
 
~Enemy ()
 default destructor of our Enemy
 
- Public Member Functions inherited from Character
 Character ()
 
 Character (const glm::vec3 &position, const float &speed, const std::string &type)
 
+void run ()
 method allowing the character to move forward on the z axis
 
+void run (const int &axe)
 
+void up ()
 method allowing the character to jump up the y axis
 
+void down ()
 method allowing the character to crawl under obstacles: their height is then 1 instead of 2
 
+void moveLeft ()
 method allowing the character to move left along the x axis
 
+void moveLeft (const int &axe)
 
+void moveRight ()
 method allowing the character to move right along the x axis
 
+void moveRight (const int &axe)
 
+void setSpeed (float const &inSpeed)
 
+float getSpeed () const
 
+void translate (const float &x, const float &z)
 
bool checkCollision (const PrintableElement &b)
 method checking the collision between a character instance and a printableElement instance which is passed as a parameter More...
 
~Character ()
 default destructor of class character
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from Character
+float m_speed
 
- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+

Constructor & Destructor Documentation

+ +

◆ Enemy()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Enemy::Enemy (const glm::vec3 & position,
const float & speed,
const std::string & type = "Enemy" 
)
+
+

constructor with parameters param type : enemy by default

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_enemy.js b/doc/html/class_enemy.js new file mode 100644 index 0000000..4baafe1 --- /dev/null +++ b/doc/html/class_enemy.js @@ -0,0 +1,9 @@ +var class_enemy = +[ + [ "Enemy", "class_enemy.html#a94f30d348b6d2840fd71675472ba38dd", null ], + [ "Enemy", "class_enemy.html#aebe5967b163d286b97304d7f3e659e7e", null ], + [ "~Enemy", "class_enemy.html#ac0eec4755e28c02688065f9657150ac3", null ], + [ "collide", "class_enemy.html#a7177e12100c06efc3eda1d3e814dc785", null ], + [ "killHero", "class_enemy.html#a0bf887aeca58cd4b0b12738b25fd4d22", null ], + [ "printElement", "class_enemy.html#a1895057350de6dc50bff9086320b2588", null ] +]; \ No newline at end of file diff --git a/doc/html/class_enemy.png b/doc/html/class_enemy.png new file mode 100644 index 0000000..f7dbd0b Binary files /dev/null and b/doc/html/class_enemy.png differ diff --git a/doc/html/class_eye_camera-members.html b/doc/html/class_eye_camera-members.html new file mode 100644 index 0000000..8aabf46 --- /dev/null +++ b/doc/html/class_eye_camera-members.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
EyeCamera Member List
+
+
+ +

This is the complete list of members for EyeCamera, including all inherited members.

+ + + + + + + +
EyeCamera()EyeCamerainline
EyeCamera(const float fDistance, const float fAngleX, const float fAngleY)EyeCamerainline
getViewMatrix() constEyeCamerainlinevirtual
onKeyboardEvent(const SDL_Event &event)EyeCamerainline
onMouseEvent(const SDL_Event &e)EyeCamerainline
onMouseWheelEvent(const SDL_Event &e)EyeCamerainline
+
+ + + + diff --git a/doc/html/class_eye_camera.html b/doc/html/class_eye_camera.html new file mode 100644 index 0000000..06bb672 --- /dev/null +++ b/doc/html/class_eye_camera.html @@ -0,0 +1,145 @@ + + + + + + + +SpacImac Runner: EyeCamera Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
EyeCamera Class Reference
+
+
+ +

#include <eyeCamera.hpp>

+
+Inheritance diagram for EyeCamera:
+
+
+ + +Camera + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

EyeCamera ()
 Default constructor.
 
EyeCamera (const float fDistance, const float fAngleX, const float fAngleY)
 constructor with parameters
 
+void onKeyboardEvent (const SDL_Event &event)
 method handling SDL keyboard event
 
+void onMouseWheelEvent (const SDL_Event &e)
 method handling SDL mouse wheel event
 
+void onMouseEvent (const SDL_Event &e)
 method handling mouse movement event
 
+glm::mat4 getViewMatrix () const
 method which return a viewMatrix create with camera set up
 
+

Detailed Description

+

Class EyeCamera Camera which allow to see by the eyes of the player

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/class_eye_camera.js b/doc/html/class_eye_camera.js new file mode 100644 index 0000000..b2a366b --- /dev/null +++ b/doc/html/class_eye_camera.js @@ -0,0 +1,9 @@ +var class_eye_camera = +[ + [ "EyeCamera", "class_eye_camera.html#a5f383370d86c9a548c4bf4b6d5d93a05", null ], + [ "EyeCamera", "class_eye_camera.html#a4b4a41bf3549d55e6bd7bac873f2bf53", null ], + [ "getViewMatrix", "class_eye_camera.html#acb8c0f7117a2f39bffb130749da612b7", null ], + [ "onKeyboardEvent", "class_eye_camera.html#a4db7ed2ad703f55ea8b9c080b5cbb8e5", null ], + [ "onMouseEvent", "class_eye_camera.html#a36f492df5cc9ad052eae99d4cf352308", null ], + [ "onMouseWheelEvent", "class_eye_camera.html#a5f99695388ba6a70514ced81caea415f", null ] +]; \ No newline at end of file diff --git a/doc/html/class_eye_camera.png b/doc/html/class_eye_camera.png new file mode 100644 index 0000000..89bbd42 Binary files /dev/null and b/doc/html/class_eye_camera.png differ diff --git a/doc/html/class_floor-members.html b/doc/html/class_floor-members.html new file mode 100644 index 0000000..ffa157c --- /dev/null +++ b/doc/html/class_floor-members.html @@ -0,0 +1,121 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Floor Member List
+
+
+ +

This is the complete list of members for Floor, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
collide(Hero &hero)Elementvirtual
collision(Hero &hero)Elementinline
description()PrintableElementinline
Element()Element
Element(const glm::vec3 &position, const std::string &type)Element
Floor()Floor
Floor(const glm::vec3 &position, const std::string &type="Floor") (defined in Floor)Floor
getPosition() constPrintableElementinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
m_positionPrintableElementprotected
m_typePrintableElementprotected
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constFloorvirtual
setPosition(glm::vec3 pos)PrintableElementinline
~Element()Element
~Floor()Floor
~PrintableElement()PrintableElement
+
+ + + + diff --git a/doc/html/class_floor.html b/doc/html/class_floor.html new file mode 100644 index 0000000..80f2b08 --- /dev/null +++ b/doc/html/class_floor.html @@ -0,0 +1,199 @@ + + + + + + + +SpacImac Runner: Floor Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Floor Class Reference
+
+
+
+Inheritance diagram for Floor:
+
+
+ + +Element +PrintableElement +motor_game::Turn + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Floor ()
 default constructor of class Floor
 
Floor (const glm::vec3 &position, const std::string &type="Floor")
 
+void printElement () const
 brief method to display the value of Floor's attributes
 
~Floor ()
 default destructor of our Floor
 
- Public Member Functions inherited from Element
 Element ()
 
 Element (const glm::vec3 &position, const std::string &type)
 
+virtual void collide (Hero &hero)
 method to determine the behavior of an End when the player is colliding with it
 
+void collision (Hero &hero)
 brief method to implement the polymorphism of the collide method for different inherited Element classes
 
~Element ()
 default destructor of our Element
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_floor.js b/doc/html/class_floor.js new file mode 100644 index 0000000..e8a677a --- /dev/null +++ b/doc/html/class_floor.js @@ -0,0 +1,7 @@ +var class_floor = +[ + [ "Floor", "class_floor.html#af54aee372639bc176f4507ab0d481246", null ], + [ "Floor", "class_floor.html#abb44ef749dc81645f01aa9e2a099fbd2", null ], + [ "~Floor", "class_floor.html#ae1b805579f18a76fe2754a3601202e80", null ], + [ "printElement", "class_floor.html#ad04f41cee097ee6519582c09e0d9c27e", null ] +]; \ No newline at end of file diff --git a/doc/html/class_floor.png b/doc/html/class_floor.png new file mode 100644 index 0000000..e6bfd4a Binary files /dev/null and b/doc/html/class_floor.png differ diff --git a/doc/html/class_font-members.html b/doc/html/class_font-members.html new file mode 100644 index 0000000..96c6869 --- /dev/null +++ b/doc/html/class_font-members.html @@ -0,0 +1,107 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Font Member List
+
+
+ +

This is the complete list of members for Font, including all inherited members.

+ + + + + + + + +
Font()Font
Font(const std::string &fontPath)Font
getFontPath() const (defined in Font)Fontinline
loadFont() (defined in Font)Font
puissance2sup(const int i) (defined in Font)Font
setFontPath(const std::string &fontPath)Font
~Font()Font
+
+ + + + diff --git a/doc/html/class_font.html b/doc/html/class_font.html new file mode 100644 index 0000000..270f07a --- /dev/null +++ b/doc/html/class_font.html @@ -0,0 +1,152 @@ + + + + + + + +SpacImac Runner: Font Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Font Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Font ()
 default constructor
 
 Font (const std::string &fontPath)
 
+int puissance2sup (const int i)
 
+void setFontPath (const std::string &fontPath)
 setter for filePath
 
+std::string getFontPath () const
 
~Font ()
 default destructor
 
+void loadFont ()
 
+

Constructor & Destructor Documentation

+ +

◆ Font()

+ +
+
+ + + + + + + + +
Font::Font (const std::string & fontPath)
+
+

constructor with parameters param filePath to know which font and where to load it

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_font.js b/doc/html/class_font.js new file mode 100644 index 0000000..d8aa110 --- /dev/null +++ b/doc/html/class_font.js @@ -0,0 +1,10 @@ +var class_font = +[ + [ "Font", "class_font.html#a4e6a119206f505522100221c1fafde45", null ], + [ "Font", "class_font.html#ae218e0bbf16ed92ca45a6fab88ee0870", null ], + [ "~Font", "class_font.html#a134aaa2f78af0c12d3ce504957169768", null ], + [ "getFontPath", "class_font.html#aab2ed8e966cc0073c95493039ab17fe0", null ], + [ "loadFont", "class_font.html#a67a7c9dde92249393cbafb1e803611c2", null ], + [ "puissance2sup", "class_font.html#a9d67a60606b333c8e92c6a46861de493", null ], + [ "setFontPath", "class_font.html#acf2f4b0d42fc1fb6e5d2ce6c7e9c7595", null ] +]; \ No newline at end of file diff --git a/doc/html/class_hero-members.html b/doc/html/class_hero-members.html new file mode 100644 index 0000000..09cf6bc --- /dev/null +++ b/doc/html/class_hero-members.html @@ -0,0 +1,135 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Hero Member List
+
+
+ +

This is the complete list of members for Hero, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Character()Character
Character(const glm::vec3 &position, const float &speed, const std::string &type)Character
checkCollision(const PrintableElement &b)Hero
description()PrintableElementinline
down()Character
getPosition() constPrintableElementinline
getScore() constHeroinline
getSpeed() const (defined in Character)Characterinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
Hero()Hero
Hero(const glm::vec3 &position, const float &speed, const std::string &type="Hero")Hero
m_positionPrintableElementprotected
m_speed (defined in Character)Characterprotected
m_typePrintableElementprotected
moveLeft()Character
moveLeft(const int &axe) (defined in Character)Character
moveRight()Character
moveRight(const int &axe) (defined in Character)Character
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constHerovirtual
run()Character
run(const int &axe) (defined in Character)Character
scanArray(Element *(*list)[50][50], const char &movement)Hero
setPosition(glm::vec3 pos)PrintableElementinline
setScore(float &inScore)Heroinline
setSpeed(float const &inSpeed) (defined in Character)Characterinline
translate(const float &x, const float &z) (defined in Character)Character
up()Character
~Character()Character
~Hero()Hero
~PrintableElement()PrintableElement
+
+ + + + diff --git a/doc/html/class_hero.html b/doc/html/class_hero.html new file mode 100644 index 0000000..c295095 --- /dev/null +++ b/doc/html/class_hero.html @@ -0,0 +1,322 @@ + + + + + + + +SpacImac Runner: Hero Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Hero Class Reference
+
+
+
+Inheritance diagram for Hero:
+
+
+ + +Character +PrintableElement + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Hero ()
 default constructor of class Hero
 
Hero (const glm::vec3 &position, const float &speed, const std::string &type="Hero")
 constructor with parameters
 
+void printElement () const
 brief method to display the value of Hero's attributes
 
~Hero ()
 default destructor of our Hero
 
void setScore (float &inScore)
 
+int getScore () const
 brief method to retrieve the score of Hero
 
bool scanArray (Element *(*list)[50][50], const char &movement)
 
bool checkCollision (const PrintableElement &b)
 
- Public Member Functions inherited from Character
 Character ()
 
 Character (const glm::vec3 &position, const float &speed, const std::string &type)
 
+void run ()
 method allowing the character to move forward on the z axis
 
+void run (const int &axe)
 
+void up ()
 method allowing the character to jump up the y axis
 
+void down ()
 method allowing the character to crawl under obstacles: their height is then 1 instead of 2
 
+void moveLeft ()
 method allowing the character to move left along the x axis
 
+void moveLeft (const int &axe)
 
+void moveRight ()
 method allowing the character to move right along the x axis
 
+void moveRight (const int &axe)
 
+void setSpeed (float const &inSpeed)
 
+float getSpeed () const
 
+void translate (const float &x, const float &z)
 
bool checkCollision (const PrintableElement &b)
 method checking the collision between a character instance and a printableElement instance which is passed as a parameter More...
 
~Character ()
 default destructor of class character
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from Character
+float m_speed
 
- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+

Member Function Documentation

+ +

◆ checkCollision()

+ +
+
+ + + + + + + + +
bool Hero::checkCollision (const PrintableElementb)
+
+

character's heighth is two

+ +
+
+ +

◆ scanArray()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool Hero::scanArray (Element *(*) list[50][50],
const char & movement 
)
+
+

method called when the hero tries to move this method checks if there is an element where the Hero wants to move then uses the collide methods to do something according to what type of element we're dealing with

+ +
+
+ +

◆ setScore()

+ +
+
+ + + + + +
+ + + + + + + + +
void Hero::setScore (float & inScore)
+
+inline
+
+

brief method to increment the score of Hero takes a parameter to pass the vaormMatrix2();

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_hero.js b/doc/html/class_hero.js new file mode 100644 index 0000000..ed47e25 --- /dev/null +++ b/doc/html/class_hero.js @@ -0,0 +1,11 @@ +var class_hero = +[ + [ "Hero", "class_hero.html#ab5920677a4b5cb59d6f513922d037dca", null ], + [ "Hero", "class_hero.html#aebb8529350172b15e22c038351b2d315", null ], + [ "~Hero", "class_hero.html#a5aeef41ede5a80dc29c5acd7b553c4da", null ], + [ "checkCollision", "class_hero.html#a1038af0dc35a7ba289aaead4ada14f16", null ], + [ "getScore", "class_hero.html#ae641d66ff284f3727c47b6113c05088e", null ], + [ "printElement", "class_hero.html#a5dee41509761cffeb71618295b164200", null ], + [ "scanArray", "class_hero.html#ac71f8fd8a5c7d8f379935f17dd0dddc6", null ], + [ "setScore", "class_hero.html#a5187f68140a9fb4b7a7c587d6d7ddfaa", null ] +]; \ No newline at end of file diff --git a/doc/html/class_hero.png b/doc/html/class_hero.png new file mode 100644 index 0000000..7e518fe Binary files /dev/null and b/doc/html/class_hero.png differ diff --git a/doc/html/class_light_shader-members.html b/doc/html/class_light_shader-members.html new file mode 100644 index 0000000..98ed0d0 --- /dev/null +++ b/doc/html/class_light_shader-members.html @@ -0,0 +1,107 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
LightShader Member List
+
+
+ +

This is the complete list of members for LightShader, including all inherited members.

+ + + + + + + + +
LightShader(const char *filepathFragmentShader="./shaders/directionallight.fs.glsl")LightShader
LightShader(const char *filepathVertexShader, const char *filepathFragmentShader) (defined in LightShader)LightShader
setUniformMatrix() constLightShader
setUniformMatrix2() const (defined in LightShader)LightShader
setViewMatrix(const glm::mat4 &sceneModel, const glm::mat4 &projection)LightShader
use()LightShader
~LightShader()LightShaderinline
+
+ + + + diff --git a/doc/html/class_light_shader.html b/doc/html/class_light_shader.html new file mode 100644 index 0000000..8526fa3 --- /dev/null +++ b/doc/html/class_light_shader.html @@ -0,0 +1,135 @@ + + + + + + + +SpacImac Runner: LightShader Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
LightShader Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

LightShader (const char *filepathFragmentShader="./shaders/directionallight.fs.glsl")
 constructor with parameters
 
LightShader (const char *filepathVertexShader, const char *filepathFragmentShader)
 
~LightShader ()
 destructor
 
+void setUniformMatrix () const
 method which set uniform Matrix for the shaders
 
+void setUniformMatrix2 () const
 
+void setViewMatrix (const glm::mat4 &sceneModel, const glm::mat4 &projection)
 method which set projection and view matrix
 
+void use ()
 method which launch the shader programm
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_light_shader.js b/doc/html/class_light_shader.js new file mode 100644 index 0000000..edf8904 --- /dev/null +++ b/doc/html/class_light_shader.js @@ -0,0 +1,10 @@ +var class_light_shader = +[ + [ "LightShader", "class_light_shader.html#a32ea81d3f4198b359276fdd558f30969", null ], + [ "LightShader", "class_light_shader.html#a5a651aafc3ef524235888a95b4d9659d", null ], + [ "~LightShader", "class_light_shader.html#ac70ce3be8cce126572c222d847fadffb", null ], + [ "setUniformMatrix", "class_light_shader.html#af168132426e69ab8b655aee4bbab1306", null ], + [ "setUniformMatrix2", "class_light_shader.html#a0fd39a8e8f6e3301fcae18a71924d441", null ], + [ "setViewMatrix", "class_light_shader.html#a395d77db8bacc40f93795d8199206529", null ], + [ "use", "class_light_shader.html#a9e08233bd63ae209f4e23a8c5e7625af", null ] +]; \ No newline at end of file diff --git a/doc/html/class_menu-members.html b/doc/html/class_menu-members.html new file mode 100644 index 0000000..609786d --- /dev/null +++ b/doc/html/class_menu-members.html @@ -0,0 +1,112 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Menu Member List
+
+
+ +

This is the complete list of members for Menu, including all inherited members.

+ + + + + + + + + + + + + +
displayMenu() const (defined in Menu)Menu
getDataPointer() const (defined in Menu)Menuinline
getVertexCount() const (defined in Menu)Menuinline
initMenu(GLuint &vbo, GLuint &vao) (defined in Menu)Menu
Menu() (defined in Menu)Menuinline
onMouseEvent(glm::ivec2 position) (defined in Menu)Menu
setVisibility(bool inBool)Menuinline
type() constMenuinline
type(const int inType)Menuinline
vaoManager(GLuint &vao, GLuint &vbo) (defined in Menu)Menu
vboManager(GLuint &vbo) (defined in Menu)Menu
visibility() constMenuinline
+
+ + + + diff --git a/doc/html/class_menu.html b/doc/html/class_menu.html new file mode 100644 index 0000000..7a39d24 --- /dev/null +++ b/doc/html/class_menu.html @@ -0,0 +1,153 @@ + + + + + + + +SpacImac Runner: Menu Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Menu Class Reference
+
+
+ +

Class Menu. + More...

+ +

#include <Menu.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+bool visibility () const
 Brief Getter Menu visibility.
 
+void setVisibility (bool inBool)
 Brief Setter Menu visibility.
 
+int type () const
 Brief getter menu type.
 
+void type (const int inType)
 Brief setter of menu type.
 
+void initMenu (GLuint &vbo, GLuint &vao)
 
+void displayMenu () const
 
+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+void vboManager (GLuint &vbo)
 
+void vaoManager (GLuint &vao, GLuint &vbo)
 
+int onMouseEvent (glm::ivec2 position)
 
+

Detailed Description

+

Class Menu.

+

The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_menu.js b/doc/html/class_menu.js new file mode 100644 index 0000000..e017f97 --- /dev/null +++ b/doc/html/class_menu.js @@ -0,0 +1,15 @@ +var class_menu = +[ + [ "Menu", "class_menu.html#ad466dd83355124a6ed958430450bfe94", null ], + [ "displayMenu", "class_menu.html#aacf55bc6e8a5d143d3b2b8312fa631b7", null ], + [ "getDataPointer", "class_menu.html#a7ab75840281cbe03d9d4f25de8a5da4f", null ], + [ "getVertexCount", "class_menu.html#ad58faf741b29e6405e50dc3d80c2be5f", null ], + [ "initMenu", "class_menu.html#a21fc18192238333704f2a2c7e80e6f33", null ], + [ "onMouseEvent", "class_menu.html#afd79ebfc23fa27c2830683b2c31501d6", null ], + [ "setVisibility", "class_menu.html#adb992afd36cedc22387287612deb67d2", null ], + [ "type", "class_menu.html#add933febc8aed23d371c35c4c313ba11", null ], + [ "type", "class_menu.html#a6968b61f3d2452c03b3b21977e0b2ada", null ], + [ "vaoManager", "class_menu.html#afca1cccdf1c6795eadb4fadc25f6b4ac", null ], + [ "vboManager", "class_menu.html#a78655c38d6766ef2eec372f89ec8218f", null ], + [ "visibility", "class_menu.html#af36ca6af3edba3abd08c30bcb35a2390", null ] +]; \ No newline at end of file diff --git a/doc/html/class_obstacle-members.html b/doc/html/class_obstacle-members.html new file mode 100644 index 0000000..054f0dd --- /dev/null +++ b/doc/html/class_obstacle-members.html @@ -0,0 +1,121 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Obstacle Member List
+
+
+ +

This is the complete list of members for Obstacle, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
collide(Hero &hero)Obstaclevirtual
collision(Hero &hero)Elementinline
description()PrintableElementinline
Element()Element
Element(const glm::vec3 &position, const std::string &type)Element
getPosition() constPrintableElementinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
m_positionPrintableElementprotected
m_typePrintableElementprotected
Obstacle()Obstacle
Obstacle(const glm::vec3 &position, const std::string &type="Obstacle")Obstacle
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constObstaclevirtual
setPosition(glm::vec3 pos)PrintableElementinline
~Element()Element
~Obstacle()Obstacle
~PrintableElement()PrintableElement
+
+ + + + diff --git a/doc/html/class_obstacle.html b/doc/html/class_obstacle.html new file mode 100644 index 0000000..18b521a --- /dev/null +++ b/doc/html/class_obstacle.html @@ -0,0 +1,227 @@ + + + + + + + +SpacImac Runner: Obstacle Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Obstacle Class Reference
+
+
+
+Inheritance diagram for Obstacle:
+
+
+ + +Element +PrintableElement + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Obstacle ()
 default constructor of class Obstacle
 
 Obstacle (const glm::vec3 &position, const std::string &type="Obstacle")
 
~Obstacle ()
 default destructor of our Floor
 
+void printElement () const
 method to display the value of Obstacle's attributes
 
+void collide (Hero &hero)
 method to determine the behavior of an Obstacle when the player is colliding with it
 
- Public Member Functions inherited from Element
 Element ()
 
 Element (const glm::vec3 &position, const std::string &type)
 
+void collision (Hero &hero)
 brief method to implement the polymorphism of the collide method for different inherited Element classes
 
~Element ()
 default destructor of our Element
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+

Constructor & Destructor Documentation

+ +

◆ Obstacle()

+ +
+
+ + + + + + + + + + + + + + + + + + +
Obstacle::Obstacle (const glm::vec3 & position,
const std::string & type = "Obstacle" 
)
+
+

constructor with parameters param type : obstacle by default

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_obstacle.js b/doc/html/class_obstacle.js new file mode 100644 index 0000000..4645cd9 --- /dev/null +++ b/doc/html/class_obstacle.js @@ -0,0 +1,8 @@ +var class_obstacle = +[ + [ "Obstacle", "class_obstacle.html#a8f734072321fa06a7b7dae2d5f50f352", null ], + [ "Obstacle", "class_obstacle.html#abe293155be3bb14ff303ca419c7bcb1a", null ], + [ "~Obstacle", "class_obstacle.html#af2f9cc9c6cff75dca0974fd5ac4f71a9", null ], + [ "collide", "class_obstacle.html#a14b335c8afe547478979bb35730edca0", null ], + [ "printElement", "class_obstacle.html#ae7198a1e9113d43a99ace9deaed06942", null ] +]; \ No newline at end of file diff --git a/doc/html/class_obstacle.png b/doc/html/class_obstacle.png new file mode 100644 index 0000000..bb8bafa Binary files /dev/null and b/doc/html/class_obstacle.png differ diff --git a/doc/html/class_perspective_shader-members.html b/doc/html/class_perspective_shader-members.html new file mode 100644 index 0000000..41fad70 --- /dev/null +++ b/doc/html/class_perspective_shader-members.html @@ -0,0 +1,107 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PerspectiveShader Member List
+
+
+ +

This is the complete list of members for PerspectiveShader, including all inherited members.

+ + + + + + + + +
PerspectiveShader(const char *filepathFragmentShader="./shaders/normals.fs.glsl")PerspectiveShader
PerspectiveShader(const char *filepathVertexShader, const char *filepathFragmentShader)PerspectiveShader
setUniformMatrix() constPerspectiveShader
setUniformMatrix2() const (defined in PerspectiveShader)PerspectiveShader
setViewMatrix(const glm::mat4 &sceneModel, const glm::mat4 &projection)PerspectiveShader
use()PerspectiveShader
~PerspectiveShader()PerspectiveShaderinline
+
+ + + + diff --git a/doc/html/class_perspective_shader.html b/doc/html/class_perspective_shader.html new file mode 100644 index 0000000..4f85ecd --- /dev/null +++ b/doc/html/class_perspective_shader.html @@ -0,0 +1,143 @@ + + + + + + + +SpacImac Runner: PerspectiveShader Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
PerspectiveShader Class Reference
+
+
+ +

Shader program class. + More...

+ +

#include <perspectiveShader.hpp>

+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

PerspectiveShader (const char *filepathFragmentShader="./shaders/normals.fs.glsl")
 constructor
 
PerspectiveShader (const char *filepathVertexShader, const char *filepathFragmentShader)
 constructor with parameters
 
~PerspectiveShader ()
 destructor by default
 
+void setUniformMatrix () const
 method which set uniform matrix for the shader
 
+void setUniformMatrix2 () const
 
+void setViewMatrix (const glm::mat4 &sceneModel, const glm::mat4 &projection)
 method which set projection and view matrix
 
+void use ()
 method which launch the shader program
 
+

Detailed Description

+

Shader program class.

+

The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_perspective_shader.js b/doc/html/class_perspective_shader.js new file mode 100644 index 0000000..698070b --- /dev/null +++ b/doc/html/class_perspective_shader.js @@ -0,0 +1,10 @@ +var class_perspective_shader = +[ + [ "PerspectiveShader", "class_perspective_shader.html#a1ee093db52d7d7c2db4b1abf02442aff", null ], + [ "PerspectiveShader", "class_perspective_shader.html#a2a5db1f2fa4f9e841c622763e2a8b52f", null ], + [ "~PerspectiveShader", "class_perspective_shader.html#aebe00cbf8b336b1d829d004af1aa52ba", null ], + [ "setUniformMatrix", "class_perspective_shader.html#a0346f2a0bd8e5cf11c3d1014a9953fb1", null ], + [ "setUniformMatrix2", "class_perspective_shader.html#abfd90954c703d069ca549372578f3e78", null ], + [ "setViewMatrix", "class_perspective_shader.html#a269202bb545bd5a302facacefa81533a", null ], + [ "use", "class_perspective_shader.html#a16f12cd5ff654fdcaa6af12431c7d9c5", null ] +]; \ No newline at end of file diff --git a/doc/html/class_printable_element-members.html b/doc/html/class_printable_element-members.html new file mode 100644 index 0000000..4e3295c --- /dev/null +++ b/doc/html/class_printable_element-members.html @@ -0,0 +1,113 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PrintableElement Member List
+
+
+ +

This is the complete list of members for PrintableElement, including all inherited members.

+ + + + + + + + + + + + + + +
description()PrintableElementinline
getPosition() constPrintableElementinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
m_positionPrintableElementprotected
m_typePrintableElementprotected
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constPrintableElementvirtual
setPosition(glm::vec3 pos)PrintableElementinline
~PrintableElement()PrintableElement
+
+ + + + diff --git a/doc/html/class_printable_element.html b/doc/html/class_printable_element.html new file mode 100644 index 0000000..0f288c2 --- /dev/null +++ b/doc/html/class_printable_element.html @@ -0,0 +1,281 @@ + + + + + + + +SpacImac Runner: PrintableElement Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
PrintableElement Class Reference
+
+
+
+Inheritance diagram for PrintableElement:
+
+
+ + +Character +Element +Enemy +Hero +Coin +Floor +motor_game::End +motor_game::Gap +Obstacle +Wall + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+virtual void printElement () const
 method to display the value of PrintableElement's attributes
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + +

+Protected Attributes

glm::vec3 m_position
 
std::string m_type
 
+

Constructor & Destructor Documentation

+ +

◆ PrintableElement() [1/2]

+ +
+
+ + + + + + + +
PrintableElement::PrintableElement ()
+
+ +

default constructor of class PrintableElement

+

our class PrintableElement is only abstract

+ +
+
+ +

◆ PrintableElement() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
PrintableElement::PrintableElement (const glm::vec3 & position,
const std::string & type 
)
+
+ +

constructor with parameters

+
Parameters
+ + +
type: a string which will allow us to know what kind of PrintableElement we're dealing with
+
+
+ +
+
+

Member Data Documentation

+ +

◆ m_position

+ +
+
+ + + + + +
+ + + + +
glm::vec3 PrintableElement::m_position
+
+protected
+
+

coordinates of the PrintableElement

+ +
+
+ +

◆ m_type

+ +
+
+ + + + + +
+ + + + +
std::string PrintableElement::m_type
+
+protected
+
+

type of the PrintableElement

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_printable_element.js b/doc/html/class_printable_element.js new file mode 100644 index 0000000..05c5cb0 --- /dev/null +++ b/doc/html/class_printable_element.js @@ -0,0 +1,16 @@ +var class_printable_element = +[ + [ "PrintableElement", "class_printable_element.html#a009b9fd5c08d09ab8e773f7a00a5ee32", null ], + [ "PrintableElement", "class_printable_element.html#a417fc20e093b3848509977b021126767", null ], + [ "~PrintableElement", "class_printable_element.html#a789a5e025057f55baf234f7defa0acd4", null ], + [ "description", "class_printable_element.html#a749e7f0aafe45e0901f399524175eeee", null ], + [ "getPosition", "class_printable_element.html#a28297e04d261ea6d2124d51d53f8c11c", null ], + [ "getType", "class_printable_element.html#ad31b8e6efe88fd081424db4ffbc87edc", null ], + [ "getX", "class_printable_element.html#aae915c7eb90a8673ac4abf12c9cad5f1", null ], + [ "getY", "class_printable_element.html#ac54f34dfdeb402410fb8d91a0d6a578a", null ], + [ "getZ", "class_printable_element.html#a77eb7f324a737483c1ef8dc755c83e9e", null ], + [ "printElement", "class_printable_element.html#ab010677021618677ab8604ac5f3390f7", null ], + [ "setPosition", "class_printable_element.html#a3093aa30346e047f45dce13773964924", null ], + [ "m_position", "class_printable_element.html#ab0821f7fc243e730934ec184e1d3e35c", null ], + [ "m_type", "class_printable_element.html#a95735f770c6997776c77a16177aba11f", null ] +]; \ No newline at end of file diff --git a/doc/html/class_printable_element.png b/doc/html/class_printable_element.png new file mode 100644 index 0000000..e1d4552 Binary files /dev/null and b/doc/html/class_printable_element.png differ diff --git a/doc/html/class_scene-members.html b/doc/html/class_scene-members.html new file mode 100644 index 0000000..3399f84 --- /dev/null +++ b/doc/html/class_scene-members.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Scene Member List
+
+
+ +

This is the complete list of members for Scene, including all inherited members.

+ + + + + + +
loadScene(motor_game::Map &inMap, float speed)Scene
Scene()Scene
Scene(std::vector< std::unique_ptr< glimac::Object >> inDataObject, std::shared_ptr< Camera > inCamera)Scene
Scene(std::vector< std::unique_ptr< glimac::Object >> inDataObject, std::shared_ptr< Camera > inCamera, std::vector< GLuint *> inTexture, std::vector< PerspectiveShader *> inShader) (defined in Scene)Scene
~Scene()Scene
+
+ + + + diff --git a/doc/html/class_scene.html b/doc/html/class_scene.html new file mode 100644 index 0000000..3f0f3b5 --- /dev/null +++ b/doc/html/class_scene.html @@ -0,0 +1,156 @@ + + + + + + + +SpacImac Runner: Scene Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Scene Class Reference
+
+
+ + + + + + + + + + + + + + + +

+Public Member Functions

Scene ()
 Constructor by default.
 
 Scene (std::vector< std::unique_ptr< glimac::Object >> inDataObject, std::shared_ptr< Camera > inCamera)
 
Scene (std::vector< std::unique_ptr< glimac::Object >> inDataObject, std::shared_ptr< Camera > inCamera, std::vector< GLuint *> inTexture, std::vector< PerspectiveShader *> inShader)
 
~Scene ()
 Destructor.
 
+void loadScene (motor_game::Map &inMap, float speed)
 Methods which draw the scene with a speed translation by reading the map.
 
+

Constructor & Destructor Documentation

+ +

◆ Scene()

+ +
+
+ + + + + + + + + + + + + + + + + + +
Scene::Scene (std::vector< std::unique_ptr< glimac::Object >> inDataObject,
std::shared_ptr< CamerainCamera 
)
+
+

Constructor with parameters param inDataObject : vector of Object (Cube, Cone, Sphere)

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_scene.js b/doc/html/class_scene.js new file mode 100644 index 0000000..a453d86 --- /dev/null +++ b/doc/html/class_scene.js @@ -0,0 +1,8 @@ +var class_scene = +[ + [ "Scene", "class_scene.html#ad10176d75a9cc0da56626f682d083507", null ], + [ "Scene", "class_scene.html#a8ee4eae847565a51acd3babef70ee0f5", null ], + [ "Scene", "class_scene.html#ab61f546aa32bc46a2c339bed266ec4c6", null ], + [ "~Scene", "class_scene.html#a3b8cec2e32546713915f8c6303c951f1", null ], + [ "loadScene", "class_scene.html#a32091b54cbae4bbb5baffc74bad0b297", null ] +]; \ No newline at end of file diff --git a/doc/html/class_shader_l-members.html b/doc/html/class_shader_l-members.html new file mode 100644 index 0000000..49440c8 --- /dev/null +++ b/doc/html/class_shader_l-members.html @@ -0,0 +1,115 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ShaderL Member List
+
+
+ +

This is the complete list of members for ShaderL, including all inherited members.

+ + + + + + + + + + + + + + + + +
ID (defined in ShaderL)ShaderL
setBool(const std::string &name, bool value) const (defined in ShaderL)ShaderLinline
setFloat(const std::string &name, float value) const (defined in ShaderL)ShaderLinline
setInt(const std::string &name, int value) const (defined in ShaderL)ShaderLinline
setMat2(const std::string &name, const glm::mat2 &mat) const (defined in ShaderL)ShaderLinline
setMat3(const std::string &name, const glm::mat3 &mat) const (defined in ShaderL)ShaderLinline
setMat4(const std::string &name, const glm::mat4 &mat) const (defined in ShaderL)ShaderLinline
setVec2(const std::string &name, const glm::vec2 &value) const (defined in ShaderL)ShaderLinline
setVec2(const std::string &name, float x, float y) const (defined in ShaderL)ShaderLinline
setVec3(const std::string &name, const glm::vec3 &value) const (defined in ShaderL)ShaderLinline
setVec3(const std::string &name, float x, float y, float z) const (defined in ShaderL)ShaderLinline
setVec4(const std::string &name, const glm::vec4 &value) const (defined in ShaderL)ShaderLinline
setVec4(const std::string &name, float x, float y, float z, float w) (defined in ShaderL)ShaderLinline
ShaderL(const char *vertexPath, const char *fragmentPath, const char *geometryPath=nullptr) (defined in ShaderL)ShaderLinline
use() (defined in ShaderL)ShaderLinline
+
+ + + + diff --git a/doc/html/class_shader_l.html b/doc/html/class_shader_l.html new file mode 100644 index 0000000..7b819f8 --- /dev/null +++ b/doc/html/class_shader_l.html @@ -0,0 +1,157 @@ + + + + + + + +SpacImac Runner: ShaderL Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
ShaderL Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ShaderL (const char *vertexPath, const char *fragmentPath, const char *geometryPath=nullptr)
 
+void use ()
 
+void setBool (const std::string &name, bool value) const
 
+void setInt (const std::string &name, int value) const
 
+void setFloat (const std::string &name, float value) const
 
+void setVec2 (const std::string &name, const glm::vec2 &value) const
 
+void setVec2 (const std::string &name, float x, float y) const
 
+void setVec3 (const std::string &name, const glm::vec3 &value) const
 
+void setVec3 (const std::string &name, float x, float y, float z) const
 
+void setVec4 (const std::string &name, const glm::vec4 &value) const
 
+void setVec4 (const std::string &name, float x, float y, float z, float w)
 
+void setMat2 (const std::string &name, const glm::mat2 &mat) const
 
+void setMat3 (const std::string &name, const glm::mat3 &mat) const
 
+void setMat4 (const std::string &name, const glm::mat4 &mat) const
 
+ + + +

+Public Attributes

+unsigned int ID
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/class_shader_l.js b/doc/html/class_shader_l.js new file mode 100644 index 0000000..b5d10da --- /dev/null +++ b/doc/html/class_shader_l.js @@ -0,0 +1,18 @@ +var class_shader_l = +[ + [ "ShaderL", "class_shader_l.html#afaf02ad66951f0fce134c432416c4910", null ], + [ "setBool", "class_shader_l.html#a6647c0f40c32543c16bd1f62e4ce1e13", null ], + [ "setFloat", "class_shader_l.html#a0e96467662e5562474be41db990f960a", null ], + [ "setInt", "class_shader_l.html#aa98bf6a05557d6bf3fa00845f7751245", null ], + [ "setMat2", "class_shader_l.html#ae5280110c5eed464dc5f95373f341aba", null ], + [ "setMat3", "class_shader_l.html#a8367c0adfeb6f3e64b37c3b6bc38c58c", null ], + [ "setMat4", "class_shader_l.html#aa567ff72eff66d933b0289ef4daf9cbf", null ], + [ "setVec2", "class_shader_l.html#a136f4fd775450cb421dcf7078c2b228d", null ], + [ "setVec2", "class_shader_l.html#a6a6fe6408f7d14c87d7d156df83f8e6c", null ], + [ "setVec3", "class_shader_l.html#a70d0c5b24808006d38d0d7879f2dfc2b", null ], + [ "setVec3", "class_shader_l.html#aa77f3e38253e83ee9f43950670ddff34", null ], + [ "setVec4", "class_shader_l.html#a8c8681c952e7f3594cb8cd947e813dfb", null ], + [ "setVec4", "class_shader_l.html#aa469f4c9861115c2a99cd1f7a5ad14fe", null ], + [ "use", "class_shader_l.html#a847ce863b35d0d1cf3261f5e6be57e9a", null ], + [ "ID", "class_shader_l.html#ab5c8f1c161719ba5ac41a1d51af51f67", null ] +]; \ No newline at end of file diff --git a/doc/html/class_skybox-members.html b/doc/html/class_skybox-members.html new file mode 100644 index 0000000..259da10 --- /dev/null +++ b/doc/html/class_skybox-members.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Skybox Member List
+
+
+ +

This is the complete list of members for Skybox, including all inherited members.

+ + + + + + +
createTexture()Skybox
createTexture(std::vector< const char *> faces)Skybox
displaySkybox() (defined in Skybox)Skybox
Skybox()Skyboxinline
voManager()Skybox
+
+ + + + diff --git a/doc/html/class_skybox.html b/doc/html/class_skybox.html new file mode 100644 index 0000000..4afd5d5 --- /dev/null +++ b/doc/html/class_skybox.html @@ -0,0 +1,146 @@ + + + + + + + +SpacImac Runner: Skybox Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Skybox Class Reference
+
+
+ + + + + + + + + + + + + + + +

+Public Member Functions

Skybox ()
 Default Skybox constructor.
 
+void voManager ()
 method which create the vbo and the vao for the skybox
 
+void createTexture ()
 method which create a texture by default
 
void createTexture (std::vector< const char *> faces)
 
+void displaySkybox ()
 
+

Member Function Documentation

+ +

◆ createTexture()

+ +
+
+ + + + + + + + +
void Skybox::createTexture (std::vector< const char *> faces)
+
+

method wich create a custom Texture param faces : vector which contains 6 filephaths for the 6 image of the skybox

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_skybox.js b/doc/html/class_skybox.js new file mode 100644 index 0000000..8a44c5c --- /dev/null +++ b/doc/html/class_skybox.js @@ -0,0 +1,8 @@ +var class_skybox = +[ + [ "Skybox", "class_skybox.html#a77a92db4492ed94ed4bd101b05ffb1f4", null ], + [ "createTexture", "class_skybox.html#aa40c6b9153f496f2f46bd7a895d42f24", null ], + [ "createTexture", "class_skybox.html#a28d12c313aa37f558f816cd2449edc98", null ], + [ "displaySkybox", "class_skybox.html#a02c2686b6c4d42babc710211ff0c2f2a", null ], + [ "voManager", "class_skybox.html#a033ca8b4cc7350d2deac064d71f2a992", null ] +]; \ No newline at end of file diff --git a/doc/html/class_texture_loader-members.html b/doc/html/class_texture_loader-members.html new file mode 100644 index 0000000..c036d59 --- /dev/null +++ b/doc/html/class_texture_loader-members.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
TextureLoader Member List
+
+
+ +

This is the complete list of members for TextureLoader, including all inherited members.

+ + + +
LoadCubeMap(std::vector< const char *> faces)TextureLoaderinlinestatic
LoadTexture(const char *FilePath)TextureLoaderinlinestatic
+
+ + + + diff --git a/doc/html/class_texture_loader.html b/doc/html/class_texture_loader.html new file mode 100644 index 0000000..df6848c --- /dev/null +++ b/doc/html/class_texture_loader.html @@ -0,0 +1,167 @@ + + + + + + + +SpacImac Runner: TextureLoader Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
TextureLoader Class Reference
+
+
+ + + + + + +

+Static Public Member Functions

static GLuint LoadTexture (const char *FilePath)
 
static GLuint LoadCubeMap (std::vector< const char *> faces)
 
+

Member Function Documentation

+ +

◆ LoadCubeMap()

+ +
+
+ + + + + +
+ + + + + + + + +
static GLuint TextureLoader::LoadCubeMap (std::vector< const char *> faces)
+
+inlinestatic
+
+

Load Texture for the skybox param faces : vector which contains 6 filephaths for the 6 image of the skybox

+ +
+
+ +

◆ LoadTexture()

+ +
+
+ + + + + +
+ + + + + + + + +
static GLuint TextureLoader::LoadTexture (const char * FilePath)
+
+inlinestatic
+
+

Load Texture method param FilePath : contain filepath of the texture

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/class_trackball_camera-members.html b/doc/html/class_trackball_camera-members.html new file mode 100644 index 0000000..a27ace0 --- /dev/null +++ b/doc/html/class_trackball_camera-members.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
TrackballCamera Member List
+
+
+ +

This is the complete list of members for TrackballCamera, including all inherited members.

+ + + + + + + +
getViewMatrix() constTrackballCamerainlinevirtual
onKeyboardEvent(const SDL_Event &event)TrackballCamerainline
onMouseEvent(const SDL_Event &e)TrackballCamerainline
onMouseWheelEvent(const SDL_Event &e)TrackballCamerainline
TrackballCamera()TrackballCamerainline
TrackballCamera(const float fDistance, const float fAngleX, const float fAngleY)TrackballCamerainline
+
+ + + + diff --git a/doc/html/class_trackball_camera.html b/doc/html/class_trackball_camera.html new file mode 100644 index 0000000..cad114c --- /dev/null +++ b/doc/html/class_trackball_camera.html @@ -0,0 +1,148 @@ + + + + + + + +SpacImac Runner: TrackballCamera Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
TrackballCamera Class Reference
+
+
+ +

Class TrackballCamera derived from camera. + More...

+ +

#include <TrackballCamera.hpp>

+
+Inheritance diagram for TrackballCamera:
+
+
+ + +Camera + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

TrackballCamera ()
 Default constructor TrackballCameracamera.
 
TrackballCamera (const float fDistance, const float fAngleX, const float fAngleY)
 Constructor with parameters.
 
+void onKeyboardEvent (const SDL_Event &event)
 method which handle sdl keyboard event
 
+void onMouseWheelEvent (const SDL_Event &e)
 method which handle sdl mouse wheel event
 
+void onMouseEvent (const SDL_Event &e)
 method which handle sdl mouse position event
 
+glm::mat4 getViewMatrix () const
 Method wich return a view Matrix set up with camera parameters.
 
+

Detailed Description

+

Class TrackballCamera derived from camera.

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/class_trackball_camera.js b/doc/html/class_trackball_camera.js new file mode 100644 index 0000000..3b22128 --- /dev/null +++ b/doc/html/class_trackball_camera.js @@ -0,0 +1,9 @@ +var class_trackball_camera = +[ + [ "TrackballCamera", "class_trackball_camera.html#afea99c1d5361fe703637681af59b809d", null ], + [ "TrackballCamera", "class_trackball_camera.html#ae2b97339a12d299c25afd870d36aa9e9", null ], + [ "getViewMatrix", "class_trackball_camera.html#a6854938c871ebcf357ebea51c9410e4d", null ], + [ "onKeyboardEvent", "class_trackball_camera.html#af8b955f41853996645c9c68c409fa6e1", null ], + [ "onMouseEvent", "class_trackball_camera.html#ab2bcd71d702b7e835ac95fb134829a4b", null ], + [ "onMouseWheelEvent", "class_trackball_camera.html#a75d5c4d92f827f97ed296e437d262ac5", null ] +]; \ No newline at end of file diff --git a/doc/html/class_trackball_camera.png b/doc/html/class_trackball_camera.png new file mode 100644 index 0000000..3facde3 Binary files /dev/null and b/doc/html/class_trackball_camera.png differ diff --git a/doc/html/class_user-members.html b/doc/html/class_user-members.html new file mode 100644 index 0000000..4075b26 --- /dev/null +++ b/doc/html/class_user-members.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
User Member List
+
+
+ +

This is the complete list of members for User, including all inherited members.

+ + + + + + + +
getName() constUserinline
printPlayer() constUserinline
setName(std::string const &inName)Userinline
User() (defined in User)User
User(std::string &inName)User
~User()User
+
+ + + + diff --git a/doc/html/class_user.html b/doc/html/class_user.html new file mode 100644 index 0000000..999cbd1 --- /dev/null +++ b/doc/html/class_user.html @@ -0,0 +1,129 @@ + + + + + + + +SpacImac Runner: User Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
User Class Reference
+
+
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

User (std::string &inName)
 constructor of class User
 
+std::string getName () const
 method to retrieve the value of User's attributes
 
+void setName (std::string const &inName)
 method to set the value of User's name
 
+void printPlayer () const
 method to test the value of User's attributes
 
~User ()
 destructor of our Element
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_user.js b/doc/html/class_user.js new file mode 100644 index 0000000..04fac68 --- /dev/null +++ b/doc/html/class_user.js @@ -0,0 +1,9 @@ +var class_user = +[ + [ "User", "class_user.html#a4a0137053e591fbb79d9057dd7d2283d", null ], + [ "User", "class_user.html#a7561ff813cce8c5c23b02a50e6858c48", null ], + [ "~User", "class_user.html#ac00b72ad64eb4149f7b21b9f5468c2b2", null ], + [ "getName", "class_user.html#a446a64e63adafbc2e1428532275ad6a1", null ], + [ "printPlayer", "class_user.html#a61f163dbeb4209b48023d8ad4c7fe60b", null ], + [ "setName", "class_user.html#ab3e689190e12adcd8dfc04b489477503", null ] +]; \ No newline at end of file diff --git a/doc/html/class_wall-members.html b/doc/html/class_wall-members.html new file mode 100644 index 0000000..a617a47 --- /dev/null +++ b/doc/html/class_wall-members.html @@ -0,0 +1,121 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Wall Member List
+
+
+ +

This is the complete list of members for Wall, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
collide(Hero &hero)Wallvirtual
collision(Hero &hero)Elementinline
description()PrintableElementinline
Element()Element
Element(const glm::vec3 &position, const std::string &type)Element
getPosition() constPrintableElementinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
m_positionPrintableElementprotected
m_typePrintableElementprotected
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constWallvirtual
setPosition(glm::vec3 pos)PrintableElementinline
Wall()Wall
Wall(const glm::vec3 &position, const std::string &type="Wall")Wall
~Element()Element
~PrintableElement()PrintableElement
~Wall()Wall
+
+ + + + diff --git a/doc/html/class_wall.html b/doc/html/class_wall.html new file mode 100644 index 0000000..f155440 --- /dev/null +++ b/doc/html/class_wall.html @@ -0,0 +1,227 @@ + + + + + + + +SpacImac Runner: Wall Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Wall Class Reference
+
+
+
+Inheritance diagram for Wall:
+
+
+ + +Element +PrintableElement + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Wall ()
 constructor of class Wall
 
Wall (const glm::vec3 &position, const std::string &type="Wall")
 with parameters
 
~Wall ()
 default destructor of our Wall
 
+void printElement () const
 method to test the value of Wall's attributes
 
void collide (Hero &hero)
 
- Public Member Functions inherited from Element
 Element ()
 
 Element (const glm::vec3 &position, const std::string &type)
 
+void collision (Hero &hero)
 brief method to implement the polymorphism of the collide method for different inherited Element classes
 
~Element ()
 default destructor of our Element
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+

Member Function Documentation

+ +

◆ collide()

+ +
+
+ + + + + +
+ + + + + + + + +
void Wall::collide (Herohero)
+
+virtual
+
+

to check the specific behavior if the player collides with a Coin an Hero instance as parameter. the hero doesn't die if they touches a wall, it just prevents them from moving where the wall is.

+ +

Reimplemented from Element.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/class_wall.js b/doc/html/class_wall.js new file mode 100644 index 0000000..ecde411 --- /dev/null +++ b/doc/html/class_wall.js @@ -0,0 +1,8 @@ +var class_wall = +[ + [ "Wall", "class_wall.html#a12dc41bc7bc045c55ec1034a43e52043", null ], + [ "Wall", "class_wall.html#acc7359263516ec879eda54d995ff2495", null ], + [ "~Wall", "class_wall.html#a9a2992f2b533e1c160513d1e719f920c", null ], + [ "collide", "class_wall.html#a555ecdfdd8bffd5885fade247cfda47f", null ], + [ "printElement", "class_wall.html#a21098547a395a6292b9cbfc9e5e30f20", null ] +]; \ No newline at end of file diff --git a/doc/html/class_wall.png b/doc/html/class_wall.png new file mode 100644 index 0000000..224f0fa Binary files /dev/null and b/doc/html/class_wall.png differ diff --git a/doc/html/classconstructor.html b/doc/html/classconstructor.html new file mode 100644 index 0000000..ecb639c --- /dev/null +++ b/doc/html/classconstructor.html @@ -0,0 +1,110 @@ + + + + + + + +SpacImac Runner: constructor Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
constructor Class Reference
+
+
+ +

#include <Turn.hpp>

+

Detailed Description

+
Parameters
+ + +
positionof the Turn, and type (left or right)
+
+
+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c-members.html b/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c-members.html new file mode 100644 index 0000000..ffec874 --- /dev/null +++ b/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c-members.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
cpp_IMAC::ExceptIMAC Member List
+
+
+ +

This is the complete list of members for cpp_IMAC::ExceptIMAC, including all inherited members.

+ + + + +
ExceptIMAC(const std::string &description, const std::string &filename, const unsigned int line) (defined in cpp_IMAC::ExceptIMAC)cpp_IMAC::ExceptIMAC
what() const (defined in cpp_IMAC::ExceptIMAC)cpp_IMAC::ExceptIMACinline
~ExceptIMAC()=default (defined in cpp_IMAC::ExceptIMAC)cpp_IMAC::ExceptIMAC
+
+ + + + diff --git a/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c.html b/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c.html new file mode 100644 index 0000000..7454600 --- /dev/null +++ b/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c.html @@ -0,0 +1,122 @@ + + + + + + + +SpacImac Runner: cpp_IMAC::ExceptIMAC Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
cpp_IMAC::ExceptIMAC Class Reference
+
+
+
+Inheritance diagram for cpp_IMAC::ExceptIMAC:
+
+
+ + + +
+ + + + + + +

+Public Member Functions

ExceptIMAC (const std::string &description, const std::string &filename, const unsigned int line) throw ()
 
+const char * what () const throw ()
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c.js b/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c.js new file mode 100644 index 0000000..f906d77 --- /dev/null +++ b/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c.js @@ -0,0 +1,6 @@ +var classcpp___i_m_a_c_1_1_except_i_m_a_c = +[ + [ "ExceptIMAC", "classcpp___i_m_a_c_1_1_except_i_m_a_c.html#a91588157aad44bdbd0d4debb0d75ec98", null ], + [ "~ExceptIMAC", "classcpp___i_m_a_c_1_1_except_i_m_a_c.html#ace7ffc3e5cebbb34eaaa9112205e8407", null ], + [ "what", "classcpp___i_m_a_c_1_1_except_i_m_a_c.html#a9cbca1e9884ff3bfe42cdb05491333e6", null ] +]; \ No newline at end of file diff --git a/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c.png b/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c.png new file mode 100644 index 0000000..1b2e086 Binary files /dev/null and b/doc/html/classcpp___i_m_a_c_1_1_except_i_m_a_c.png differ diff --git a/doc/html/classes.html b/doc/html/classes.html new file mode 100644 index 0000000..0d79b5a --- /dev/null +++ b/doc/html/classes.html @@ -0,0 +1,141 @@ + + + + + + + +SpacImac Runner: Class Index + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
a | b | c | e | f | g | h | i | l | m | n | o | p | s | t | u | v | w
+ + + + + + + + + + + + + + + + + + + + + + + +
  a  
+
EyeCamera   ImageManager (glimac)   Object (glimac)   stbi_io_callbacks   
  f  
+
  l  
+
Obstacle   
  t  
+
AppManager   
  p  
+
  b  
+
FilePath (glimac)   Landmark (glimac)   TextureLoader   
Floor   LightShader   PerspectiveShader   TrackballCamera   
BBox3f (glimac)   floor   
  m  
+
PPM (motor_game)   Turn (motor_game)   
  c  
+
Font   PPMreader (motor_game)   
  u  
+
FreelyCamera (glimac)   Map (motor_game)   PrintableElement   
Camera   
  g  
+
Geometry::Material (glimac)   Program (glimac)   User   
Character   material_t (tinyobj)   
  s  
+
  v  
+
Coin   Gap (motor_game)   MaterialFileReader (tinyobj)   
Cone (glimac)   Geometry (glimac)   MaterialReader (tinyobj)   Scene   Geometry::Vertex (glimac)   
constructor   Grid (glimac)   Menu   Scores (motor_game)   vertex_index (tinyobj)   
Cube (glimac)   
  h  
+
Geometry::Mesh (glimac)   SDLWindowManager (glimac)   
  w  
+
  e  
+
mesh_t (tinyobj)   Shader (glimac)   
hash< glimac::FilePath > (std)   
  n  
+
ShaderL   Wall   
Element   Hero   shape_t (tinyobj)   
End (motor_game)   
  i  
+
negative_vector   ShapeVertex (glimac)   
Enemy   
  o  
+
Skybox   
ExceptIMAC (cpp_IMAC)   Image (glimac)   Sphere (glimac)   
obj_shape (tinyobj)   
+
a | b | c | e | f | g | h | i | l | m | n | o | p | s | t | u | v | w
+
+
+ + + + diff --git a/doc/html/classfloor.html b/doc/html/classfloor.html new file mode 100644 index 0000000..fa748c2 --- /dev/null +++ b/doc/html/classfloor.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: floor Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
floor Class Reference
+
+
+ +

the player can turn + More...

+

Detailed Description

+

the player can turn

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_cone-members.html b/doc/html/classglimac_1_1_cone-members.html new file mode 100644 index 0000000..1172986 --- /dev/null +++ b/doc/html/classglimac_1_1_cone-members.html @@ -0,0 +1,111 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::Cone Member List
+
+
+ +

This is the complete list of members for glimac::Cone, including all inherited members.

+ + + + + + + + + + + + +
Cone(GLfloat height=1, GLfloat radius=1, GLsizei discLat=100, GLsizei discHeight=100) (defined in glimac::Cone)glimac::Coneinline
description() (defined in glimac::Cone)glimac::Coneinline
draw() (defined in glimac::Cone)glimac::Conevirtual
getDataPointer() const (defined in glimac::Cone)glimac::Coneinline
getVao() const (defined in glimac::Cone)glimac::Coneinline
getVertexCount() const (defined in glimac::Cone)glimac::Coneinline
Object() (defined in glimac::Object)glimac::Objectinline
vaoManager(GLuint &vao, GLuint &vbo) (defined in glimac::Cone)glimac::Conevirtual
vboManager(GLuint &vbo) (defined in glimac::Cone)glimac::Conevirtual
x (defined in glimac::Object)glimac::Object
y (defined in glimac::Object)glimac::Object
+
+ + + + diff --git a/doc/html/classglimac_1_1_cone.html b/doc/html/classglimac_1_1_cone.html new file mode 100644 index 0000000..5468641 --- /dev/null +++ b/doc/html/classglimac_1_1_cone.html @@ -0,0 +1,162 @@ + + + + + + + +SpacImac Runner: glimac::Cone Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::Cone Class Reference
+
+
+
+Inheritance diagram for glimac::Cone:
+
+
+ + +glimac::Object + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Cone (GLfloat height=1, GLfloat radius=1, GLsizei discLat=100, GLsizei discHeight=100)
 
+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+void vboManager (GLuint &vbo)
 
+void vaoManager (GLuint &vao, GLuint &vbo)
 
+GLuint getVao () const
 
+void draw ()
 
+void description ()
 
- Public Member Functions inherited from glimac::Object
+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+GLuint getVao () const
 
+ + + + + + +

+Additional Inherited Members

- Public Attributes inherited from glimac::Object
+int x = 0
 
+int y = 0
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_cone.js b/doc/html/classglimac_1_1_cone.js new file mode 100644 index 0000000..c5b2988 --- /dev/null +++ b/doc/html/classglimac_1_1_cone.js @@ -0,0 +1,11 @@ +var classglimac_1_1_cone = +[ + [ "Cone", "classglimac_1_1_cone.html#a082cb9d04316af5139d55af311d08daf", null ], + [ "description", "classglimac_1_1_cone.html#a85d985d8740f9b35df63c26870cd4b05", null ], + [ "draw", "classglimac_1_1_cone.html#af756c6b472054e599d98382c0ffa84a1", null ], + [ "getDataPointer", "classglimac_1_1_cone.html#a937d01989c21e55c5df5c298beab1285", null ], + [ "getVao", "classglimac_1_1_cone.html#a9f74680aa1ac4e783868afeb5cfe8fa4", null ], + [ "getVertexCount", "classglimac_1_1_cone.html#a7185ac37a58d1f4e176422c214cdcce5", null ], + [ "vaoManager", "classglimac_1_1_cone.html#ab8bc16d723e8e30b8e9d0d298713db8f", null ], + [ "vboManager", "classglimac_1_1_cone.html#a364325760cdeeb6e57b8871c56b0fb79", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_cone.png b/doc/html/classglimac_1_1_cone.png new file mode 100644 index 0000000..7ab847b Binary files /dev/null and b/doc/html/classglimac_1_1_cone.png differ diff --git a/doc/html/classglimac_1_1_cube-members.html b/doc/html/classglimac_1_1_cube-members.html new file mode 100644 index 0000000..37c9c23 --- /dev/null +++ b/doc/html/classglimac_1_1_cube-members.html @@ -0,0 +1,111 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::Cube Member List
+
+
+ +

This is the complete list of members for glimac::Cube, including all inherited members.

+ + + + + + + + + + + + +
Cube() (defined in glimac::Cube)glimac::Cubeinline
description() (defined in glimac::Cube)glimac::Cubeinline
draw() (defined in glimac::Cube)glimac::Cubevirtual
getDataPointer() const (defined in glimac::Cube)glimac::Cubeinline
getVao() const (defined in glimac::Cube)glimac::Cubeinline
getVertexCount() const (defined in glimac::Cube)glimac::Cubeinline
Object() (defined in glimac::Object)glimac::Objectinline
vaoManager(GLuint &vao, GLuint &vbo) (defined in glimac::Cube)glimac::Cubevirtual
vboManager(GLuint &vbo) (defined in glimac::Cube)glimac::Cubevirtual
x (defined in glimac::Object)glimac::Object
y (defined in glimac::Object)glimac::Object
+
+ + + + diff --git a/doc/html/classglimac_1_1_cube.html b/doc/html/classglimac_1_1_cube.html new file mode 100644 index 0000000..2cb7a2b --- /dev/null +++ b/doc/html/classglimac_1_1_cube.html @@ -0,0 +1,159 @@ + + + + + + + +SpacImac Runner: glimac::Cube Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::Cube Class Reference
+
+
+
+Inheritance diagram for glimac::Cube:
+
+
+ + +glimac::Object + +
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+void vboManager (GLuint &vbo)
 
+void vaoManager (GLuint &vao, GLuint &vbo)
 
+GLuint getVao () const
 
+void draw ()
 
+void description ()
 
- Public Member Functions inherited from glimac::Object
+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+GLuint getVao () const
 
+ + + + + + +

+Additional Inherited Members

- Public Attributes inherited from glimac::Object
+int x = 0
 
+int y = 0
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_cube.js b/doc/html/classglimac_1_1_cube.js new file mode 100644 index 0000000..9831e56 --- /dev/null +++ b/doc/html/classglimac_1_1_cube.js @@ -0,0 +1,11 @@ +var classglimac_1_1_cube = +[ + [ "Cube", "classglimac_1_1_cube.html#a801f14f22e31defc97297ee0f3409856", null ], + [ "description", "classglimac_1_1_cube.html#a7162049f0ee25841cb35bd3f3a3942ac", null ], + [ "draw", "classglimac_1_1_cube.html#a32ce3ba031abdb1cf5f2d88b27a99e98", null ], + [ "getDataPointer", "classglimac_1_1_cube.html#a4d752086ac759a2e7e4fc59aed0c2ed3", null ], + [ "getVao", "classglimac_1_1_cube.html#a97fad14f73b392e326a8547a9f4a3e4a", null ], + [ "getVertexCount", "classglimac_1_1_cube.html#a579f0c59b840981a71c3fb068d290bfc", null ], + [ "vaoManager", "classglimac_1_1_cube.html#a994689188d0a51ca59639f41e0813c6d", null ], + [ "vboManager", "classglimac_1_1_cube.html#a8e4825a8eada6c572817f6a2c2ab88c7", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_cube.png b/doc/html/classglimac_1_1_cube.png new file mode 100644 index 0000000..1055e94 Binary files /dev/null and b/doc/html/classglimac_1_1_cube.png differ diff --git a/doc/html/classglimac_1_1_file_path-members.html b/doc/html/classglimac_1_1_file_path-members.html new file mode 100644 index 0000000..ce932c2 --- /dev/null +++ b/doc/html/classglimac_1_1_file_path-members.html @@ -0,0 +1,117 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::FilePath Member List
+
+
+ +

This is the complete list of members for glimac::FilePath, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
addExt(const std::string &ext="") constglimac::FilePathinline
c_str() const (defined in glimac::FilePath)glimac::FilePathinline
dirPath() constglimac::FilePathinline
empty() const (defined in glimac::FilePath)glimac::FilePathinline
ext() constglimac::FilePathinline
file() constglimac::FilePathinline
FilePath()=default (defined in glimac::FilePath)glimac::FilePath
FilePath(const char *filepath) (defined in glimac::FilePath)glimac::FilePathinline
FilePath(const std::string &filepath) (defined in glimac::FilePath)glimac::FilePathinline
hasExt(const std::string &ext) const (defined in glimac::FilePath)glimac::FilePathinline
operator std::string() const (defined in glimac::FilePath)glimac::FilePathinline
operator!=(const FilePath &other) const (defined in glimac::FilePath)glimac::FilePathinline
operator+(const FilePath &other) constglimac::FilePathinline
operator<<(std::ostream &cout, const FilePath &filepath)glimac::FilePathfriend
operator==(const FilePath &other) const (defined in glimac::FilePath)glimac::FilePathinline
PATH_SEPARATOR (defined in glimac::FilePath)glimac::FilePathstatic
str() const (defined in glimac::FilePath)glimac::FilePathinline
+
+ + + + diff --git a/doc/html/classglimac_1_1_file_path.html b/doc/html/classglimac_1_1_file_path.html new file mode 100644 index 0000000..a0190b9 --- /dev/null +++ b/doc/html/classglimac_1_1_file_path.html @@ -0,0 +1,329 @@ + + + + + + + +SpacImac Runner: glimac::FilePath Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::FilePath Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

FilePath (const char *filepath)
 
FilePath (const std::string &filepath)
 
operator std::string () const
 
+const std::string & str () const
 
+const char * c_str () const
 
+bool empty () const
 
FilePath dirPath () const
 
std::string file () const
 
std::string ext () const
 
+bool hasExt (const std::string &ext) const
 
FilePath addExt (const std::string &ext="") const
 
FilePath operator+ (const FilePath &other) const
 
+bool operator== (const FilePath &other) const
 
+bool operator!= (const FilePath &other) const
 
+ + + +

+Static Public Attributes

+static const char PATH_SEPARATOR = '/'
 
+ + + +

+Friends

std::ostream & operator<< (std::ostream &cout, const FilePath &filepath)
 
+

Member Function Documentation

+ +

◆ addExt()

+ +
+
+ + + + + +
+ + + + + + + + +
FilePath glimac::FilePath::addExt (const std::string & ext = "") const
+
+inline
+
+

adds file extension

+ +
+
+ +

◆ dirPath()

+ +
+
+ + + + + +
+ + + + + + + +
FilePath glimac::FilePath::dirPath () const
+
+inline
+
+

returns the path of a filepath

+ +
+
+ +

◆ ext()

+ +
+
+ + + + + +
+ + + + + + + +
std::string glimac::FilePath::ext () const
+
+inline
+
+

returns the file extension

+ +
+
+ +

◆ file()

+ +
+
+ + + + + +
+ + + + + + + +
std::string glimac::FilePath::file () const
+
+inline
+
+

returns the file of a filepath

+ +
+
+ +

◆ operator+()

+ +
+
+ + + + + +
+ + + + + + + + +
FilePath glimac::FilePath::operator+ (const FilePathother) const
+
+inline
+
+

concatenates two filepaths to this/other

+ +
+
+

Friends And Related Function Documentation

+ +

◆ operator<<

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& operator<< (std::ostream & cout,
const FilePathfilepath 
)
+
+friend
+
+

output operator

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_file_path.js b/doc/html/classglimac_1_1_file_path.js new file mode 100644 index 0000000..7d9b90f --- /dev/null +++ b/doc/html/classglimac_1_1_file_path.js @@ -0,0 +1,19 @@ +var classglimac_1_1_file_path = +[ + [ "FilePath", "classglimac_1_1_file_path.html#a1e7e80bf7ccc6b099efd6fa049374150", null ], + [ "FilePath", "classglimac_1_1_file_path.html#aa049e2800413955e3e02c8ebae66be9f", null ], + [ "FilePath", "classglimac_1_1_file_path.html#a7add76a049f3232827af4393c734a3ad", null ], + [ "addExt", "classglimac_1_1_file_path.html#a4167275bb9a0239906a089a0c682ff37", null ], + [ "c_str", "classglimac_1_1_file_path.html#ab2a882fca87897e8eb96ff6fb3b9f3dd", null ], + [ "dirPath", "classglimac_1_1_file_path.html#a75d8d5573b69d79dd745513ddd4b158f", null ], + [ "empty", "classglimac_1_1_file_path.html#a660dea9e8324aac4962bca25b963ef77", null ], + [ "ext", "classglimac_1_1_file_path.html#ac36e170d0864ed2c5f1296dac2104b15", null ], + [ "file", "classglimac_1_1_file_path.html#af62ce630c3e3a5e106556cdf17773f3a", null ], + [ "hasExt", "classglimac_1_1_file_path.html#a2734fcfcdb943df0c3e8b5b0e8285301", null ], + [ "operator std::string", "classglimac_1_1_file_path.html#adef5c3ff1a59b5ce13b51d2cc6370fd9", null ], + [ "operator!=", "classglimac_1_1_file_path.html#aa1806dd19789add295b934e4ab52b296", null ], + [ "operator+", "classglimac_1_1_file_path.html#a8113825c73d8a8f1f1cf3ca57de6bad8", null ], + [ "operator==", "classglimac_1_1_file_path.html#a1d7c3a1f124fe5e637d7584a46ceef91", null ], + [ "str", "classglimac_1_1_file_path.html#a620578376a3387535f94ad16ab4839dd", null ], + [ "operator<<", "classglimac_1_1_file_path.html#a924c4e68c4618cf40156646d23ec5f1c", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_freely_camera-members.html b/doc/html/classglimac_1_1_freely_camera-members.html new file mode 100644 index 0000000..f5961a2 --- /dev/null +++ b/doc/html/classglimac_1_1_freely_camera-members.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::FreelyCamera Member List
+
+
+ +

This is the complete list of members for glimac::FreelyCamera, including all inherited members.

+ + + +
FreelyCamera() (defined in glimac::FreelyCamera)glimac::FreelyCamerainline
FreelyCamera(glm::vec3 _Position) (defined in glimac::FreelyCamera)glimac::FreelyCamera
+
+ + + + diff --git a/doc/html/classglimac_1_1_freely_camera.html b/doc/html/classglimac_1_1_freely_camera.html new file mode 100644 index 0000000..636e6b2 --- /dev/null +++ b/doc/html/classglimac_1_1_freely_camera.html @@ -0,0 +1,111 @@ + + + + + + + +SpacImac Runner: glimac::FreelyCamera Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::FreelyCamera Class Reference
+
+
+ + + + +

+Public Member Functions

FreelyCamera (glm::vec3 _Position)
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_freely_camera.js b/doc/html/classglimac_1_1_freely_camera.js new file mode 100644 index 0000000..2ffe719 --- /dev/null +++ b/doc/html/classglimac_1_1_freely_camera.js @@ -0,0 +1,5 @@ +var classglimac_1_1_freely_camera = +[ + [ "FreelyCamera", "classglimac_1_1_freely_camera.html#a819124237dba2f9ce90ef6de51242458", null ], + [ "FreelyCamera", "classglimac_1_1_freely_camera.html#aaa719c21398e550dd6d188fb3841607c", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_geometry-members.html b/doc/html/classglimac_1_1_geometry-members.html new file mode 100644 index 0000000..80377ad --- /dev/null +++ b/doc/html/classglimac_1_1_geometry-members.html @@ -0,0 +1,108 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::Geometry Member List
+
+
+ +

This is the complete list of members for glimac::Geometry, including all inherited members.

+ + + + + + + + + +
getBoundingBox() const (defined in glimac::Geometry)glimac::Geometryinline
getIndexBuffer() const (defined in glimac::Geometry)glimac::Geometryinline
getIndexCount() const (defined in glimac::Geometry)glimac::Geometryinline
getMeshBuffer() const (defined in glimac::Geometry)glimac::Geometryinline
getMeshCount() const (defined in glimac::Geometry)glimac::Geometryinline
getVertexBuffer() const (defined in glimac::Geometry)glimac::Geometryinline
getVertexCount() const (defined in glimac::Geometry)glimac::Geometryinline
loadOBJ(const FilePath &filepath, const FilePath &mtlBasePath, bool loadTextures=true) (defined in glimac::Geometry)glimac::Geometry
+
+ + + + diff --git a/doc/html/classglimac_1_1_geometry.html b/doc/html/classglimac_1_1_geometry.html new file mode 100644 index 0000000..4464cf3 --- /dev/null +++ b/doc/html/classglimac_1_1_geometry.html @@ -0,0 +1,143 @@ + + + + + + + +SpacImac Runner: glimac::Geometry Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::Geometry Class Reference
+
+
+ + + + + + + + +

+Classes

struct  Material
 
struct  Mesh
 
struct  Vertex
 
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

+const VertexgetVertexBuffer () const
 
+size_t getVertexCount () const
 
+const unsigned int * getIndexBuffer () const
 
+size_t getIndexCount () const
 
+const MeshgetMeshBuffer () const
 
+size_t getMeshCount () const
 
+bool loadOBJ (const FilePath &filepath, const FilePath &mtlBasePath, bool loadTextures=true)
 
+const BBox3fgetBoundingBox () const
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_geometry.js b/doc/html/classglimac_1_1_geometry.js new file mode 100644 index 0000000..dc338b9 --- /dev/null +++ b/doc/html/classglimac_1_1_geometry.js @@ -0,0 +1,14 @@ +var classglimac_1_1_geometry = +[ + [ "Material", "structglimac_1_1_geometry_1_1_material.html", "structglimac_1_1_geometry_1_1_material" ], + [ "Mesh", "structglimac_1_1_geometry_1_1_mesh.html", "structglimac_1_1_geometry_1_1_mesh" ], + [ "Vertex", "structglimac_1_1_geometry_1_1_vertex.html", "structglimac_1_1_geometry_1_1_vertex" ], + [ "getBoundingBox", "classglimac_1_1_geometry.html#aa91aac0c120e51e59e192a518e790311", null ], + [ "getIndexBuffer", "classglimac_1_1_geometry.html#a26b9a7ccfd6a574284fb054821ed6bbd", null ], + [ "getIndexCount", "classglimac_1_1_geometry.html#aaadc2607a96a09f9fdc36190809e915b", null ], + [ "getMeshBuffer", "classglimac_1_1_geometry.html#ae86a5f63f1e2770ddc110412761aa98a", null ], + [ "getMeshCount", "classglimac_1_1_geometry.html#ab57f1169fb19e5a02866d2f36308dd91", null ], + [ "getVertexBuffer", "classglimac_1_1_geometry.html#add889566d1d4d2fea740d84cf5e3c18f", null ], + [ "getVertexCount", "classglimac_1_1_geometry.html#adf2d769d9b6195c2ab88f6dfe6abd8d9", null ], + [ "loadOBJ", "classglimac_1_1_geometry.html#af796a2bd4c60c32de47b3bcb53bb3cef", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_grid-members.html b/doc/html/classglimac_1_1_grid-members.html new file mode 100644 index 0000000..8e5ab13 --- /dev/null +++ b/doc/html/classglimac_1_1_grid-members.html @@ -0,0 +1,111 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::Grid Member List
+
+
+ +

This is the complete list of members for glimac::Grid, including all inherited members.

+ + + + + + + + + + + + +
description() (defined in glimac::Grid)glimac::Gridinline
draw() (defined in glimac::Grid)glimac::Gridvirtual
getDataPointer() const (defined in glimac::Grid)glimac::Gridinline
getVao() const (defined in glimac::Grid)glimac::Gridinline
getVertexCount() const (defined in glimac::Grid)glimac::Gridinline
Grid() (defined in glimac::Grid)glimac::Gridinline
Object() (defined in glimac::Object)glimac::Objectinline
vaoManager(GLuint &vao, GLuint &vbo) (defined in glimac::Grid)glimac::Gridvirtual
vboManager(GLuint &vbo) (defined in glimac::Grid)glimac::Gridvirtual
x (defined in glimac::Object)glimac::Object
y (defined in glimac::Object)glimac::Object
+
+ + + + diff --git a/doc/html/classglimac_1_1_grid.html b/doc/html/classglimac_1_1_grid.html new file mode 100644 index 0000000..630f182 --- /dev/null +++ b/doc/html/classglimac_1_1_grid.html @@ -0,0 +1,159 @@ + + + + + + + +SpacImac Runner: glimac::Grid Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::Grid Class Reference
+
+
+
+Inheritance diagram for glimac::Grid:
+
+
+ + +glimac::Object + +
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+void vboManager (GLuint &vbo)
 
+void vaoManager (GLuint &vao, GLuint &vbo)
 
+GLuint getVao () const
 
+void draw ()
 
+void description ()
 
- Public Member Functions inherited from glimac::Object
+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+GLuint getVao () const
 
+ + + + + + +

+Additional Inherited Members

- Public Attributes inherited from glimac::Object
+int x = 0
 
+int y = 0
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_grid.js b/doc/html/classglimac_1_1_grid.js new file mode 100644 index 0000000..7bd89b7 --- /dev/null +++ b/doc/html/classglimac_1_1_grid.js @@ -0,0 +1,11 @@ +var classglimac_1_1_grid = +[ + [ "Grid", "classglimac_1_1_grid.html#acbf54ede9ed146598fc287328ec85106", null ], + [ "description", "classglimac_1_1_grid.html#a3430fb4a06f3f19ecb9b16a79bbe00fb", null ], + [ "draw", "classglimac_1_1_grid.html#a22ca0e188c28a42386911e89f6492184", null ], + [ "getDataPointer", "classglimac_1_1_grid.html#afab61b2f12ab8f9d80a70fb3797e13b7", null ], + [ "getVao", "classglimac_1_1_grid.html#ab2de7eb024bb77bc27a3bc979a856ab5", null ], + [ "getVertexCount", "classglimac_1_1_grid.html#afc2798f2325c82ee828197024b53b4c2", null ], + [ "vaoManager", "classglimac_1_1_grid.html#a04fbced15c3ed86ab0d58e624c020112", null ], + [ "vboManager", "classglimac_1_1_grid.html#a76b8cf7ca4a828520386ec50f44f111f", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_grid.png b/doc/html/classglimac_1_1_grid.png new file mode 100644 index 0000000..c55f9bd Binary files /dev/null and b/doc/html/classglimac_1_1_grid.png differ diff --git a/doc/html/classglimac_1_1_image-members.html b/doc/html/classglimac_1_1_image-members.html new file mode 100644 index 0000000..0df48db --- /dev/null +++ b/doc/html/classglimac_1_1_image-members.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::Image Member List
+
+
+ +

This is the complete list of members for glimac::Image, including all inherited members.

+ + + + + + +
getHeight() const (defined in glimac::Image)glimac::Imageinline
getPixels() const (defined in glimac::Image)glimac::Imageinline
getPixels() (defined in glimac::Image)glimac::Imageinline
getWidth() const (defined in glimac::Image)glimac::Imageinline
Image(unsigned int width, unsigned int height) (defined in glimac::Image)glimac::Imageinline
+
+ + + + diff --git a/doc/html/classglimac_1_1_image.html b/doc/html/classglimac_1_1_image.html new file mode 100644 index 0000000..e020a68 --- /dev/null +++ b/doc/html/classglimac_1_1_image.html @@ -0,0 +1,123 @@ + + + + + + + +SpacImac Runner: glimac::Image Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::Image Class Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

Image (unsigned int width, unsigned int height)
 
+unsigned int getWidth () const
 
+unsigned int getHeight () const
 
+const glm::vec4 * getPixels () const
 
+glm::vec4 * getPixels ()
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_image.js b/doc/html/classglimac_1_1_image.js new file mode 100644 index 0000000..fa842ec --- /dev/null +++ b/doc/html/classglimac_1_1_image.js @@ -0,0 +1,8 @@ +var classglimac_1_1_image = +[ + [ "Image", "classglimac_1_1_image.html#a8d0769d9756924f57b740e48e9fb09f6", null ], + [ "getHeight", "classglimac_1_1_image.html#a0a2afce624e3df2b12d7d76ba0d31c42", null ], + [ "getPixels", "classglimac_1_1_image.html#af2cdd4b884831808f5ecba70209c2f95", null ], + [ "getPixels", "classglimac_1_1_image.html#a679f8ae515ad9607faa762e1e2105285", null ], + [ "getWidth", "classglimac_1_1_image.html#a23bc966575ee67b85fc575631b035026", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_image_manager-members.html b/doc/html/classglimac_1_1_image_manager-members.html new file mode 100644 index 0000000..e4a1443 --- /dev/null +++ b/doc/html/classglimac_1_1_image_manager-members.html @@ -0,0 +1,101 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::ImageManager Member List
+
+
+ +

This is the complete list of members for glimac::ImageManager, including all inherited members.

+ + +
loadImage(const FilePath &filepath) (defined in glimac::ImageManager)glimac::ImageManagerstatic
+
+ + + + diff --git a/doc/html/classglimac_1_1_image_manager.html b/doc/html/classglimac_1_1_image_manager.html new file mode 100644 index 0000000..63bc506 --- /dev/null +++ b/doc/html/classglimac_1_1_image_manager.html @@ -0,0 +1,112 @@ + + + + + + + +SpacImac Runner: glimac::ImageManager Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::ImageManager Class Reference
+
+
+ + + + +

+Static Public Member Functions

+static const ImageloadImage (const FilePath &filepath)
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_landmark-members.html b/doc/html/classglimac_1_1_landmark-members.html new file mode 100644 index 0000000..6ca4dfa --- /dev/null +++ b/doc/html/classglimac_1_1_landmark-members.html @@ -0,0 +1,111 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::Landmark Member List
+
+
+ +

This is the complete list of members for glimac::Landmark, including all inherited members.

+ + + + + + + + + + + + +
description() (defined in glimac::Landmark)glimac::Landmarkinline
draw() (defined in glimac::Landmark)glimac::Landmarkvirtual
getDataPointer() const (defined in glimac::Landmark)glimac::Landmarkinline
getVao() const (defined in glimac::Landmark)glimac::Landmarkinline
getVertexCount() const (defined in glimac::Landmark)glimac::Landmarkinline
Landmark() (defined in glimac::Landmark)glimac::Landmarkinline
Object() (defined in glimac::Object)glimac::Objectinline
vaoManager(GLuint &vao, GLuint &vbo) (defined in glimac::Landmark)glimac::Landmarkvirtual
vboManager(GLuint &vbo) (defined in glimac::Landmark)glimac::Landmarkvirtual
x (defined in glimac::Object)glimac::Object
y (defined in glimac::Object)glimac::Object
+
+ + + + diff --git a/doc/html/classglimac_1_1_landmark.html b/doc/html/classglimac_1_1_landmark.html new file mode 100644 index 0000000..ce20ac8 --- /dev/null +++ b/doc/html/classglimac_1_1_landmark.html @@ -0,0 +1,159 @@ + + + + + + + +SpacImac Runner: glimac::Landmark Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::Landmark Class Reference
+
+
+
+Inheritance diagram for glimac::Landmark:
+
+
+ + +glimac::Object + +
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+void vboManager (GLuint &vbo)
 
+void vaoManager (GLuint &vao, GLuint &vbo)
 
+GLuint getVao () const
 
+void draw ()
 
+void description ()
 
- Public Member Functions inherited from glimac::Object
+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+GLuint getVao () const
 
+ + + + + + +

+Additional Inherited Members

- Public Attributes inherited from glimac::Object
+int x = 0
 
+int y = 0
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_landmark.js b/doc/html/classglimac_1_1_landmark.js new file mode 100644 index 0000000..a8243d0 --- /dev/null +++ b/doc/html/classglimac_1_1_landmark.js @@ -0,0 +1,11 @@ +var classglimac_1_1_landmark = +[ + [ "Landmark", "classglimac_1_1_landmark.html#a1ba9d6056ced5069f6a9970fc2cae1d5", null ], + [ "description", "classglimac_1_1_landmark.html#ab9dd74b7f73420e16836c8cc80b0f3ea", null ], + [ "draw", "classglimac_1_1_landmark.html#ab59376f3997d6c6449633fdf1d1661e3", null ], + [ "getDataPointer", "classglimac_1_1_landmark.html#a8ce6ef28819e326dc34b11488dbc0ac1", null ], + [ "getVao", "classglimac_1_1_landmark.html#adb8a511e74c7e3c6e940f23f7daa1c0b", null ], + [ "getVertexCount", "classglimac_1_1_landmark.html#aeda391638415b0b58626a1b657dbcf01", null ], + [ "vaoManager", "classglimac_1_1_landmark.html#a7aee4cac3b5e5c5686c83ac5028648a9", null ], + [ "vboManager", "classglimac_1_1_landmark.html#a261063ec6405fff5f13847c51710ff11", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_landmark.png b/doc/html/classglimac_1_1_landmark.png new file mode 100644 index 0000000..d842f55 Binary files /dev/null and b/doc/html/classglimac_1_1_landmark.png differ diff --git a/doc/html/classglimac_1_1_object-members.html b/doc/html/classglimac_1_1_object-members.html new file mode 100644 index 0000000..7e8498f --- /dev/null +++ b/doc/html/classglimac_1_1_object-members.html @@ -0,0 +1,109 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::Object Member List
+
+
+ +

This is the complete list of members for glimac::Object, including all inherited members.

+ + + + + + + + + + +
draw() (defined in glimac::Object)glimac::Objectinlinevirtual
getDataPointer() const (defined in glimac::Object)glimac::Objectinline
getVao() const (defined in glimac::Object)glimac::Objectinline
getVertexCount() const (defined in glimac::Object)glimac::Objectinline
Object() (defined in glimac::Object)glimac::Objectinline
vaoManager(GLuint &vao, GLuint &vbo) (defined in glimac::Object)glimac::Objectvirtual
vboManager(GLuint &vbo) (defined in glimac::Object)glimac::Objectvirtual
x (defined in glimac::Object)glimac::Object
y (defined in glimac::Object)glimac::Object
+
+ + + + diff --git a/doc/html/classglimac_1_1_object.html b/doc/html/classglimac_1_1_object.html new file mode 100644 index 0000000..388ab08 --- /dev/null +++ b/doc/html/classglimac_1_1_object.html @@ -0,0 +1,150 @@ + + + + + + + +SpacImac Runner: glimac::Object Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::Object Class Reference
+
+
+
+Inheritance diagram for glimac::Object:
+
+
+ + +glimac::Cone +glimac::Cube +glimac::Grid +glimac::Landmark +glimac::Sphere + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+virtual void vboManager (GLuint &vbo)
 
+virtual void vaoManager (GLuint &vao, GLuint &vbo)
 
+GLuint getVao () const
 
+virtual void draw ()
 
+ + + + + +

+Public Attributes

+int x = 0
 
+int y = 0
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_object.js b/doc/html/classglimac_1_1_object.js new file mode 100644 index 0000000..77f10e2 --- /dev/null +++ b/doc/html/classglimac_1_1_object.js @@ -0,0 +1,12 @@ +var classglimac_1_1_object = +[ + [ "Object", "classglimac_1_1_object.html#a8ef7b399baff81a86ac11217e77ff77a", null ], + [ "draw", "classglimac_1_1_object.html#a37db26bb10d4281406ecd565c5f4c9d8", null ], + [ "getDataPointer", "classglimac_1_1_object.html#a17f94d918470287d55859cc20a8b95f4", null ], + [ "getVao", "classglimac_1_1_object.html#a0db067f7009901a1dbf91cdfa74523c6", null ], + [ "getVertexCount", "classglimac_1_1_object.html#a8a13f3e31dcb85bd2b07723dd8b23593", null ], + [ "vaoManager", "classglimac_1_1_object.html#a478c03e522a8202f08353202e2f541f5", null ], + [ "vboManager", "classglimac_1_1_object.html#ab0ef504ded6c4edc32719d25ba276200", null ], + [ "x", "classglimac_1_1_object.html#a2dd442a856b67b0663e257ba07765b19", null ], + [ "y", "classglimac_1_1_object.html#a60f9d83b7130e2f1e5ee56db65ba4ddc", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_object.png b/doc/html/classglimac_1_1_object.png new file mode 100644 index 0000000..cddc1d1 Binary files /dev/null and b/doc/html/classglimac_1_1_object.png differ diff --git a/doc/html/classglimac_1_1_program-members.html b/doc/html/classglimac_1_1_program-members.html new file mode 100644 index 0000000..2602250 --- /dev/null +++ b/doc/html/classglimac_1_1_program-members.html @@ -0,0 +1,109 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::Program Member List
+
+
+ +

This is the complete list of members for glimac::Program, including all inherited members.

+ + + + + + + + + + +
attachShader(const Shader &shader) (defined in glimac::Program)glimac::Programinline
getGLId() const (defined in glimac::Program)glimac::Programinline
getInfoLog() const (defined in glimac::Program)glimac::Program
link() (defined in glimac::Program)glimac::Program
operator=(Program &&rvalue) (defined in glimac::Program)glimac::Programinline
Program() (defined in glimac::Program)glimac::Programinline
Program(Program &&rvalue) (defined in glimac::Program)glimac::Programinline
use() const (defined in glimac::Program)glimac::Programinline
~Program() (defined in glimac::Program)glimac::Programinline
+
+ + + + diff --git a/doc/html/classglimac_1_1_program.html b/doc/html/classglimac_1_1_program.html new file mode 100644 index 0000000..d912831 --- /dev/null +++ b/doc/html/classglimac_1_1_program.html @@ -0,0 +1,130 @@ + + + + + + + +SpacImac Runner: glimac::Program Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::Program Class Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

Program (Program &&rvalue)
 
+Programoperator= (Program &&rvalue)
 
+GLuint getGLId () const
 
+void attachShader (const Shader &shader)
 
+bool link ()
 
+const std::string getInfoLog () const
 
+void use () const
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_program.js b/doc/html/classglimac_1_1_program.js new file mode 100644 index 0000000..73d14f5 --- /dev/null +++ b/doc/html/classglimac_1_1_program.js @@ -0,0 +1,12 @@ +var classglimac_1_1_program = +[ + [ "Program", "classglimac_1_1_program.html#ae364a0bdec2fee9c5d8a6bb617d1a4f4", null ], + [ "~Program", "classglimac_1_1_program.html#ad1b5de1578ad33a3b8ea127ca9f16b68", null ], + [ "Program", "classglimac_1_1_program.html#aad59ed1f53824eda09b95fd1acdce674", null ], + [ "attachShader", "classglimac_1_1_program.html#a5aac165d28cd6f704c01a3e0eee2119d", null ], + [ "getGLId", "classglimac_1_1_program.html#ab1a519d005c77ba44876d1f309b38d18", null ], + [ "getInfoLog", "classglimac_1_1_program.html#aaf1769457ca41bca4afad7ecf90e9c3f", null ], + [ "link", "classglimac_1_1_program.html#a2f32f4f66ff9742750418f6fda054931", null ], + [ "operator=", "classglimac_1_1_program.html#a3ee1eac00a2e3fa4b6bab51d4333f33c", null ], + [ "use", "classglimac_1_1_program.html#a825cb4d58cccdf849730191ae5e118c6", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_s_d_l_window_manager-members.html b/doc/html/classglimac_1_1_s_d_l_window_manager-members.html new file mode 100644 index 0000000..026278e --- /dev/null +++ b/doc/html/classglimac_1_1_s_d_l_window_manager-members.html @@ -0,0 +1,108 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::SDLWindowManager Member List
+
+
+ +

This is the complete list of members for glimac::SDLWindowManager, including all inherited members.

+ + + + + + + + + +
getMousePosition() const (defined in glimac::SDLWindowManager)glimac::SDLWindowManager
getTime() const (defined in glimac::SDLWindowManager)glimac::SDLWindowManager
isKeyPressed(SDLKey key) const (defined in glimac::SDLWindowManager)glimac::SDLWindowManager
isMouseButtonPressed(uint32_t button) const (defined in glimac::SDLWindowManager)glimac::SDLWindowManager
pollEvent(SDL_Event &e) (defined in glimac::SDLWindowManager)glimac::SDLWindowManager
SDLWindowManager(uint32_t width, uint32_t height, const char *title) (defined in glimac::SDLWindowManager)glimac::SDLWindowManager
swapBuffers() (defined in glimac::SDLWindowManager)glimac::SDLWindowManager
~SDLWindowManager() (defined in glimac::SDLWindowManager)glimac::SDLWindowManager
+
+ + + + diff --git a/doc/html/classglimac_1_1_s_d_l_window_manager.html b/doc/html/classglimac_1_1_s_d_l_window_manager.html new file mode 100644 index 0000000..27c1b1c --- /dev/null +++ b/doc/html/classglimac_1_1_s_d_l_window_manager.html @@ -0,0 +1,130 @@ + + + + + + + +SpacImac Runner: glimac::SDLWindowManager Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::SDLWindowManager Class Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

SDLWindowManager (uint32_t width, uint32_t height, const char *title)
 
+bool pollEvent (SDL_Event &e)
 
+bool isKeyPressed (SDLKey key) const
 
+bool isMouseButtonPressed (uint32_t button) const
 
+glm::ivec2 getMousePosition () const
 
+void swapBuffers ()
 
+float getTime () const
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_s_d_l_window_manager.js b/doc/html/classglimac_1_1_s_d_l_window_manager.js new file mode 100644 index 0000000..7a59809 --- /dev/null +++ b/doc/html/classglimac_1_1_s_d_l_window_manager.js @@ -0,0 +1,11 @@ +var classglimac_1_1_s_d_l_window_manager = +[ + [ "SDLWindowManager", "classglimac_1_1_s_d_l_window_manager.html#aaddb3bc2ec58bc1e818276e81605520f", null ], + [ "~SDLWindowManager", "classglimac_1_1_s_d_l_window_manager.html#a135c3b4ec63bf47ce3b39f2485a0026e", null ], + [ "getMousePosition", "classglimac_1_1_s_d_l_window_manager.html#aac32964a8c7e0e0e790b8fab29ac2831", null ], + [ "getTime", "classglimac_1_1_s_d_l_window_manager.html#ae79e8321234999083adda1287cf825fe", null ], + [ "isKeyPressed", "classglimac_1_1_s_d_l_window_manager.html#afa3e15ceca501ac52df29b1906cbb083", null ], + [ "isMouseButtonPressed", "classglimac_1_1_s_d_l_window_manager.html#a3f970279f069c97d64845687f1af5743", null ], + [ "pollEvent", "classglimac_1_1_s_d_l_window_manager.html#a4b2fd3e74f00c28d3b03e0cff3bb0131", null ], + [ "swapBuffers", "classglimac_1_1_s_d_l_window_manager.html#aee6b4f60e5b418a99d35360aea48bd41", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_shader-members.html b/doc/html/classglimac_1_1_shader-members.html new file mode 100644 index 0000000..7dae481 --- /dev/null +++ b/doc/html/classglimac_1_1_shader-members.html @@ -0,0 +1,108 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::Shader Member List
+
+
+ +

This is the complete list of members for glimac::Shader, including all inherited members.

+ + + + + + + + + +
compile() (defined in glimac::Shader)glimac::Shader
getGLId() const (defined in glimac::Shader)glimac::Shaderinline
getInfoLog() const (defined in glimac::Shader)glimac::Shader
operator=(Shader &&rvalue) (defined in glimac::Shader)glimac::Shaderinline
setSource(const char *src) (defined in glimac::Shader)glimac::Shaderinline
Shader(GLenum type) (defined in glimac::Shader)glimac::Shaderinline
Shader(Shader &&rvalue) (defined in glimac::Shader)glimac::Shaderinline
~Shader() (defined in glimac::Shader)glimac::Shaderinline
+
+ + + + diff --git a/doc/html/classglimac_1_1_shader.html b/doc/html/classglimac_1_1_shader.html new file mode 100644 index 0000000..0e5bd1a --- /dev/null +++ b/doc/html/classglimac_1_1_shader.html @@ -0,0 +1,130 @@ + + + + + + + +SpacImac Runner: glimac::Shader Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::Shader Class Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

Shader (GLenum type)
 
Shader (Shader &&rvalue)
 
+Shaderoperator= (Shader &&rvalue)
 
+GLuint getGLId () const
 
+void setSource (const char *src)
 
+bool compile ()
 
+const std::string getInfoLog () const
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_shader.js b/doc/html/classglimac_1_1_shader.js new file mode 100644 index 0000000..c19715d --- /dev/null +++ b/doc/html/classglimac_1_1_shader.js @@ -0,0 +1,11 @@ +var classglimac_1_1_shader = +[ + [ "Shader", "classglimac_1_1_shader.html#a064a1d24851c1c405d3c912cff9521c4", null ], + [ "~Shader", "classglimac_1_1_shader.html#ac36c2fedf8587caaf131ca164d737758", null ], + [ "Shader", "classglimac_1_1_shader.html#a98bf794b782f89a7a5c859607e6dc62b", null ], + [ "compile", "classglimac_1_1_shader.html#a1e6c6814a6275dd698b3befdb89aa647", null ], + [ "getGLId", "classglimac_1_1_shader.html#a46c21c4b6b9ee89426b458695897202e", null ], + [ "getInfoLog", "classglimac_1_1_shader.html#aa0de6702041087187d8eca874000cfa6", null ], + [ "operator=", "classglimac_1_1_shader.html#a0790eeb7a9fc154161bee6b78e287828", null ], + [ "setSource", "classglimac_1_1_shader.html#a66701118e7f1d789a258936c82b32874", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_sphere-members.html b/doc/html/classglimac_1_1_sphere-members.html new file mode 100644 index 0000000..be105b6 --- /dev/null +++ b/doc/html/classglimac_1_1_sphere-members.html @@ -0,0 +1,111 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac::Sphere Member List
+
+
+ +

This is the complete list of members for glimac::Sphere, including all inherited members.

+ + + + + + + + + + + + +
description() (defined in glimac::Sphere)glimac::Sphereinline
draw() (defined in glimac::Sphere)glimac::Spherevirtual
getDataPointer() const (defined in glimac::Sphere)glimac::Sphereinline
getVao() const (defined in glimac::Sphere)glimac::Sphereinline
getVertexCount() const (defined in glimac::Sphere)glimac::Sphereinline
Object() (defined in glimac::Object)glimac::Objectinline
Sphere(GLfloat radius=0.5, GLsizei discLat=100, GLsizei discLong=100) (defined in glimac::Sphere)glimac::Sphereinline
vaoManager(GLuint &vao, GLuint &vbo) (defined in glimac::Sphere)glimac::Spherevirtual
vboManager(GLuint &vbo) (defined in glimac::Sphere)glimac::Spherevirtual
x (defined in glimac::Object)glimac::Object
y (defined in glimac::Object)glimac::Object
+
+ + + + diff --git a/doc/html/classglimac_1_1_sphere.html b/doc/html/classglimac_1_1_sphere.html new file mode 100644 index 0000000..a677cf2 --- /dev/null +++ b/doc/html/classglimac_1_1_sphere.html @@ -0,0 +1,162 @@ + + + + + + + +SpacImac Runner: glimac::Sphere Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
glimac::Sphere Class Reference
+
+
+
+Inheritance diagram for glimac::Sphere:
+
+
+ + +glimac::Object + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Sphere (GLfloat radius=0.5, GLsizei discLat=100, GLsizei discLong=100)
 
+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+void vboManager (GLuint &vbo)
 
+void vaoManager (GLuint &vao, GLuint &vbo)
 
+GLuint getVao () const
 
+void draw ()
 
+void description ()
 
- Public Member Functions inherited from glimac::Object
+const ShapeVertexgetDataPointer () const
 
+GLsizei getVertexCount () const
 
+GLuint getVao () const
 
+ + + + + + +

+Additional Inherited Members

- Public Attributes inherited from glimac::Object
+int x = 0
 
+int y = 0
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classglimac_1_1_sphere.js b/doc/html/classglimac_1_1_sphere.js new file mode 100644 index 0000000..d0ac6d9 --- /dev/null +++ b/doc/html/classglimac_1_1_sphere.js @@ -0,0 +1,11 @@ +var classglimac_1_1_sphere = +[ + [ "Sphere", "classglimac_1_1_sphere.html#aafa141b17e681cf6ba2d11c53dcc063d", null ], + [ "description", "classglimac_1_1_sphere.html#a234ad0deb396231323696cb7f285f374", null ], + [ "draw", "classglimac_1_1_sphere.html#aab7007ba423a8493bd03847d7ee2477b", null ], + [ "getDataPointer", "classglimac_1_1_sphere.html#acff10a50f36ef2c1b365ff8cb81b1f5f", null ], + [ "getVao", "classglimac_1_1_sphere.html#a94244e10dd382e402239b2d00482e8ae", null ], + [ "getVertexCount", "classglimac_1_1_sphere.html#af413d827ffe392ca91770858d8d97285", null ], + [ "vaoManager", "classglimac_1_1_sphere.html#afcd2fe02dd6beb61ed5dd1a48927f353", null ], + [ "vboManager", "classglimac_1_1_sphere.html#a793b5d77dee084c32f2e745cd4ffac58", null ] +]; \ No newline at end of file diff --git a/doc/html/classglimac_1_1_sphere.png b/doc/html/classglimac_1_1_sphere.png new file mode 100644 index 0000000..26ec1d5 Binary files /dev/null and b/doc/html/classglimac_1_1_sphere.png differ diff --git a/doc/html/classmotor__game_1_1_end-members.html b/doc/html/classmotor__game_1_1_end-members.html new file mode 100644 index 0000000..ad37e38 --- /dev/null +++ b/doc/html/classmotor__game_1_1_end-members.html @@ -0,0 +1,121 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
motor_game::End Member List
+
+
+ +

This is the complete list of members for motor_game::End, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
collide(Hero &hero)motor_game::Endvirtual
collision(Hero &hero)Elementinline
description()PrintableElementinline
Element()Element
Element(const glm::vec3 &position, const std::string &type)Element
End()=defaultmotor_game::End
End(const glm::vec3 &position, const std::string &type="End")motor_game::Endinline
getPosition() constPrintableElementinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
m_positionPrintableElementprotected
m_typePrintableElementprotected
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constmotor_game::Endvirtual
setPosition(glm::vec3 pos)PrintableElementinline
~Element()Element
~End()=defaultmotor_game::End
~PrintableElement()PrintableElement
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_end.html b/doc/html/classmotor__game_1_1_end.html new file mode 100644 index 0000000..1b6b673 --- /dev/null +++ b/doc/html/classmotor__game_1_1_end.html @@ -0,0 +1,239 @@ + + + + + + + +SpacImac Runner: motor_game::End Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
motor_game::End Class Reference
+
+
+ +

#include <End.hpp>

+
+Inheritance diagram for motor_game::End:
+
+
+ + +Element +PrintableElement + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

End ()=default
 default constructor of class End
 
 End (const glm::vec3 &position, const std::string &type="End")
 
+void collide (Hero &hero)
 method to determine the behavior of an End when the player is colliding with it
 
+void printElement () const
 brief method to display the value of End's attributes
 
~End ()=default
 default destructor of our End
 
- Public Member Functions inherited from Element
 Element ()
 
 Element (const glm::vec3 &position, const std::string &type)
 
+void collision (Hero &hero)
 brief method to implement the polymorphism of the collide method for different inherited Element classes
 
~Element ()
 default destructor of our Element
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+

Detailed Description

+

class End end of the level

+

Constructor & Destructor Documentation

+ +

◆ End()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
motor_game::End::End (const glm::vec3 & position,
const std::string & type = "End" 
)
+
+inline
+
+

brief constructor with parameters param position, and type of the PrintableElement

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_end.js b/doc/html/classmotor__game_1_1_end.js new file mode 100644 index 0000000..c7baf02 --- /dev/null +++ b/doc/html/classmotor__game_1_1_end.js @@ -0,0 +1,8 @@ +var classmotor__game_1_1_end = +[ + [ "End", "classmotor__game_1_1_end.html#adeda88d8296bb099751e851fa857438d", null ], + [ "End", "classmotor__game_1_1_end.html#a226a9e7c4f91aecc44692acfa93672a9", null ], + [ "~End", "classmotor__game_1_1_end.html#a035119e2aa5a0aa2555c432071569f81", null ], + [ "collide", "classmotor__game_1_1_end.html#a00cb596263c2b5f32f233627397f59cf", null ], + [ "printElement", "classmotor__game_1_1_end.html#a511178d610f637cdfe1603a52d0b7f06", null ] +]; \ No newline at end of file diff --git a/doc/html/classmotor__game_1_1_end.png b/doc/html/classmotor__game_1_1_end.png new file mode 100644 index 0000000..a8f3640 Binary files /dev/null and b/doc/html/classmotor__game_1_1_end.png differ diff --git a/doc/html/classmotor__game_1_1_gap-members.html b/doc/html/classmotor__game_1_1_gap-members.html new file mode 100644 index 0000000..6d18950 --- /dev/null +++ b/doc/html/classmotor__game_1_1_gap-members.html @@ -0,0 +1,121 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
motor_game::Gap Member List
+
+
+ +

This is the complete list of members for motor_game::Gap, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
collide(Hero &hero)motor_game::Gapvirtual
collision(Hero &hero)Elementinline
description()PrintableElementinline
Element()Element
Element(const glm::vec3 &position, const std::string &type)Element
Gap() (defined in motor_game::Gap)motor_game::Gap
Gap(const glm::vec3 &position, const std::string &type="Gap")motor_game::Gap
getPosition() constPrintableElementinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
m_positionPrintableElementprotected
m_typePrintableElementprotected
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constmotor_game::Gapvirtual
setPosition(glm::vec3 pos)PrintableElementinline
~Element()Element
~Gap()=defaultmotor_game::Gap
~PrintableElement()PrintableElement
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_gap.html b/doc/html/classmotor__game_1_1_gap.html new file mode 100644 index 0000000..d00a107 --- /dev/null +++ b/doc/html/classmotor__game_1_1_gap.html @@ -0,0 +1,223 @@ + + + + + + + +SpacImac Runner: motor_game::Gap Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
motor_game::Gap Class Reference
+
+
+
+Inheritance diagram for motor_game::Gap:
+
+
+ + +Element +PrintableElement + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Gap (const glm::vec3 &position, const std::string &type="Gap")
 
~Gap ()=default
 brief default destructor
 
+void collide (Hero &hero)
 method determining the behavior of a Gap when the player is colliding with it
 
+void printElement () const
 brief method to display the value of Gap's attributes
 
- Public Member Functions inherited from Element
 Element ()
 
 Element (const glm::vec3 &position, const std::string &type)
 
+void collision (Hero &hero)
 brief method to implement the polymorphism of the collide method for different inherited Element classes
 
~Element ()
 default destructor of our Element
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+

Constructor & Destructor Documentation

+ +

◆ Gap()

+ +
+
+ + + + + + + + + + + + + + + + + + +
motor_game::Gap::Gap (const glm::vec3 & position = glm::vec3(0),
const std::string & type = "Gap" 
)
+
+

brief constructor param position, and type

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_gap.js b/doc/html/classmotor__game_1_1_gap.js new file mode 100644 index 0000000..2f3ffa8 --- /dev/null +++ b/doc/html/classmotor__game_1_1_gap.js @@ -0,0 +1,8 @@ +var classmotor__game_1_1_gap = +[ + [ "Gap", "classmotor__game_1_1_gap.html#abcb45694e0c50c5f0a25adca35c59418", null ], + [ "Gap", "classmotor__game_1_1_gap.html#a9c08c33065fffb772d501fbc926ae84c", null ], + [ "~Gap", "classmotor__game_1_1_gap.html#a9c3cbd0654d63a2e5cd7dc74f5bf26ee", null ], + [ "collide", "classmotor__game_1_1_gap.html#adba24184c21dbcc68a5fca4240bef4ee", null ], + [ "printElement", "classmotor__game_1_1_gap.html#a387c373efdcb198ea23d9f9ad6f5a8a5", null ] +]; \ No newline at end of file diff --git a/doc/html/classmotor__game_1_1_gap.png b/doc/html/classmotor__game_1_1_gap.png new file mode 100644 index 0000000..c7db550 Binary files /dev/null and b/doc/html/classmotor__game_1_1_gap.png differ diff --git a/doc/html/classmotor__game_1_1_map-members.html b/doc/html/classmotor__game_1_1_map-members.html new file mode 100644 index 0000000..8a3d7ae --- /dev/null +++ b/doc/html/classmotor__game_1_1_map-members.html @@ -0,0 +1,121 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
motor_game::Map Member List
+
+
+ +

This is the complete list of members for motor_game::Map, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
element(const int &x, const int &y, const int &z) constmotor_game::Map
element(const int &x, const int &y, const int &z, Element *element)motor_game::Map
eraseElement(const int &x, const int &y, const int &z) (defined in motor_game::Map)motor_game::Map
getElementi(const int i) const (defined in motor_game::Map)motor_game::Map
getVector() (defined in motor_game::Map)motor_game::Mapinline
Map()=delete (defined in motor_game::Map)motor_game::Map
Map(const int &x, const int &y, const int &z) (defined in motor_game::Map)motor_game::Map
printElement() (defined in motor_game::Map)motor_game::Map
projectionX() constmotor_game::Mapinline
projectionX(const int x)motor_game::Mapinline
projectionY() constmotor_game::Mapinline
projectionY(const int y)motor_game::Mapinline
projectionZ() constmotor_game::Mapinline
projectionZ(const int z)motor_game::Mapinline
rotateLeft() (defined in motor_game::Map)motor_game::Map
rotateRight() (defined in motor_game::Map)motor_game::Map
size() (defined in motor_game::Map)motor_game::Mapinline
translateMap(const float &x, const float &z) (defined in motor_game::Map)motor_game::Map
x() constmotor_game::Mapinline
y() constmotor_game::Mapinline
z() constmotor_game::Mapinline
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_map.html b/doc/html/classmotor__game_1_1_map.html new file mode 100644 index 0000000..88c47fc --- /dev/null +++ b/doc/html/classmotor__game_1_1_map.html @@ -0,0 +1,276 @@ + + + + + + + +SpacImac Runner: motor_game::Map Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
motor_game::Map Class Reference
+
+
+ +

contains the level elements, and the dimensions' level + More...

+ +

#include <Map.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Map (const int &x, const int &y, const int &z)
 
Elementelement (const int &x, const int &y, const int &z) const
 getter of an Element More...
 
+const unsigned int size ()
 
+const negative_vector< Element * > getVector ()
 
+ElementgetElementi (const int i) const
 
void element (const int &x, const int &y, const int &z, Element *element)
 setter of an Element More...
 
+const int & x () const
 getter of x-coordiconst unsigned int &x, const unsigned int &y, const unsigned int &znate
 
+const int & y () const
 getter of y-coordinate
 
+const int & z () const
 getter of z-coordinate
 
+int projectionX () const
 getter of projection on X
 
+int projectionY () const
 getter of projection on Y
 
+int projectionZ () const
 getter of projection on Z
 
+void projectionX (const int x)
 setter of projection on X
 
+void projectionY (const int y)
 getter of projection on Y
 
+void projectionZ (const int z)
 getter of projection on Z
 
+void printElement ()
 
+void translateMap (const float &x, const float &z)
 
+void rotateRight ()
 
+void rotateLeft ()
 
+void eraseElement (const int &x, const int &y, const int &z)
 
+

Detailed Description

+

contains the level elements, and the dimensions' level

+

Member Function Documentation

+ +

◆ element() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Element * motor_game::Map::element (const int & x,
const int & y,
const int & z 
) const
+
+ +

getter of an Element

+
Parameters
+ + +
coordinatesof this Element
+
+
+ +
+
+ +

◆ element() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void motor_game::Map::element (const int & x,
const int & y,
const int & z,
Elementelement 
)
+
+ +

setter of an Element

+
Parameters
+ + +
coordinatesof this Element, and the Element
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_map.js b/doc/html/classmotor__game_1_1_map.js new file mode 100644 index 0000000..93e08c1 --- /dev/null +++ b/doc/html/classmotor__game_1_1_map.js @@ -0,0 +1,24 @@ +var classmotor__game_1_1_map = +[ + [ "Map", "classmotor__game_1_1_map.html#a9e7b00caf630d8c218f964544b453287", null ], + [ "Map", "classmotor__game_1_1_map.html#a9171f0ce61af3abb899d639963ef1059", null ], + [ "element", "classmotor__game_1_1_map.html#ac6215c73a63a69e10aaa27402ff4ece9", null ], + [ "element", "classmotor__game_1_1_map.html#ad6831a7d6811d54a191074f2f124fb36", null ], + [ "eraseElement", "classmotor__game_1_1_map.html#a4559423146da4b32ad6c77b4edf83026", null ], + [ "getElementi", "classmotor__game_1_1_map.html#a98dd7d74032a567a7757345b0fdae026", null ], + [ "getVector", "classmotor__game_1_1_map.html#aafd247d6a0433a7974e13b8f9e242ae1", null ], + [ "printElement", "classmotor__game_1_1_map.html#ac695dd22d563dd341e55adc1960ecdea", null ], + [ "projectionX", "classmotor__game_1_1_map.html#ab54766b30850b1235e02cf9bd11a7276", null ], + [ "projectionX", "classmotor__game_1_1_map.html#a2ef84fc298faff5272fba5750aa3953e", null ], + [ "projectionY", "classmotor__game_1_1_map.html#ac7493f6971b67f86ce5154570686cde8", null ], + [ "projectionY", "classmotor__game_1_1_map.html#ae0d7d36858ed3b2819da5fced88a591d", null ], + [ "projectionZ", "classmotor__game_1_1_map.html#a0f270cb6d3951df76aa065577db4eb46", null ], + [ "projectionZ", "classmotor__game_1_1_map.html#a253681e3d6bc0f894b769cb2180b4d57", null ], + [ "rotateLeft", "classmotor__game_1_1_map.html#a5433bba67ed0b48ae044e300c1bfa3c7", null ], + [ "rotateRight", "classmotor__game_1_1_map.html#a21d714898fa52580f09c4c056e135345", null ], + [ "size", "classmotor__game_1_1_map.html#ab037b314d7d44c6a821eefac14bcbcc8", null ], + [ "translateMap", "classmotor__game_1_1_map.html#a07aa4c1fd17cc08d733ac20e74c47459", null ], + [ "x", "classmotor__game_1_1_map.html#a54246d79679ea844b79850ae4ebfc408", null ], + [ "y", "classmotor__game_1_1_map.html#a8cfa4c508de73e0745419dade928afbd", null ], + [ "z", "classmotor__game_1_1_map.html#a13a7647049f9c2601405ea5507d49dab", null ] +]; \ No newline at end of file diff --git a/doc/html/classmotor__game_1_1_p_p_m-members.html b/doc/html/classmotor__game_1_1_p_p_m-members.html new file mode 100644 index 0000000..43eff1d --- /dev/null +++ b/doc/html/classmotor__game_1_1_p_p_m-members.html @@ -0,0 +1,113 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
motor_game::PPM Member List
+
+
+ +

This is the complete list of members for motor_game::PPM, including all inherited members.

+ + + + + + + + + + + + + + +
dimensions() constmotor_game::PPMinline
enemy() constmotor_game::PPMinline
enemy()motor_game::PPMinline
hero() constmotor_game::PPMinline
hero()motor_game::PPMinline
map() constmotor_game::PPMinline
map()motor_game::PPMinline
PPM()=delete (defined in motor_game::PPM)motor_game::PPM
PPM(int x, int y, int z)motor_game::PPMinline
x()motor_game::PPMinline
y()motor_game::PPMinline
z()motor_game::PPMinline
~PPM()=default (defined in motor_game::PPM)motor_game::PPM
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_p_p_m.html b/doc/html/classmotor__game_1_1_p_p_m.html new file mode 100644 index 0000000..b50105f --- /dev/null +++ b/doc/html/classmotor__game_1_1_p_p_m.html @@ -0,0 +1,202 @@ + + + + + + + +SpacImac Runner: motor_game::PPM Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
motor_game::PPM Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PPM (int x, int y, int z)
 constructor More...
 
+const Map map () const
 getter : Element vector of the level
 
+Mapmap ()
 setter : Element vector of the level
 
+const Herohero () const
 getter : returns the hero
 
+Herohero ()
 setter : the hero
 
+const Enemyenemy () const
 getter : returns the enemy
 
+Enemyenemy ()
 setter : the enemy
 
+const glm::vec3 dimensions () const
 getter : returns the dimensions of the map
 
+int x ()
 setter : the x-dimension of the map
 
+int y ()
 setter : y-dimension of the map
 
+int z ()
 setter : the z-dimension of the map
 
+

Constructor & Destructor Documentation

+ +

◆ PPM()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
motor_game::PPM::PPM (int x,
int y,
int z 
)
+
+inline
+
+ +

constructor

+
Parameters
+ + +
dimensionsof the map
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_p_p_m.js b/doc/html/classmotor__game_1_1_p_p_m.js new file mode 100644 index 0000000..7b5f31f --- /dev/null +++ b/doc/html/classmotor__game_1_1_p_p_m.js @@ -0,0 +1,16 @@ +var classmotor__game_1_1_p_p_m = +[ + [ "PPM", "classmotor__game_1_1_p_p_m.html#a34e1834bac096589df28a6e6200bb0da", null ], + [ "PPM", "classmotor__game_1_1_p_p_m.html#a116501ec49756c4043e9abdb8647bea5", null ], + [ "~PPM", "classmotor__game_1_1_p_p_m.html#a0341b78888068a4242f7d4351a06e035", null ], + [ "dimensions", "classmotor__game_1_1_p_p_m.html#aba8267dfc79fd7d7a226d138987cbca1", null ], + [ "enemy", "classmotor__game_1_1_p_p_m.html#a861cc25436ca0caa53d1ebc37e3cad2e", null ], + [ "enemy", "classmotor__game_1_1_p_p_m.html#ae996fb4b6883d1d30260ec3df84e100a", null ], + [ "hero", "classmotor__game_1_1_p_p_m.html#a3c48561aa7a07ca1d7265cd92fa2c6e6", null ], + [ "hero", "classmotor__game_1_1_p_p_m.html#ae7479bd6996f1dd4e9a758848894d530", null ], + [ "map", "classmotor__game_1_1_p_p_m.html#abc41fdd031233190f0b146047a26cc9f", null ], + [ "map", "classmotor__game_1_1_p_p_m.html#af8cd50627453230d76054a96791d36fc", null ], + [ "x", "classmotor__game_1_1_p_p_m.html#a246d40f59fa94e0539db3e32a547032e", null ], + [ "y", "classmotor__game_1_1_p_p_m.html#abd8ad5c69e31375d6d92f463e0cd0432", null ], + [ "z", "classmotor__game_1_1_p_p_m.html#aec9a7617bf48bae80ef810f3219f4257", null ] +]; \ No newline at end of file diff --git a/doc/html/classmotor__game_1_1_p_p_mreader-members.html b/doc/html/classmotor__game_1_1_p_p_mreader-members.html new file mode 100644 index 0000000..86b2b7c --- /dev/null +++ b/doc/html/classmotor__game_1_1_p_p_mreader-members.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
motor_game::PPMreader Member List
+
+
+ +

This is the complete list of members for motor_game::PPMreader, including all inherited members.

+ + + + + + +
PPMreader(const std::string &filename)motor_game::PPMreader
PPMreader()=delete (defined in motor_game::PPMreader)motor_game::PPMreader
readFile()motor_game::PPMreader
readFile(PPM &ppm)motor_game::PPMreader
~PPMreader()motor_game::PPMreader
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_p_p_mreader.html b/doc/html/classmotor__game_1_1_p_p_mreader.html new file mode 100644 index 0000000..00c396e --- /dev/null +++ b/doc/html/classmotor__game_1_1_p_p_mreader.html @@ -0,0 +1,177 @@ + + + + + + + +SpacImac Runner: motor_game::PPMreader Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
motor_game::PPMreader Class Reference
+
+
+ + + + + + + + + + + + + + +

+Public Member Functions

 PPMreader (const std::string &filename)
 constructor : open the setting file More...
 
~PPMreader ()
 destructor
 
+const PPM readFile ()
 read the file and set the ppm
 
void readFile (PPM &ppm)
 read the file and add coins to the ppm More...
 
+

Constructor & Destructor Documentation

+ +

◆ PPMreader()

+ +
+
+ + + + + + + + +
motor_game::PPMreader::PPMreader (const std::string & filename)
+
+ +

constructor : open the setting file

+
Parameters
+ + +
stringof the file name
+
+
+ +
+
+

Member Function Documentation

+ +

◆ readFile()

+ +
+
+ + + + + + + + +
void motor_game::PPMreader::readFile (PPMppm)
+
+ +

read the file and add coins to the ppm

+
Parameters
+ + +
ppm: the ppm to add coins to
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_p_p_mreader.js b/doc/html/classmotor__game_1_1_p_p_mreader.js new file mode 100644 index 0000000..ac83a39 --- /dev/null +++ b/doc/html/classmotor__game_1_1_p_p_mreader.js @@ -0,0 +1,8 @@ +var classmotor__game_1_1_p_p_mreader = +[ + [ "PPMreader", "classmotor__game_1_1_p_p_mreader.html#a07894b469588e2fe3fb79980e87dd85a", null ], + [ "PPMreader", "classmotor__game_1_1_p_p_mreader.html#af40014ca83778d1158b79fa9d1c0dd58", null ], + [ "~PPMreader", "classmotor__game_1_1_p_p_mreader.html#acd5707bacd9773470a16879091e46a03", null ], + [ "readFile", "classmotor__game_1_1_p_p_mreader.html#a154b0e4b981269c9a9019113b74b4682", null ], + [ "readFile", "classmotor__game_1_1_p_p_mreader.html#ac7068e960aa9be9b7dc59bc3cb4805a6", null ] +]; \ No newline at end of file diff --git a/doc/html/classmotor__game_1_1_scores-members.html b/doc/html/classmotor__game_1_1_scores-members.html new file mode 100644 index 0000000..699dff6 --- /dev/null +++ b/doc/html/classmotor__game_1_1_scores-members.html @@ -0,0 +1,107 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
motor_game::Scores Member List
+
+
+ +

This is the complete list of members for motor_game::Scores, including all inherited members.

+ + + + + + + + +
add(const std::pair< long, std::string > &score)motor_game::Scores
clear()motor_game::Scores
multimap() constmotor_game::Scores
read(const std::string &filename)motor_game::Scores
save(const std::string &filename)motor_game::Scores
Scores(const size_t &maxSize=7)motor_game::Scores
~Scores()=default (defined in motor_game::Scores)motor_game::Scores
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_scores.html b/doc/html/classmotor__game_1_1_scores.html new file mode 100644 index 0000000..5f29ed8 --- /dev/null +++ b/doc/html/classmotor__game_1_1_scores.html @@ -0,0 +1,182 @@ + + + + + + + +SpacImac Runner: motor_game::Scores Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
motor_game::Scores Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Scores (const size_t &maxSize=7)
 constructor More...
 
void read (const std::string &filename)
 
+const std::multimap< long, std::string, std::greater< long > > & multimap () const
 getter : returns the multimap which contains the scores
 
+void save (const std::string &filename)
 save scores into a file - can throw an exception
 
+void add (const std::pair< long, std::string > &score)
 add the score, if it is high enough. A name is present only one time.
 
+void clear ()
 empty the Scores data
 
+

Constructor & Destructor Documentation

+ +

◆ Scores()

+ +
+
+ + + + + + + + +
motor_game::Scores::Scores (const size_t & maxSize = 7)
+
+ +

constructor

+
Parameters
+ + +
maxSize: max number of scores stored
+
+
+ +
+
+

Member Function Documentation

+ +

◆ read()

+ +
+
+ + + + + + + + +
void motor_game::Scores::read (const std::string & filename)
+
+
Parameters
+ + +
filename: constructor reads scores from this file
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_scores.js b/doc/html/classmotor__game_1_1_scores.js new file mode 100644 index 0000000..39caa80 --- /dev/null +++ b/doc/html/classmotor__game_1_1_scores.js @@ -0,0 +1,10 @@ +var classmotor__game_1_1_scores = +[ + [ "Scores", "classmotor__game_1_1_scores.html#a421ac4c4e3ce925c080880f600bf3ca2", null ], + [ "~Scores", "classmotor__game_1_1_scores.html#a5ff1221b3cbfe2652cbcdfb25c410134", null ], + [ "add", "classmotor__game_1_1_scores.html#a1249df9a55bafba7d4d7e18ac3428389", null ], + [ "clear", "classmotor__game_1_1_scores.html#ac1e3b3c41390ef0a116b22383a928ab0", null ], + [ "multimap", "classmotor__game_1_1_scores.html#a7c2badfbba33841e544a7d0e2e687ca1", null ], + [ "read", "classmotor__game_1_1_scores.html#a8c705cb9a8cee42115b1a2479d96f11e", null ], + [ "save", "classmotor__game_1_1_scores.html#ab6b74ef72ee79255c34ce29b369ea1fe", null ] +]; \ No newline at end of file diff --git a/doc/html/classmotor__game_1_1_turn-members.html b/doc/html/classmotor__game_1_1_turn-members.html new file mode 100644 index 0000000..77ad8af --- /dev/null +++ b/doc/html/classmotor__game_1_1_turn-members.html @@ -0,0 +1,125 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
motor_game::Turn Member List
+
+
+ +

This is the complete list of members for motor_game::Turn, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
collide(Hero *hero) constmotor_game::Turn
Floor::collide(Hero &hero)Elementvirtual
collision(Hero &hero)Elementinline
description()PrintableElementinline
Element()Element
Element(const glm::vec3 &position, const std::string &type)Element
Floor()Floor
Floor(const glm::vec3 &position, const std::string &type="Floor") (defined in Floor)Floor
getPosition() constPrintableElementinline
getType() constPrintableElementinline
getX() constPrintableElementinline
getY() constPrintableElementinline
getZ() constPrintableElementinline
m_positionPrintableElementprotected
m_typePrintableElementprotected
PrintableElement()PrintableElement
PrintableElement(const glm::vec3 &position, const std::string &type)PrintableElement
printElement() constmotor_game::Turnvirtual
setPosition(glm::vec3 pos)PrintableElementinline
Turn()=delete (defined in motor_game::Turn)motor_game::Turn
Turn(const glm::vec3 &position, const std::string &type) (defined in motor_game::Turn)motor_game::Turn
~Element()Element
~Floor()Floor
~PrintableElement()PrintableElement
~Turn()=defaultmotor_game::Turn
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_turn.html b/doc/html/classmotor__game_1_1_turn.html new file mode 100644 index 0000000..5b01788 --- /dev/null +++ b/doc/html/classmotor__game_1_1_turn.html @@ -0,0 +1,211 @@ + + + + + + + +SpacImac Runner: motor_game::Turn Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
motor_game::Turn Class Referencefinal
+
+
+
+Inheritance diagram for motor_game::Turn:
+
+
+ + +Floor +Element +PrintableElement + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Turn (const glm::vec3 &position, const std::string &type)
 
+void printElement () const
 method to display the value of Turn's attributes
 
+void collide (Hero *hero) const
 method to call when the Character is on the Turn
 
~Turn ()=default
 destructor
 
- Public Member Functions inherited from Floor
Floor ()
 default constructor of class Floor
 
Floor (const glm::vec3 &position, const std::string &type="Floor")
 
~Floor ()
 default destructor of our Floor
 
- Public Member Functions inherited from Element
 Element ()
 
 Element (const glm::vec3 &position, const std::string &type)
 
+virtual void collide (Hero &hero)
 method to determine the behavior of an End when the player is colliding with it
 
+void collision (Hero &hero)
 brief method to implement the polymorphism of the collide method for different inherited Element classes
 
~Element ()
 default destructor of our Element
 
- Public Member Functions inherited from PrintableElement
 PrintableElement ()
 default constructor of class PrintableElement More...
 
 PrintableElement (const glm::vec3 &position, const std::string &type)
 constructor with parameters More...
 
+glm::vec3 getPosition () const
 method allowing us to know the x, y and z coordinates of our object
 
+void setPosition (glm::vec3 pos)
 setter of position
 
+float getX () const
 method allowing us to know the x coordinate of PrintableElement
 
+float getY () const
 method allowing us to know the y coordinate of PrintableElement
 
+float getZ () const
 method allowing us to know the z coordinate of PrintableElement
 
+std::string getType () const
 method allowing us to know the type of PrintableElement
 
+void description ()
 brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes
 
~PrintableElement ()
 default destructor of our PrintableElement
 
+ + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from PrintableElement
glm::vec3 m_position
 
std::string m_type
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classmotor__game_1_1_turn.js b/doc/html/classmotor__game_1_1_turn.js new file mode 100644 index 0000000..1e8732d --- /dev/null +++ b/doc/html/classmotor__game_1_1_turn.js @@ -0,0 +1,8 @@ +var classmotor__game_1_1_turn = +[ + [ "Turn", "classmotor__game_1_1_turn.html#ae083f5ed4963438397e45b35373e9762", null ], + [ "Turn", "classmotor__game_1_1_turn.html#a7eca8e229412126d7fc081532b19e901", null ], + [ "~Turn", "classmotor__game_1_1_turn.html#a0c62ed05153bc97e42349ac62e40cbb2", null ], + [ "collide", "classmotor__game_1_1_turn.html#a81615aa974278de34dfe8ac09755aebd", null ], + [ "printElement", "classmotor__game_1_1_turn.html#abb8e1d754e76e14b8d82025216c51801", null ] +]; \ No newline at end of file diff --git a/doc/html/classmotor__game_1_1_turn.png b/doc/html/classmotor__game_1_1_turn.png new file mode 100644 index 0000000..b71f4ad Binary files /dev/null and b/doc/html/classmotor__game_1_1_turn.png differ diff --git a/doc/html/classnegative__vector-members.html b/doc/html/classnegative__vector-members.html new file mode 100644 index 0000000..bd309bb --- /dev/null +++ b/doc/html/classnegative__vector-members.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
negative_vector< T > Member List
+
+
+ +

This is the complete list of members for negative_vector< T >, including all inherited members.

+ + + + + + + +
lower_limit() const (defined in negative_vector< T >)negative_vector< T >inline
negative_vector(int min, int max) (defined in negative_vector< T >)negative_vector< T >inline
operator[](int index) (defined in negative_vector< T >)negative_vector< T >inline
operator[](int index) const (defined in negative_vector< T >)negative_vector< T >inline
size() const (defined in negative_vector< T >)negative_vector< T >inline
upper_limit() const (defined in negative_vector< T >)negative_vector< T >inline
+
+ + + + diff --git a/doc/html/classnegative__vector.html b/doc/html/classnegative__vector.html new file mode 100644 index 0000000..8b2cac6 --- /dev/null +++ b/doc/html/classnegative__vector.html @@ -0,0 +1,126 @@ + + + + + + + +SpacImac Runner: negative_vector< T > Class Template Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
negative_vector< T > Class Template Reference
+
+
+ + + + + + + + + + + + + + +

+Public Member Functions

negative_vector (int min, int max)
 
+T & operator[] (int index)
 
+T operator[] (int index) const
 
+int upper_limit () const
 
+int lower_limit () const
 
+unsigned int size () const
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/classnegative__vector.js b/doc/html/classnegative__vector.js new file mode 100644 index 0000000..f0c96eb --- /dev/null +++ b/doc/html/classnegative__vector.js @@ -0,0 +1,9 @@ +var classnegative__vector = +[ + [ "negative_vector", "classnegative__vector.html#ab5eeb165fd1b702a4efaf97de45cca52", null ], + [ "lower_limit", "classnegative__vector.html#a5080c1b99dd2eee9b8e9a9e0c532e84c", null ], + [ "operator[]", "classnegative__vector.html#a41f792d9af23d58666b83f93628adad7", null ], + [ "operator[]", "classnegative__vector.html#ad6d70e0df290aa91c24f5d918ec33c3f", null ], + [ "size", "classnegative__vector.html#a3163812d1759772f7d75aa5b9fc30c9e", null ], + [ "upper_limit", "classnegative__vector.html#a2f8c074af49e8a2462e54ec44548b749", null ] +]; \ No newline at end of file diff --git a/doc/html/classtinyobj_1_1_material_file_reader-members.html b/doc/html/classtinyobj_1_1_material_file_reader-members.html new file mode 100644 index 0000000..8ff11ec --- /dev/null +++ b/doc/html/classtinyobj_1_1_material_file_reader-members.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
tinyobj::MaterialFileReader Member List
+
+
+ +

This is the complete list of members for tinyobj::MaterialFileReader, including all inherited members.

+ + + + + + +
MaterialFileReader(const std::string &mtl_basepath) (defined in tinyobj::MaterialFileReader)tinyobj::MaterialFileReaderinline
MaterialReader() (defined in tinyobj::MaterialReader)tinyobj::MaterialReaderinline
operator()(const std::string &matId, std::vector< material_t > &materials, std::map< std::string, int > &matMap) (defined in tinyobj::MaterialFileReader)tinyobj::MaterialFileReadervirtual
~MaterialFileReader() (defined in tinyobj::MaterialFileReader)tinyobj::MaterialFileReaderinlinevirtual
~MaterialReader() (defined in tinyobj::MaterialReader)tinyobj::MaterialReaderinlinevirtual
+
+ + + + diff --git a/doc/html/classtinyobj_1_1_material_file_reader.html b/doc/html/classtinyobj_1_1_material_file_reader.html new file mode 100644 index 0000000..75224e7 --- /dev/null +++ b/doc/html/classtinyobj_1_1_material_file_reader.html @@ -0,0 +1,124 @@ + + + + + + + +SpacImac Runner: tinyobj::MaterialFileReader Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
tinyobj::MaterialFileReader Class Reference
+
+
+
+Inheritance diagram for tinyobj::MaterialFileReader:
+
+
+ + +tinyobj::MaterialReader + +
+ + + + + + +

+Public Member Functions

MaterialFileReader (const std::string &mtl_basepath)
 
+virtual std::string operator() (const std::string &matId, std::vector< material_t > &materials, std::map< std::string, int > &matMap)
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/doc/html/classtinyobj_1_1_material_file_reader.js b/doc/html/classtinyobj_1_1_material_file_reader.js new file mode 100644 index 0000000..2a69f53 --- /dev/null +++ b/doc/html/classtinyobj_1_1_material_file_reader.js @@ -0,0 +1,6 @@ +var classtinyobj_1_1_material_file_reader = +[ + [ "MaterialFileReader", "classtinyobj_1_1_material_file_reader.html#a824d0100284310fe213d86ad443cc575", null ], + [ "~MaterialFileReader", "classtinyobj_1_1_material_file_reader.html#a0a00d236393f9972b676a2fb6fe2b819", null ], + [ "operator()", "classtinyobj_1_1_material_file_reader.html#a9374212c9997aa8ac0d15d97f67b25f8", null ] +]; \ No newline at end of file diff --git a/doc/html/classtinyobj_1_1_material_file_reader.png b/doc/html/classtinyobj_1_1_material_file_reader.png new file mode 100644 index 0000000..1b3d00c Binary files /dev/null and b/doc/html/classtinyobj_1_1_material_file_reader.png differ diff --git a/doc/html/classtinyobj_1_1_material_reader-members.html b/doc/html/classtinyobj_1_1_material_reader-members.html new file mode 100644 index 0000000..a45f83b --- /dev/null +++ b/doc/html/classtinyobj_1_1_material_reader-members.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
tinyobj::MaterialReader Member List
+
+
+ +

This is the complete list of members for tinyobj::MaterialReader, including all inherited members.

+ + + + +
MaterialReader() (defined in tinyobj::MaterialReader)tinyobj::MaterialReaderinline
operator()(const std::string &matId, std::vector< material_t > &materials, std::map< std::string, int > &matMap)=0 (defined in tinyobj::MaterialReader)tinyobj::MaterialReaderpure virtual
~MaterialReader() (defined in tinyobj::MaterialReader)tinyobj::MaterialReaderinlinevirtual
+
+ + + + diff --git a/doc/html/classtinyobj_1_1_material_reader.html b/doc/html/classtinyobj_1_1_material_reader.html new file mode 100644 index 0000000..03245a5 --- /dev/null +++ b/doc/html/classtinyobj_1_1_material_reader.html @@ -0,0 +1,120 @@ + + + + + + + +SpacImac Runner: tinyobj::MaterialReader Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
tinyobj::MaterialReader Class Referenceabstract
+
+
+
+Inheritance diagram for tinyobj::MaterialReader:
+
+
+ + +tinyobj::MaterialFileReader + +
+ + + + +

+Public Member Functions

+virtual std::string operator() (const std::string &matId, std::vector< material_t > &materials, std::map< std::string, int > &matMap)=0
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/doc/html/classtinyobj_1_1_material_reader.js b/doc/html/classtinyobj_1_1_material_reader.js new file mode 100644 index 0000000..bdb4c98 --- /dev/null +++ b/doc/html/classtinyobj_1_1_material_reader.js @@ -0,0 +1,6 @@ +var classtinyobj_1_1_material_reader = +[ + [ "MaterialReader", "classtinyobj_1_1_material_reader.html#a701bdd6217518e0afb5596fcb59925b6", null ], + [ "~MaterialReader", "classtinyobj_1_1_material_reader.html#afd62ceccd9b373801226e037ea1a5f9f", null ], + [ "operator()", "classtinyobj_1_1_material_reader.html#afc27ac917abd33dc3ec4a9ae7a519962", null ] +]; \ No newline at end of file diff --git a/doc/html/classtinyobj_1_1_material_reader.png b/doc/html/classtinyobj_1_1_material_reader.png new file mode 100644 index 0000000..82cee80 Binary files /dev/null and b/doc/html/classtinyobj_1_1_material_reader.png differ diff --git a/doc/html/closed.png b/doc/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/doc/html/closed.png differ diff --git a/doc/html/common_8hpp_source.html b/doc/html/common_8hpp_source.html new file mode 100644 index 0000000..8890ece --- /dev/null +++ b/doc/html/common_8hpp_source.html @@ -0,0 +1,100 @@ + + + + + + + +SpacImac Runner: include/glimac/common.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
common.hpp
+
+
+
1 #pragma once
2 
3 #include <GL/glew.h>
4 #include "glm.hpp"
5 
6 namespace glimac {
7 
8 struct ShapeVertex {
9  glm::vec3 position;
10  glm::vec3 normal;
11  glm::vec2 texCoords;
12 };
13 
14 }
Definition: common.hpp:8
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/cube_8hpp_source.html b/doc/html/cube_8hpp_source.html new file mode 100644 index 0000000..0980dc3 --- /dev/null +++ b/doc/html/cube_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: include/glimac/cube.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
cube.hpp
+
+
+
1 #pragma once
2 
3 #include <iostream>
4 #include <vector>
5 #include "common.hpp"
6 #include "Object.hpp"
7 #include "perspectiveShader.hpp"
8 
9 
10 namespace glimac{
11 
12 
13 class Cube :public Object
14 {
15 
16  void build();
17 
18 public:
19 
20  Cube():
21  m_nVertexCount(36)
22  {
23  build();
24  }
25 
26  // Renvoit le pointeur vers les données
27  inline
28  const ShapeVertex* getDataPointer() const {
29  return &m_Vertices[0];
30  }
31 
32  // Renvoit le nombre de vertex
33  inline
34  GLsizei getVertexCount() const {
35  return m_nVertexCount;
36  }
37 
38  void vboManager(GLuint &vbo);
39  void vaoManager(GLuint &vao,GLuint &vbo);
40 
41  inline
42  GLuint getVao() const
43  {
44  return m_vao;
45  }
46 
47  void draw();
48 
49  void description()
50  {
51  std::cout<<"Je suis un Cube"<<std::endl;
52  }
53 
54 
55 
56 
57 private:
58 
59  GLuint m_vbo,m_vao;
60  std::vector<ShapeVertex> m_Vertices;
61  GLsizei m_nVertexCount; // Nombre de sommets
62 
63 
64 };
65 
66 }
Definition: cube.hpp:13
+
Definition: common.hpp:8
+
Definition: Object.hpp:9
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/dir_0e01513eafa252a1fbdc704793ad904c.html b/doc/html/dir_0e01513eafa252a1fbdc704793ad904c.html new file mode 100644 index 0000000..b868441 --- /dev/null +++ b/doc/html/dir_0e01513eafa252a1fbdc704793ad904c.html @@ -0,0 +1,98 @@ + + + + + + + +SpacImac Runner: src/glimac Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac Directory Reference
+
+
+
+
+ + + + diff --git a/doc/html/dir_0e01513eafa252a1fbdc704793ad904c.js b/doc/html/dir_0e01513eafa252a1fbdc704793ad904c.js new file mode 100644 index 0000000..864812f --- /dev/null +++ b/doc/html/dir_0e01513eafa252a1fbdc704793ad904c.js @@ -0,0 +1,5 @@ +var dir_0e01513eafa252a1fbdc704793ad904c = +[ + [ "stb_image.h", "stb__image_8h_source.html", null ], + [ "tiny_obj_loader.h", "tiny__obj__loader_8h_source.html", null ] +]; \ No newline at end of file diff --git a/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..61f4d58 --- /dev/null +++ b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: src Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
src Directory Reference
+
+
+ + +

+Directories

+
+
+ + + + diff --git a/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js new file mode 100644 index 0000000..b82beb0 --- /dev/null +++ b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js @@ -0,0 +1,4 @@ +var dir_68267d1309a1af8e8297ef4c3efbcdba = +[ + [ "glimac", "dir_0e01513eafa252a1fbdc704793ad904c.html", "dir_0e01513eafa252a1fbdc704793ad904c" ] +]; \ No newline at end of file diff --git a/doc/html/dir_6bcdd895099c5baf303d04ab453e583d.html b/doc/html/dir_6bcdd895099c5baf303d04ab453e583d.html new file mode 100644 index 0000000..667bf2c --- /dev/null +++ b/doc/html/dir_6bcdd895099c5baf303d04ab453e583d.html @@ -0,0 +1,98 @@ + + + + + + + +SpacImac Runner: include/exception Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
exception Directory Reference
+
+
+
+
+ + + + diff --git a/doc/html/dir_6bcdd895099c5baf303d04ab453e583d.js b/doc/html/dir_6bcdd895099c5baf303d04ab453e583d.js new file mode 100644 index 0000000..706bf2f --- /dev/null +++ b/doc/html/dir_6bcdd895099c5baf303d04ab453e583d.js @@ -0,0 +1,4 @@ +var dir_6bcdd895099c5baf303d04ab453e583d = +[ + [ "ExceptIMAC.hpp", "_except_i_m_a_c_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/doc/html/dir_7eb50f41586c60a72f7f77f2389141f4.html b/doc/html/dir_7eb50f41586c60a72f7f77f2389141f4.html new file mode 100644 index 0000000..849b418 --- /dev/null +++ b/doc/html/dir_7eb50f41586c60a72f7f77f2389141f4.html @@ -0,0 +1,98 @@ + + + + + + + +SpacImac Runner: src/graphic_engine Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
graphic_engine Directory Reference
+
+
+
+
+ + + + diff --git a/doc/html/dir_bf7c5b58330dcac9ffe5f86279896bbf.html b/doc/html/dir_bf7c5b58330dcac9ffe5f86279896bbf.html new file mode 100644 index 0000000..5153e9e --- /dev/null +++ b/doc/html/dir_bf7c5b58330dcac9ffe5f86279896bbf.html @@ -0,0 +1,98 @@ + + + + + + + +SpacImac Runner: include/motor_game Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
motor_game Directory Reference
+
+
+
+
+ + + + diff --git a/doc/html/dir_bf7c5b58330dcac9ffe5f86279896bbf.js b/doc/html/dir_bf7c5b58330dcac9ffe5f86279896bbf.js new file mode 100644 index 0000000..680024f --- /dev/null +++ b/doc/html/dir_bf7c5b58330dcac9ffe5f86279896bbf.js @@ -0,0 +1,21 @@ +var dir_bf7c5b58330dcac9ffe5f86279896bbf = +[ + [ "Character.hpp", "_character_8hpp_source.html", null ], + [ "Coin.hpp", "_coin_8hpp_source.html", null ], + [ "Element.hpp", "_element_8hpp_source.html", null ], + [ "End.hpp", "_end_8hpp_source.html", null ], + [ "Enemy.hpp", "_enemy_8hpp_source.html", null ], + [ "Floor.hpp", "_floor_8hpp_source.html", null ], + [ "Gap.hpp", "_gap_8hpp_source.html", null ], + [ "Hero.hpp", "_hero_8hpp_source.html", null ], + [ "Map.hpp", "_map_8hpp_source.html", null ], + [ "negative_vector.hpp", "negative__vector_8hpp_source.html", null ], + [ "Obstacle.hpp", "_obstacle_8hpp_source.html", null ], + [ "PPM.hpp", "_p_p_m_8hpp_source.html", null ], + [ "PPMreader.hpp", "_p_p_mreader_8hpp_source.html", null ], + [ "PrintableElement.hpp", "_printable_element_8hpp_source.html", null ], + [ "Scores.hpp", "_scores_8hpp_source.html", null ], + [ "Turn.hpp", "_turn_8hpp_source.html", null ], + [ "User.hpp", "_user_8hpp_source.html", null ], + [ "Wall.hpp", "_wall_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/doc/html/dir_c090bc111ba63ece290431efc801b5da.html b/doc/html/dir_c090bc111ba63ece290431efc801b5da.html new file mode 100644 index 0000000..bdc117e --- /dev/null +++ b/doc/html/dir_c090bc111ba63ece290431efc801b5da.html @@ -0,0 +1,98 @@ + + + + + + + +SpacImac Runner: include/glimac Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glimac Directory Reference
+
+
+
+
+ + + + diff --git a/doc/html/dir_c090bc111ba63ece290431efc801b5da.js b/doc/html/dir_c090bc111ba63ece290431efc801b5da.js new file mode 100644 index 0000000..c269c54 --- /dev/null +++ b/doc/html/dir_c090bc111ba63ece290431efc801b5da.js @@ -0,0 +1,20 @@ +var dir_c090bc111ba63ece290431efc801b5da = +[ + [ "BBox.hpp", "_b_box_8hpp_source.html", null ], + [ "common.hpp", "common_8hpp_source.html", null ], + [ "Cone.hpp", "_cone_8hpp_source.html", null ], + [ "cube.hpp", "cube_8hpp_source.html", null ], + [ "FilePath.hpp", "_file_path_8hpp_source.html", null ], + [ "FreelyCamera.hpp", "_freely_camera_8hpp_source.html", null ], + [ "Geometry.hpp", "_geometry_8hpp_source.html", null ], + [ "glm.hpp", "glm_8hpp_source.html", null ], + [ "Grid.hpp", "_grid_8hpp_source.html", null ], + [ "Image.hpp", "_image_8hpp_source.html", null ], + [ "Landmark.hpp", "_landmark_8hpp_source.html", null ], + [ "Object.hpp", "_object_8hpp_source.html", null ], + [ "Program.hpp", "_program_8hpp_source.html", null ], + [ "SDLWindowManager.hpp", "_s_d_l_window_manager_8hpp_source.html", null ], + [ "Shader.hpp", "_shader_8hpp_source.html", null ], + [ "ShaderL.hpp", "_shader_l_8hpp_source.html", null ], + [ "Sphere.hpp", "_sphere_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html b/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..15f3ac6 --- /dev/null +++ b/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: include Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
include Directory Reference
+
+
+ + +

+Directories

+
+
+ + + + diff --git a/doc/html/dir_d44c64559bbebec7f509842c48db8b23.js b/doc/html/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 0000000..6013c2b --- /dev/null +++ b/doc/html/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,9 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "exception", "dir_6bcdd895099c5baf303d04ab453e583d.html", "dir_6bcdd895099c5baf303d04ab453e583d" ], + [ "glimac", "dir_c090bc111ba63ece290431efc801b5da.html", "dir_c090bc111ba63ece290431efc801b5da" ], + [ "graphic_engine", "dir_f4711ecba55a426d1f4c9adbfa7b7f5d.html", "dir_f4711ecba55a426d1f4c9adbfa7b7f5d" ], + [ "motor_game", "dir_bf7c5b58330dcac9ffe5f86279896bbf.html", "dir_bf7c5b58330dcac9ffe5f86279896bbf" ], + [ "AppManager.hpp", "_app_manager_8hpp_source.html", null ], + [ "Menu.hpp", "_menu_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/doc/html/dir_d772436e439e2266b18fffba2eea5bb5.html b/doc/html/dir_d772436e439e2266b18fffba2eea5bb5.html new file mode 100644 index 0000000..326603d --- /dev/null +++ b/doc/html/dir_d772436e439e2266b18fffba2eea5bb5.html @@ -0,0 +1,98 @@ + + + + + + + +SpacImac Runner: src/motor_game Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
motor_game Directory Reference
+
+
+
+
+ + + + diff --git a/doc/html/dir_f4711ecba55a426d1f4c9adbfa7b7f5d.html b/doc/html/dir_f4711ecba55a426d1f4c9adbfa7b7f5d.html new file mode 100644 index 0000000..87a3804 --- /dev/null +++ b/doc/html/dir_f4711ecba55a426d1f4c9adbfa7b7f5d.html @@ -0,0 +1,98 @@ + + + + + + + +SpacImac Runner: include/graphic_engine Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
graphic_engine Directory Reference
+
+
+
+
+ + + + diff --git a/doc/html/dir_f4711ecba55a426d1f4c9adbfa7b7f5d.js b/doc/html/dir_f4711ecba55a426d1f4c9adbfa7b7f5d.js new file mode 100644 index 0000000..577ad90 --- /dev/null +++ b/doc/html/dir_f4711ecba55a426d1f4c9adbfa7b7f5d.js @@ -0,0 +1,12 @@ +var dir_f4711ecba55a426d1f4c9adbfa7b7f5d = +[ + [ "camera.hpp", "camera_8hpp_source.html", null ], + [ "eyeCamera.hpp", "eye_camera_8hpp_source.html", null ], + [ "Font.hpp", "_font_8hpp_source.html", null ], + [ "lightShader.hpp", "light_shader_8hpp_source.html", null ], + [ "perspectiveShader.hpp", "perspective_shader_8hpp_source.html", null ], + [ "Scene.hpp", "_scene_8hpp_source.html", null ], + [ "Skybox.hpp", "_skybox_8hpp_source.html", null ], + [ "TextureLoader.hpp", "_texture_loader_8hpp_source.html", null ], + [ "TrackballCamera.hpp", "_trackball_camera_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/doc/html/doc.png b/doc/html/doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/doc/html/doc.png differ diff --git a/doc/html/doxygen.css b/doc/html/doxygen.css new file mode 100644 index 0000000..4f1ab91 --- /dev/null +++ b/doc/html/doxygen.css @@ -0,0 +1,1596 @@ +/* The standard CSS for doxygen 1.8.13 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + + +/* @end */ diff --git a/doc/html/doxygen.png b/doc/html/doxygen.png new file mode 100644 index 0000000..3ff17d8 Binary files /dev/null and b/doc/html/doxygen.png differ diff --git a/doc/html/dynsections.js b/doc/html/dynsections.js new file mode 100644 index 0000000..85e1836 --- /dev/null +++ b/doc/html/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +SpacImac Runner: include/graphic_engine/eyeCamera.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
eyeCamera.hpp
+
+
+
1 #pragma once
2 
3 #include <glm/glm.hpp>
4 #include <glm/gtc/random.hpp>
5 #include "camera.hpp"
6 
7 using namespace glimac;
8 
11 class EyeCamera :public Camera
12 {
13 public:
14 
17  m_fDistance(2),m_fAngleX(0),m_fAngleY(0)
18  {}
19 
21  EyeCamera(const float fDistance,const float fAngleX,const float fAngleY)
22  :m_fDistance(fDistance),m_fAngleX(fAngleX),m_fAngleY(fAngleY)
23  {}
24 
26  void onKeyboardEvent(const SDL_Event &event)
27  {
28  if ((event.type == SDL_KEYDOWN) && (event.key.keysym.sym == SDLK_r))
29  {
30  m_fAngleX = 0;
31  m_fAngleY = 0;
32  }
33  }
34 
35 
37  void onMouseWheelEvent(const SDL_Event &e)
38  {
39  if (e.button.button == SDL_BUTTON_WHEELUP)
40  {
41  // Move BACK
42 
43  m_fDistance+=0.1;
44 
45 
46 
47  }
48 
49  if (e.button.button == SDL_BUTTON_WHEELDOWN)
50  {
51  // Move FRONT
52  if (m_fDistance>2)
53  {
54  m_fDistance-=0.1;
55  }
56 
57  }
58  }
59 
61  void onMouseEvent(const SDL_Event &e)
62  {
63  // Rotate UP
64  m_fAngleY += e.motion.yrel;
65  if (m_fAngleY>0)
66  m_fAngleY = 0;
67  if (m_fAngleY<5)
68  m_fAngleY = 5;
69  // Rotate LEFT
70  m_fAngleX += e.motion.xrel;
71  if (m_fAngleX>80)
72  m_fAngleX = 80;
73  if (m_fAngleX<-80)
74  m_fAngleX = -80;
75  }
76 
78  glm::mat4 getViewMatrix() const
79  {
80 
81  glm::mat4 viewMatrix(1.0f);
82 
83  viewMatrix = glm::translate(glm::mat4(1.0),glm::vec3(0,0,m_fDistance));
84  viewMatrix *= glm::rotate(viewMatrix,glm::radians(m_fAngleY),glm::vec3(1.0,0.0,0.0));
85 
86  viewMatrix *= glm::rotate(viewMatrix,glm::radians(m_fAngleX),glm::vec3(0.0,1.0,0.0));
87 
88  return viewMatrix;
89  }
90 
91 
92 
93 
94 
95 
96 private:
97  float m_fDistance;
98  float m_fAngleX;
99  float m_fAngleY;
100 
101 
102 };
Definition: eyeCamera.hpp:11
+
void onMouseWheelEvent(const SDL_Event &e)
method handling SDL mouse wheel event
Definition: eyeCamera.hpp:37
+
EyeCamera()
Default constructor.
Definition: eyeCamera.hpp:16
+
Mother Class Camera.
Definition: camera.hpp:6
+
glm::mat4 getViewMatrix() const
method which return a viewMatrix create with camera set up
Definition: eyeCamera.hpp:78
+
EyeCamera(const float fDistance, const float fAngleX, const float fAngleY)
constructor with parameters
Definition: eyeCamera.hpp:21
+
void onMouseEvent(const SDL_Event &e)
method handling mouse movement event
Definition: eyeCamera.hpp:61
+
void onKeyboardEvent(const SDL_Event &event)
method handling SDL keyboard event
Definition: eyeCamera.hpp:26
+
Definition: BBox.hpp:5
+
+
+ + + + diff --git a/doc/html/files.html b/doc/html/files.html new file mode 100644 index 0000000..60a258d --- /dev/null +++ b/doc/html/files.html @@ -0,0 +1,157 @@ + + + + + + + +SpacImac Runner: File List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  include
  exception
 ExceptIMAC.hpp
  glimac
 BBox.hpp
 common.hpp
 Cone.hpp
 cube.hpp
 FilePath.hpp
 FreelyCamera.hpp
 Geometry.hpp
 glm.hpp
 Grid.hpp
 Image.hpp
 Landmark.hpp
 Object.hpp
 Program.hpp
 SDLWindowManager.hpp
 Shader.hpp
 ShaderL.hpp
 Sphere.hpp
  graphic_engine
 camera.hpp
 eyeCamera.hpp
 Font.hpp
 lightShader.hpp
 perspectiveShader.hpp
 Scene.hpp
 Skybox.hpp
 TextureLoader.hpp
 TrackballCamera.hpp
  motor_game
 Character.hpp
 Coin.hpp
 Element.hpp
 End.hpp
 Enemy.hpp
 Floor.hpp
 Gap.hpp
 Hero.hpp
 Map.hpp
 negative_vector.hpp
 Obstacle.hpp
 PPM.hpp
 PPMreader.hpp
 PrintableElement.hpp
 Scores.hpp
 Turn.hpp
 User.hpp
 Wall.hpp
 AppManager.hpp
 Menu.hpp
  src
  glimac
 stb_image.h
 tiny_obj_loader.h
+
+
+
+ + + + diff --git a/doc/html/files.js b/doc/html/files.js new file mode 100644 index 0000000..a4478b0 --- /dev/null +++ b/doc/html/files.js @@ -0,0 +1,5 @@ +var files = +[ + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], + [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] +]; \ No newline at end of file diff --git a/doc/html/folderclosed.png b/doc/html/folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/doc/html/folderclosed.png differ diff --git a/doc/html/folderopen.png b/doc/html/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/doc/html/folderopen.png differ diff --git a/doc/html/functions.html b/doc/html/functions.html new file mode 100644 index 0000000..713ad10 --- /dev/null +++ b/doc/html/functions.html @@ -0,0 +1,540 @@ + + + + + + + +SpacImac Runner: Class Members + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- k -

    +
  • killHero() +: Enemy +
  • +
+ + +

- l -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

    +
  • value() +: Coin +
  • +
  • visibility() +: Menu +
  • +
  • voManager() +: Skybox +
  • +
+ + +

- w -

    +
  • Wall() +: Wall +
  • +
+ + +

- x -

+ + +

- y -

+ + +

- z -

+ + +

- ~ -

+
+
+ + + + diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html new file mode 100644 index 0000000..f68e0cf --- /dev/null +++ b/doc/html/functions_func.html @@ -0,0 +1,531 @@ + + + + + + + +SpacImac Runner: Class Members - Functions + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- k -

    +
  • killHero() +: Enemy +
  • +
+ + +

- l -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

    +
  • value() +: Coin +
  • +
  • visibility() +: Menu +
  • +
  • voManager() +: Skybox +
  • +
+ + +

- w -

    +
  • Wall() +: Wall +
  • +
+ + +

- x -

+ + +

- y -

+ + +

- z -

+ + +

- ~ -

+
+
+ + + + diff --git a/doc/html/functions_rela.html b/doc/html/functions_rela.html new file mode 100644 index 0000000..23ed9e8 --- /dev/null +++ b/doc/html/functions_rela.html @@ -0,0 +1,98 @@ + + + + + + + +SpacImac Runner: Class Members - Related Functions + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
+ + + + diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html new file mode 100644 index 0000000..189142c --- /dev/null +++ b/doc/html/functions_vars.html @@ -0,0 +1,101 @@ + + + + + + + +SpacImac Runner: Class Members - Variables + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
+ + + + diff --git a/doc/html/glm_8hpp_source.html b/doc/html/glm_8hpp_source.html new file mode 100644 index 0000000..99dd9bd --- /dev/null +++ b/doc/html/glm_8hpp_source.html @@ -0,0 +1,98 @@ + + + + + + + +SpacImac Runner: include/glimac/glm.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
glm.hpp
+
+
+
1 #pragma once
2 
3 #define GLM_FORCE_RADIANS
4 #include <glm/glm.hpp>
5 #include <glm/gtc/matrix_transform.hpp>
6 #include <glm/gtc/type_ptr.hpp>
7 #include <glm/gtc/constants.hpp>
8 #include <glm/gtx/io.hpp>
9 #include <glm/gtc/random.hpp>
10 #include <glm/gtc/random.hpp>
+
+ + + + diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html new file mode 100644 index 0000000..5722d70 --- /dev/null +++ b/doc/html/hierarchy.html @@ -0,0 +1,164 @@ + + + + + + + +SpacImac Runner: Class Hierarchy + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+ +
+ + + + diff --git a/doc/html/hierarchy.js b/doc/html/hierarchy.js new file mode 100644 index 0000000..def8866 --- /dev/null +++ b/doc/html/hierarchy.js @@ -0,0 +1,74 @@ +var hierarchy = +[ + [ "AppManager", "class_app_manager.html", null ], + [ "glimac::BBox3f", "structglimac_1_1_b_box3f.html", null ], + [ "Camera", "class_camera.html", [ + [ "EyeCamera", "class_eye_camera.html", null ], + [ "TrackballCamera", "class_trackball_camera.html", null ] + ] ], + [ "constructor", "classconstructor.html", null ], + [ "exception", null, [ + [ "cpp_IMAC::ExceptIMAC", "classcpp___i_m_a_c_1_1_except_i_m_a_c.html", null ] + ] ], + [ "glimac::FilePath", "classglimac_1_1_file_path.html", null ], + [ "floor", "classfloor.html", null ], + [ "Font", "class_font.html", null ], + [ "glimac::FreelyCamera", "classglimac_1_1_freely_camera.html", null ], + [ "glimac::Geometry", "classglimac_1_1_geometry.html", null ], + [ "std::hash< glimac::FilePath >", "structstd_1_1hash_3_01glimac_1_1_file_path_01_4.html", null ], + [ "glimac::Image", "classglimac_1_1_image.html", null ], + [ "glimac::ImageManager", "classglimac_1_1_image_manager.html", null ], + [ "LightShader", "class_light_shader.html", null ], + [ "motor_game::Map", "classmotor__game_1_1_map.html", null ], + [ "glimac::Geometry::Material", "structglimac_1_1_geometry_1_1_material.html", null ], + [ "tinyobj::material_t", "structtinyobj_1_1material__t.html", null ], + [ "tinyobj::MaterialReader", "classtinyobj_1_1_material_reader.html", [ + [ "tinyobj::MaterialFileReader", "classtinyobj_1_1_material_file_reader.html", null ] + ] ], + [ "Menu", "class_menu.html", null ], + [ "glimac::Geometry::Mesh", "structglimac_1_1_geometry_1_1_mesh.html", null ], + [ "tinyobj::mesh_t", "structtinyobj_1_1mesh__t.html", null ], + [ "negative_vector< T >", "classnegative__vector.html", null ], + [ "negative_vector< Element *>", "classnegative__vector.html", null ], + [ "tinyobj::obj_shape", "structtinyobj_1_1obj__shape.html", null ], + [ "glimac::Object", "classglimac_1_1_object.html", [ + [ "glimac::Cone", "classglimac_1_1_cone.html", null ], + [ "glimac::Cube", "classglimac_1_1_cube.html", null ], + [ "glimac::Grid", "classglimac_1_1_grid.html", null ], + [ "glimac::Landmark", "classglimac_1_1_landmark.html", null ], + [ "glimac::Sphere", "classglimac_1_1_sphere.html", null ] + ] ], + [ "PerspectiveShader", "class_perspective_shader.html", null ], + [ "motor_game::PPM", "classmotor__game_1_1_p_p_m.html", null ], + [ "motor_game::PPMreader", "classmotor__game_1_1_p_p_mreader.html", null ], + [ "PrintableElement", "class_printable_element.html", [ + [ "Character", "class_character.html", [ + [ "Enemy", "class_enemy.html", null ], + [ "Hero", "class_hero.html", null ] + ] ], + [ "Element", "class_element.html", [ + [ "Coin", "class_coin.html", null ], + [ "Floor", "class_floor.html", [ + [ "motor_game::Turn", "classmotor__game_1_1_turn.html", null ] + ] ], + [ "motor_game::End", "classmotor__game_1_1_end.html", null ], + [ "motor_game::Gap", "classmotor__game_1_1_gap.html", null ], + [ "Obstacle", "class_obstacle.html", null ], + [ "Wall", "class_wall.html", null ] + ] ] + ] ], + [ "glimac::Program", "classglimac_1_1_program.html", null ], + [ "Scene", "class_scene.html", null ], + [ "motor_game::Scores", "classmotor__game_1_1_scores.html", null ], + [ "glimac::SDLWindowManager", "classglimac_1_1_s_d_l_window_manager.html", null ], + [ "glimac::Shader", "classglimac_1_1_shader.html", null ], + [ "ShaderL", "class_shader_l.html", null ], + [ "tinyobj::shape_t", "structtinyobj_1_1shape__t.html", null ], + [ "glimac::ShapeVertex", "structglimac_1_1_shape_vertex.html", null ], + [ "Skybox", "class_skybox.html", null ], + [ "stbi_io_callbacks", "structstbi__io__callbacks.html", null ], + [ "TextureLoader", "class_texture_loader.html", null ], + [ "User", "class_user.html", null ], + [ "glimac::Geometry::Vertex", "structglimac_1_1_geometry_1_1_vertex.html", null ], + [ "tinyobj::vertex_index", "structtinyobj_1_1vertex__index.html", null ] +]; \ No newline at end of file diff --git a/doc/html/index.html b/doc/html/index.html new file mode 100644 index 0000000..cb77a8f --- /dev/null +++ b/doc/html/index.html @@ -0,0 +1,97 @@ + + + + + + + +SpacImac Runner: Main Page + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SpacImac Runner +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SpacImac Runner Documentation
+
+
+
+
+ + + + diff --git a/doc/html/jquery.js b/doc/html/jquery.js new file mode 100644 index 0000000..f5343ed --- /dev/null +++ b/doc/html/jquery.js @@ -0,0 +1,87 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + +
+
+
lightShader.hpp
+
+
+
1 #pragma once
2 
3 #include <glimac/common.hpp>
4 #include <glimac/FilePath.hpp>
5 #include <glimac/Program.hpp>
6 #include <memory>
7 
9 {
10 public:
11 
13 
15  const char* filepathFragmentShader = "./shaders/directionallight.fs.glsl");
16 
18  const char* filepathVertexShader,
19  const char* filepathFragmentShader
20  );
21 
24 
26  void setUniformMatrix() const;
27  void setUniformMatrix2() const;
28 
30  void setViewMatrix(const glm::mat4 &sceneModel,const glm::mat4 &projection);
31 
33  void use();
34 
35 private:
36 
37  glimac::Program m_program;
38 
39  const char* m_filepathVertexShader;
40  const char* m_filepathFragmentShader;
41 
42  glm::mat4 m_modelviewMatrix;
43  glm::mat4 m_modelprojMatrix;
44 
45  const char* uniformMVPName = "uMVPMatrix";
46  const char* uniformMVName = "uMVMatrix";
47  const char* uniformNormName = "uNormalMatrix";
48 
49  GLuint m_uniformModelViewMatrix;
50  GLuint m_uniformNormalMatrix;
51  GLuint m_uniformModelViewProjectionMatrix;
52 
53  GLuint m_uniformColor;
54  GLuint m_uniformKd;
55  GLuint m_uniformKs;
56  GLuint m_uniformShininess;
57  GLuint m_uniformLightDir_vs;
58  GLuint m_uniformLightIntensity;
59 
60 };
void setUniformMatrix() const
method which set uniform Matrix for the shaders
Definition: lightShader.cpp:64
+
LightShader(const char *filepathFragmentShader="./shaders/directionallight.fs.glsl")
constructor with parameters
Definition: lightShader.cpp:8
+
~LightShader()
destructor
Definition: lightShader.hpp:23
+
Definition: lightShader.hpp:8
+
void use()
method which launch the shader programm
Definition: lightShader.cpp:52
+
void setViewMatrix(const glm::mat4 &sceneModel, const glm::mat4 &projection)
method which set projection and view matrix
Definition: lightShader.cpp:57
+
Definition: Program.hpp:9
+
+ + + + + diff --git a/doc/html/md__r_e_a_d_m_e.html b/doc/html/md__r_e_a_d_m_e.html new file mode 100644 index 0000000..6cc7a2e --- /dev/null +++ b/doc/html/md__r_e_a_d_m_e.html @@ -0,0 +1,98 @@ + + + + + + + +SpacImac Runner: GL_runner + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
SpacImac Runner +
+
+ + + + + + + + + +
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
GL_runner
+
+
+

OpenGL project - IMAC-2

+
+
+ + + + diff --git a/doc/html/menu.js b/doc/html/menu.js new file mode 100644 index 0000000..97db4c2 --- /dev/null +++ b/doc/html/menu.js @@ -0,0 +1,26 @@ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} diff --git a/doc/html/menudata.js b/doc/html/menudata.js new file mode 100644 index 0000000..4e65204 --- /dev/null +++ b/doc/html/menudata.js @@ -0,0 +1,58 @@ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, +{text:"k",url:"functions.html#index_k"}, +{text:"l",url:"functions.html#index_l"}, +{text:"m",url:"functions.html#index_m"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"v",url:"functions.html#index_v"}, +{text:"w",url:"functions.html#index_w"}, +{text:"x",url:"functions.html#index_x"}, +{text:"y",url:"functions.html#index_y"}, +{text:"z",url:"functions.html#index_z"}, +{text:"~",url:"functions.html#index_0x7e"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"h",url:"functions_func.html#index_h"}, +{text:"k",url:"functions_func.html#index_k"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}, +{text:"v",url:"functions_func.html#index_v"}, +{text:"w",url:"functions_func.html#index_w"}, +{text:"x",url:"functions_func.html#index_x"}, +{text:"y",url:"functions_func.html#index_y"}, +{text:"z",url:"functions_func.html#index_z"}, +{text:"~",url:"functions_func.html#index_0x7e"}]}, +{text:"Variables",url:"functions_vars.html"}, +{text:"Related Functions",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/doc/html/nav_f.png b/doc/html/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/doc/html/nav_f.png differ diff --git a/doc/html/nav_g.png b/doc/html/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/doc/html/nav_g.png differ diff --git a/doc/html/nav_h.png b/doc/html/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/doc/html/nav_h.png differ diff --git a/doc/html/navtree.css b/doc/html/navtree.css new file mode 100644 index 0000000..0cc7e77 --- /dev/null +++ b/doc/html/navtree.css @@ -0,0 +1,146 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; + outline:none; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:#fff; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + background-color: #FAFAFF; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: 250px; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url("splitbar.png"); + background-size:100%; + background-repeat:no-repeat; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/doc/html/navtree.js b/doc/html/navtree.js new file mode 100644 index 0000000..e6d31b0 --- /dev/null +++ b/doc/html/navtree.js @@ -0,0 +1,517 @@ +var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + if ($.browser.msie && $.browser.version<=8) { + // script.onload does not work with older versions of IE + script.onreadystatechange = function() { + if (script.readyState=='complete' || script.readyState=='loaded') { + func(); if (show) showRoot(); + } + } + } + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',0,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } if (imm || ($.browser.msie && $.browser.version>8)) { + // somehow slideDown jumps to the start of tree for IE9 :-( + $(node.getChildrenUL()).show(); + } else { + $(node.getChildrenUL()).slideDown("fast"); + } + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + gotoAnchor(anchor,aname,false); +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + $('#nav-sync').css('top','30px'); + } else { + $('#nav-sync').css('top','5px'); + } + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + $(window).load(function(){ + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + }); + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + +SpacImac Runner: include/motor_game/negative_vector.hpp Source File + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    negative_vector.hpp
    +
    +
    +
    1 template<class T>
    2 
    4 {
    5 
    6 public:
    7 
    8  negative_vector(int min, int max)
    9  : _zero_index(min)
    10  , _storage((max - min))
    11  {
    12  // assert min - max
    13  }
    14 
    15  T& operator[](int index)
    16  {
    17  assert(index >= lower_limit());
    18  assert(index <= upper_limit());
    19  return _storage[index - _zero_index];
    20  }
    21 
    22  T operator[](int index) const
    23  {
    24  assert(index >= lower_limit());
    25  assert(index <= upper_limit());
    26  return _storage[index - _zero_index];
    27  }
    28 
    29  int upper_limit() const {
    30  return _zero_index + int(_storage.size());
    31  }
    32 
    33  int lower_limit() const {
    34  return _zero_index;
    35  }
    36 
    37  unsigned int size() const {
    38  return upper_limit() - lower_limit();
    39  }
    40 
    41 private:
    42 
    43  int _zero_index = 0;
    44  std::vector<T> _storage {};
    45 };
    Definition: negative_vector.hpp:3
    +
    +
    + + + + diff --git a/doc/html/open.png b/doc/html/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/doc/html/open.png differ diff --git a/doc/html/pages.html b/doc/html/pages.html new file mode 100644 index 0000000..d4dc734 --- /dev/null +++ b/doc/html/pages.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: Related Pages + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    + + +
     GL_runner
    +
    +
    +
    + + + + diff --git a/doc/html/perspective_shader_8hpp_source.html b/doc/html/perspective_shader_8hpp_source.html new file mode 100644 index 0000000..50a5fcb --- /dev/null +++ b/doc/html/perspective_shader_8hpp_source.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: include/graphic_engine/perspectiveShader.hpp Source File + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    perspectiveShader.hpp
    +
    +
    +
    1 #pragma once
    2 
    3 #include <glimac/common.hpp>
    4 #include <glimac/FilePath.hpp>
    5 #include <glimac/Program.hpp>
    6 #include <memory>
    7 
    10 {
    11 public:
    12 
    15  const char* filepathFragmentShader = "./shaders/normals.fs.glsl");
    16 
    19  const char* filepathVertexShader,
    20  const char* filepathFragmentShader
    21  );
    22 
    25 
    27  void setUniformMatrix() const;
    28  void setUniformMatrix2() const;
    29 
    31  void setViewMatrix(const glm::mat4 &sceneModel,const glm::mat4 &projection);
    32 
    33 
    35  void use();
    36 
    37 private:
    38 
    39  glimac::Program m_program;
    40 
    41  const char* m_filepathFragmentShader;
    42  const char* m_filepathVertexShader;
    43 
    44  glm::mat4 m_modelviewMatrix;
    45  glm::mat4 m_modelprojMatrix;
    46 
    47  const char* uniformMVPName = "uMVPMatrix";
    48  const char* uniformMVName = "uMVMatrix";
    49  const char* uniformNormName = "uNormalMatrix";
    50 
    51  GLuint m_uniformModelViewMatrix;
    52  GLuint m_uniformNormalMatrix;
    53  GLuint m_uniformModelViewProjectionMatrix;
    54  GLuint m_uniformModelTexture;
    55 
    56 };
    void setViewMatrix(const glm::mat4 &sceneModel, const glm::mat4 &projection)
    method which set projection and view matrix
    Definition: perspectiveShader.cpp:45
    +
    PerspectiveShader(const char *filepathFragmentShader="./shaders/normals.fs.glsl")
    constructor
    Definition: perspectiveShader.cpp:7
    +
    void setUniformMatrix() const
    method which set uniform matrix for the shader
    Definition: perspectiveShader.cpp:52
    +
    Shader program class.
    Definition: perspectiveShader.hpp:9
    +
    void use()
    method which launch the shader program
    Definition: perspectiveShader.cpp:41
    +
    Definition: Program.hpp:9
    +
    ~PerspectiveShader()
    destructor by default
    Definition: perspectiveShader.hpp:24
    +
    +
    + + + + diff --git a/doc/html/resize.js b/doc/html/resize.js new file mode 100644 index 0000000..56e4a02 --- /dev/null +++ b/doc/html/resize.js @@ -0,0 +1,114 @@ +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; + + function readCookie(cookie) + { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + return 0; + } + + function writeCookie(cookie, val, expiration) + { + if (val==undefined) return; + if (expiration == null) { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + } + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + writeCookie('width',sidenavWidth-barWidth, null); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + content.css({height:windowHeight + "px"}); + navtree.css({height:windowHeight + "px"}); + sidenav.css({height:windowHeight + "px"}); + var width=$(window).width(); + if (width!=collapsedWidth) { + if (width=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth0) { + restoreWidth(0); + collapsed=true; + } + else { + var width = readCookie('width'); + if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } + collapsed=false; + } + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readCookie('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).load(resizeHeight); +} + + diff --git a/doc/html/search/all_0.html b/doc/html/search/all_0.html new file mode 100644 index 0000000..f25360b --- /dev/null +++ b/doc/html/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_0.js b/doc/html/search/all_0.js new file mode 100644 index 0000000..db06e63 --- /dev/null +++ b/doc/html/search/all_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['add',['add',['../classmotor__game_1_1_scores.html#a1249df9a55bafba7d4d7e18ac3428389',1,'motor_game::Scores']]], + ['addext',['addExt',['../classglimac_1_1_file_path.html#a4167275bb9a0239906a089a0c682ff37',1,'glimac::FilePath']]], + ['appmanager',['AppManager',['../class_app_manager.html',1,'AppManager'],['../class_app_manager.html#a6221fc1ede71f2ac539c052bbe0c7f6a',1,'AppManager::AppManager()']]] +]; diff --git a/doc/html/search/all_1.html b/doc/html/search/all_1.html new file mode 100644 index 0000000..b13f0f7 --- /dev/null +++ b/doc/html/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_1.js b/doc/html/search/all_1.js new file mode 100644 index 0000000..1469eab --- /dev/null +++ b/doc/html/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bbox3f',['BBox3f',['../structglimac_1_1_b_box3f.html',1,'glimac']]] +]; diff --git a/doc/html/search/all_10.html b/doc/html/search/all_10.html new file mode 100644 index 0000000..d1345a1 --- /dev/null +++ b/doc/html/search/all_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_10.js b/doc/html/search/all_10.js new file mode 100644 index 0000000..7f3db12 --- /dev/null +++ b/doc/html/search/all_10.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['save',['save',['../classmotor__game_1_1_scores.html#ab6b74ef72ee79255c34ce29b369ea1fe',1,'motor_game::Scores']]], + ['scanarray',['scanArray',['../class_hero.html#ac71f8fd8a5c7d8f379935f17dd0dddc6',1,'Hero']]], + ['scene',['Scene',['../class_scene.html',1,'Scene'],['../class_scene.html#ad10176d75a9cc0da56626f682d083507',1,'Scene::Scene()'],['../class_scene.html#a8ee4eae847565a51acd3babef70ee0f5',1,'Scene::Scene(std::vector< std::unique_ptr< glimac::Object >> inDataObject, std::shared_ptr< Camera > inCamera)']]], + ['scores',['Scores',['../classmotor__game_1_1_scores.html',1,'motor_game::Scores'],['../classmotor__game_1_1_scores.html#a421ac4c4e3ce925c080880f600bf3ca2',1,'motor_game::Scores::Scores()']]], + ['sdlwindowmanager',['SDLWindowManager',['../classglimac_1_1_s_d_l_window_manager.html',1,'glimac']]], + ['setfontpath',['setFontPath',['../class_font.html#acf2f4b0d42fc1fb6e5d2ce6c7e9c7595',1,'Font']]], + ['setname',['setName',['../class_user.html#ab3e689190e12adcd8dfc04b489477503',1,'User']]], + ['setposition',['setPosition',['../class_printable_element.html#a3093aa30346e047f45dce13773964924',1,'PrintableElement']]], + ['setscore',['setScore',['../class_hero.html#a5187f68140a9fb4b7a7c587d6d7ddfaa',1,'Hero']]], + ['setuniformmatrix',['setUniformMatrix',['../class_light_shader.html#af168132426e69ab8b655aee4bbab1306',1,'LightShader::setUniformMatrix()'],['../class_perspective_shader.html#a0346f2a0bd8e5cf11c3d1014a9953fb1',1,'PerspectiveShader::setUniformMatrix()']]], + ['setviewmatrix',['setViewMatrix',['../class_light_shader.html#a395d77db8bacc40f93795d8199206529',1,'LightShader::setViewMatrix()'],['../class_perspective_shader.html#a269202bb545bd5a302facacefa81533a',1,'PerspectiveShader::setViewMatrix()']]], + ['setvisibility',['setVisibility',['../class_menu.html#adb992afd36cedc22387287612deb67d2',1,'Menu']]], + ['shader',['Shader',['../classglimac_1_1_shader.html',1,'glimac']]], + ['shaderl',['ShaderL',['../class_shader_l.html',1,'']]], + ['shape_5ft',['shape_t',['../structtinyobj_1_1shape__t.html',1,'tinyobj']]], + ['shapevertex',['ShapeVertex',['../structglimac_1_1_shape_vertex.html',1,'glimac']]], + ['skybox',['Skybox',['../class_skybox.html',1,'Skybox'],['../class_skybox.html#a77a92db4492ed94ed4bd101b05ffb1f4',1,'Skybox::Skybox()']]], + ['sphere',['Sphere',['../classglimac_1_1_sphere.html',1,'glimac']]], + ['start',['start',['../class_app_manager.html#a3326c2410ec8a898f828e8051c414e96',1,'AppManager']]], + ['stbi_5fio_5fcallbacks',['stbi_io_callbacks',['../structstbi__io__callbacks.html',1,'']]] +]; diff --git a/doc/html/search/all_11.html b/doc/html/search/all_11.html new file mode 100644 index 0000000..2be8b71 --- /dev/null +++ b/doc/html/search/all_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_11.js b/doc/html/search/all_11.js new file mode 100644 index 0000000..24cd608 --- /dev/null +++ b/doc/html/search/all_11.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['textureloader',['TextureLoader',['../class_texture_loader.html',1,'']]], + ['trackballcamera',['TrackballCamera',['../class_trackball_camera.html',1,'TrackballCamera'],['../class_trackball_camera.html#afea99c1d5361fe703637681af59b809d',1,'TrackballCamera::TrackballCamera()'],['../class_trackball_camera.html#ae2b97339a12d299c25afd870d36aa9e9',1,'TrackballCamera::TrackballCamera(const float fDistance, const float fAngleX, const float fAngleY)']]], + ['turn',['Turn',['../classmotor__game_1_1_turn.html',1,'motor_game']]], + ['type',['type',['../class_menu.html#add933febc8aed23d371c35c4c313ba11',1,'Menu::type() const'],['../class_menu.html#a6968b61f3d2452c03b3b21977e0b2ada',1,'Menu::type(const int inType)']]] +]; diff --git a/doc/html/search/all_12.html b/doc/html/search/all_12.html new file mode 100644 index 0000000..13c5263 --- /dev/null +++ b/doc/html/search/all_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_12.js b/doc/html/search/all_12.js new file mode 100644 index 0000000..1b70971 --- /dev/null +++ b/doc/html/search/all_12.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['up',['up',['../class_character.html#aa8a72c17bc8e2a3e50b2b37a25e50931',1,'Character']]], + ['use',['use',['../class_light_shader.html#a9e08233bd63ae209f4e23a8c5e7625af',1,'LightShader::use()'],['../class_perspective_shader.html#a16f12cd5ff654fdcaa6af12431c7d9c5',1,'PerspectiveShader::use()']]], + ['user',['User',['../class_user.html',1,'User'],['../class_user.html#a7561ff813cce8c5c23b02a50e6858c48',1,'User::User()']]] +]; diff --git a/doc/html/search/all_13.html b/doc/html/search/all_13.html new file mode 100644 index 0000000..b4a8bca --- /dev/null +++ b/doc/html/search/all_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_13.js b/doc/html/search/all_13.js new file mode 100644 index 0000000..934a88a --- /dev/null +++ b/doc/html/search/all_13.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['value',['value',['../class_coin.html#a16cf116e47f3fddb7722dbc8b20ea2a8',1,'Coin']]], + ['vertex',['Vertex',['../structglimac_1_1_geometry_1_1_vertex.html',1,'glimac::Geometry']]], + ['vertex_5findex',['vertex_index',['../structtinyobj_1_1vertex__index.html',1,'tinyobj']]], + ['visibility',['visibility',['../class_menu.html#af36ca6af3edba3abd08c30bcb35a2390',1,'Menu']]], + ['vomanager',['voManager',['../class_skybox.html#a033ca8b4cc7350d2deac064d71f2a992',1,'Skybox']]] +]; diff --git a/doc/html/search/all_14.html b/doc/html/search/all_14.html new file mode 100644 index 0000000..fb4d0ec --- /dev/null +++ b/doc/html/search/all_14.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_14.js b/doc/html/search/all_14.js new file mode 100644 index 0000000..8323422 --- /dev/null +++ b/doc/html/search/all_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['wall',['Wall',['../class_wall.html',1,'Wall'],['../class_wall.html#a12dc41bc7bc045c55ec1034a43e52043',1,'Wall::Wall()'],['../class_wall.html#acc7359263516ec879eda54d995ff2495',1,'Wall::Wall(const glm::vec3 &position, const std::string &type="Wall")']]] +]; diff --git a/doc/html/search/all_15.html b/doc/html/search/all_15.html new file mode 100644 index 0000000..8afe9a0 --- /dev/null +++ b/doc/html/search/all_15.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_15.js b/doc/html/search/all_15.js new file mode 100644 index 0000000..0d76b3d --- /dev/null +++ b/doc/html/search/all_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x',['x',['../classmotor__game_1_1_map.html#a54246d79679ea844b79850ae4ebfc408',1,'motor_game::Map::x()'],['../classmotor__game_1_1_p_p_m.html#a246d40f59fa94e0539db3e32a547032e',1,'motor_game::PPM::x()']]] +]; diff --git a/doc/html/search/all_16.html b/doc/html/search/all_16.html new file mode 100644 index 0000000..e511edb --- /dev/null +++ b/doc/html/search/all_16.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_16.js b/doc/html/search/all_16.js new file mode 100644 index 0000000..2bab0ba --- /dev/null +++ b/doc/html/search/all_16.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['y',['y',['../classmotor__game_1_1_map.html#a8cfa4c508de73e0745419dade928afbd',1,'motor_game::Map::y()'],['../classmotor__game_1_1_p_p_m.html#abd8ad5c69e31375d6d92f463e0cd0432',1,'motor_game::PPM::y()']]] +]; diff --git a/doc/html/search/all_17.html b/doc/html/search/all_17.html new file mode 100644 index 0000000..5ca9efd --- /dev/null +++ b/doc/html/search/all_17.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_17.js b/doc/html/search/all_17.js new file mode 100644 index 0000000..637684d --- /dev/null +++ b/doc/html/search/all_17.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['z',['z',['../classmotor__game_1_1_map.html#a13a7647049f9c2601405ea5507d49dab',1,'motor_game::Map::z()'],['../classmotor__game_1_1_p_p_m.html#aec9a7617bf48bae80ef810f3219f4257',1,'motor_game::PPM::z()']]] +]; diff --git a/doc/html/search/all_18.html b/doc/html/search/all_18.html new file mode 100644 index 0000000..069edeb --- /dev/null +++ b/doc/html/search/all_18.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_18.js b/doc/html/search/all_18.js new file mode 100644 index 0000000..ef1335b --- /dev/null +++ b/doc/html/search/all_18.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['_7echaracter',['~Character',['../class_character.html#a9e9be564d05ded80962b2045aa70b3fc',1,'Character']]], + ['_7ecoin',['~Coin',['../class_coin.html#ad0371a6d98c194a0f6de615206829b16',1,'Coin']]], + ['_7eelement',['~Element',['../class_element.html#a13d54ba9c08b6bec651402f1c2bb002c',1,'Element']]], + ['_7eend',['~End',['../classmotor__game_1_1_end.html#a035119e2aa5a0aa2555c432071569f81',1,'motor_game::End']]], + ['_7eenemy',['~Enemy',['../class_enemy.html#ac0eec4755e28c02688065f9657150ac3',1,'Enemy']]], + ['_7efloor',['~Floor',['../class_floor.html#ae1b805579f18a76fe2754a3601202e80',1,'Floor']]], + ['_7efont',['~Font',['../class_font.html#a134aaa2f78af0c12d3ce504957169768',1,'Font']]], + ['_7egap',['~Gap',['../classmotor__game_1_1_gap.html#a9c3cbd0654d63a2e5cd7dc74f5bf26ee',1,'motor_game::Gap']]], + ['_7ehero',['~Hero',['../class_hero.html#a5aeef41ede5a80dc29c5acd7b553c4da',1,'Hero']]], + ['_7elightshader',['~LightShader',['../class_light_shader.html#ac70ce3be8cce126572c222d847fadffb',1,'LightShader']]], + ['_7eobstacle',['~Obstacle',['../class_obstacle.html#af2f9cc9c6cff75dca0974fd5ac4f71a9',1,'Obstacle']]], + ['_7eperspectiveshader',['~PerspectiveShader',['../class_perspective_shader.html#aebe00cbf8b336b1d829d004af1aa52ba',1,'PerspectiveShader']]], + ['_7eppmreader',['~PPMreader',['../classmotor__game_1_1_p_p_mreader.html#acd5707bacd9773470a16879091e46a03',1,'motor_game::PPMreader']]], + ['_7eprintableelement',['~PrintableElement',['../class_printable_element.html#a789a5e025057f55baf234f7defa0acd4',1,'PrintableElement']]], + ['_7escene',['~Scene',['../class_scene.html#a3b8cec2e32546713915f8c6303c951f1',1,'Scene']]], + ['_7eturn',['~Turn',['../classmotor__game_1_1_turn.html#a0c62ed05153bc97e42349ac62e40cbb2',1,'motor_game::Turn']]], + ['_7euser',['~User',['../class_user.html#ac00b72ad64eb4149f7b21b9f5468c2b2',1,'User']]], + ['_7ewall',['~Wall',['../class_wall.html#a9a2992f2b533e1c160513d1e719f920c',1,'Wall']]] +]; diff --git a/doc/html/search/all_2.html b/doc/html/search/all_2.html new file mode 100644 index 0000000..9543c57 --- /dev/null +++ b/doc/html/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_2.js b/doc/html/search/all_2.js new file mode 100644 index 0000000..5ad6c60 --- /dev/null +++ b/doc/html/search/all_2.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['camera',['Camera',['../class_camera.html',1,'']]], + ['character',['Character',['../class_character.html',1,'Character'],['../class_character.html#adc27bdd255876169bad2ed0bae0cffb5',1,'Character::Character()'],['../class_character.html#a77e33a11f703b3eebb8af8699dfc5785',1,'Character::Character(const glm::vec3 &position, const float &speed, const std::string &type)']]], + ['checkcollision',['checkCollision',['../class_character.html#af39a1917fe85e9b89455cd4bc85b8ad7',1,'Character::checkCollision()'],['../class_hero.html#a1038af0dc35a7ba289aaead4ada14f16',1,'Hero::checkCollision()']]], + ['clear',['clear',['../classmotor__game_1_1_scores.html#ac1e3b3c41390ef0a116b22383a928ab0',1,'motor_game::Scores']]], + ['coin',['Coin',['../class_coin.html',1,'Coin'],['../class_coin.html#a94b2130e2d3ac956ba47271ad81c64f5',1,'Coin::Coin()'],['../class_coin.html#ab7ffaedf9c89eceb543f279a7d1475ce',1,'Coin::Coin(const glm::vec3 &position, const unsigned int &value, const std::string &type="Coin")']]], + ['collide',['collide',['../class_coin.html#a933e7c8b20c0b79b2f859df992dc8bd6',1,'Coin::collide()'],['../class_element.html#aec262d765312fa14a594695b7e1e2428',1,'Element::collide()'],['../classmotor__game_1_1_end.html#a00cb596263c2b5f32f233627397f59cf',1,'motor_game::End::collide()'],['../class_enemy.html#a7177e12100c06efc3eda1d3e814dc785',1,'Enemy::collide()'],['../classmotor__game_1_1_gap.html#adba24184c21dbcc68a5fca4240bef4ee',1,'motor_game::Gap::collide()'],['../class_obstacle.html#a14b335c8afe547478979bb35730edca0',1,'Obstacle::collide()'],['../classmotor__game_1_1_turn.html#a81615aa974278de34dfe8ac09755aebd',1,'motor_game::Turn::collide()'],['../class_wall.html#a555ecdfdd8bffd5885fade247cfda47f',1,'Wall::collide()']]], + ['collision',['collision',['../class_element.html#abe9303d83544623d814c9291c0eeee72',1,'Element']]], + ['cone',['Cone',['../classglimac_1_1_cone.html',1,'glimac']]], + ['constructor',['constructor',['../classconstructor.html',1,'']]], + ['createtexture',['createTexture',['../class_skybox.html#aa40c6b9153f496f2f46bd7a895d42f24',1,'Skybox::createTexture()'],['../class_skybox.html#a28d12c313aa37f558f816cd2449edc98',1,'Skybox::createTexture(std::vector< const char *> faces)']]], + ['cube',['Cube',['../classglimac_1_1_cube.html',1,'glimac']]] +]; diff --git a/doc/html/search/all_3.html b/doc/html/search/all_3.html new file mode 100644 index 0000000..03405c0 --- /dev/null +++ b/doc/html/search/all_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_3.js b/doc/html/search/all_3.js new file mode 100644 index 0000000..c310d0f --- /dev/null +++ b/doc/html/search/all_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['description',['description',['../class_printable_element.html#a749e7f0aafe45e0901f399524175eeee',1,'PrintableElement']]], + ['dimensions',['dimensions',['../classmotor__game_1_1_p_p_m.html#aba8267dfc79fd7d7a226d138987cbca1',1,'motor_game::PPM']]], + ['dirpath',['dirPath',['../classglimac_1_1_file_path.html#a75d8d5573b69d79dd745513ddd4b158f',1,'glimac::FilePath']]], + ['down',['down',['../class_character.html#aef04abffec842976df3313e01673251b',1,'Character']]] +]; diff --git a/doc/html/search/all_4.html b/doc/html/search/all_4.html new file mode 100644 index 0000000..8e1f4b9 --- /dev/null +++ b/doc/html/search/all_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_4.js b/doc/html/search/all_4.js new file mode 100644 index 0000000..365b3b4 --- /dev/null +++ b/doc/html/search/all_4.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['element',['Element',['../class_element.html',1,'Element'],['../class_element.html#ab0d0e20be9a36ae676202db753faeec9',1,'Element::Element()'],['../class_element.html#a47e87e435ffe285ca18013d452c12a3e',1,'Element::Element(const glm::vec3 &position, const std::string &type)'],['../classmotor__game_1_1_map.html#ac6215c73a63a69e10aaa27402ff4ece9',1,'motor_game::Map::element(const int &x, const int &y, const int &z) const'],['../classmotor__game_1_1_map.html#ad6831a7d6811d54a191074f2f124fb36',1,'motor_game::Map::element(const int &x, const int &y, const int &z, Element *element)']]], + ['end',['End',['../classmotor__game_1_1_end.html',1,'motor_game::End'],['../classmotor__game_1_1_end.html#adeda88d8296bb099751e851fa857438d',1,'motor_game::End::End()=default'],['../classmotor__game_1_1_end.html#a226a9e7c4f91aecc44692acfa93672a9',1,'motor_game::End::End(const glm::vec3 &position, const std::string &type="End")']]], + ['enemy',['Enemy',['../class_enemy.html',1,'Enemy'],['../class_enemy.html#a94f30d348b6d2840fd71675472ba38dd',1,'Enemy::Enemy()'],['../class_enemy.html#aebe5967b163d286b97304d7f3e659e7e',1,'Enemy::Enemy(const glm::vec3 &position, const float &speed, const std::string &type="Enemy")'],['../classmotor__game_1_1_p_p_m.html#a861cc25436ca0caa53d1ebc37e3cad2e',1,'motor_game::PPM::enemy() const'],['../classmotor__game_1_1_p_p_m.html#ae996fb4b6883d1d30260ec3df84e100a',1,'motor_game::PPM::enemy()']]], + ['exceptimac',['ExceptIMAC',['../classcpp___i_m_a_c_1_1_except_i_m_a_c.html',1,'cpp_IMAC']]], + ['ext',['ext',['../classglimac_1_1_file_path.html#ac36e170d0864ed2c5f1296dac2104b15',1,'glimac::FilePath']]], + ['eyecamera',['EyeCamera',['../class_eye_camera.html',1,'EyeCamera'],['../class_eye_camera.html#a5f383370d86c9a548c4bf4b6d5d93a05',1,'EyeCamera::EyeCamera()'],['../class_eye_camera.html#a4b4a41bf3549d55e6bd7bac873f2bf53',1,'EyeCamera::EyeCamera(const float fDistance, const float fAngleX, const float fAngleY)']]] +]; diff --git a/doc/html/search/all_5.html b/doc/html/search/all_5.html new file mode 100644 index 0000000..89a879e --- /dev/null +++ b/doc/html/search/all_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_5.js b/doc/html/search/all_5.js new file mode 100644 index 0000000..b0ff78f --- /dev/null +++ b/doc/html/search/all_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['file',['file',['../classglimac_1_1_file_path.html#af62ce630c3e3a5e106556cdf17773f3a',1,'glimac::FilePath']]], + ['filepath',['FilePath',['../classglimac_1_1_file_path.html',1,'glimac']]], + ['floor',['Floor',['../class_floor.html',1,'Floor'],['../classfloor.html',1,'floor'],['../class_floor.html#af54aee372639bc176f4507ab0d481246',1,'Floor::Floor()']]], + ['font',['Font',['../class_font.html',1,'Font'],['../class_font.html#a4e6a119206f505522100221c1fafde45',1,'Font::Font()'],['../class_font.html#ae218e0bbf16ed92ca45a6fab88ee0870',1,'Font::Font(const std::string &fontPath)']]], + ['freelycamera',['FreelyCamera',['../classglimac_1_1_freely_camera.html',1,'glimac']]] +]; diff --git a/doc/html/search/all_6.html b/doc/html/search/all_6.html new file mode 100644 index 0000000..6afac06 --- /dev/null +++ b/doc/html/search/all_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_6.js b/doc/html/search/all_6.js new file mode 100644 index 0000000..19a5ec1 --- /dev/null +++ b/doc/html/search/all_6.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['gap',['Gap',['../classmotor__game_1_1_gap.html',1,'motor_game::Gap'],['../classmotor__game_1_1_gap.html#a9c08c33065fffb772d501fbc926ae84c',1,'motor_game::Gap::Gap()']]], + ['geometry',['Geometry',['../classglimac_1_1_geometry.html',1,'glimac']]], + ['getappheight',['getAppHeight',['../class_app_manager.html#affae46e05f7c0832fce71c97a628a1a2',1,'AppManager']]], + ['getappwidth',['getAppWidth',['../class_app_manager.html#ac44f43240b8165fee3ef7732677db5ce',1,'AppManager']]], + ['getname',['getName',['../class_user.html#a446a64e63adafbc2e1428532275ad6a1',1,'User']]], + ['getposition',['getPosition',['../class_printable_element.html#a28297e04d261ea6d2124d51d53f8c11c',1,'PrintableElement']]], + ['getscore',['getScore',['../class_hero.html#ae641d66ff284f3727c47b6113c05088e',1,'Hero']]], + ['gettype',['getType',['../class_printable_element.html#ad31b8e6efe88fd081424db4ffbc87edc',1,'PrintableElement']]], + ['getviewmatrix',['getViewMatrix',['../class_eye_camera.html#acb8c0f7117a2f39bffb130749da612b7',1,'EyeCamera::getViewMatrix()'],['../class_trackball_camera.html#a6854938c871ebcf357ebea51c9410e4d',1,'TrackballCamera::getViewMatrix()']]], + ['getwindowname',['getWindowName',['../class_app_manager.html#a2de910deb66a72a84ba7e489d6762a04',1,'AppManager']]], + ['getx',['getX',['../class_printable_element.html#aae915c7eb90a8673ac4abf12c9cad5f1',1,'PrintableElement']]], + ['gety',['getY',['../class_printable_element.html#ac54f34dfdeb402410fb8d91a0d6a578a',1,'PrintableElement']]], + ['getz',['getZ',['../class_printable_element.html#a77eb7f324a737483c1ef8dc755c83e9e',1,'PrintableElement']]], + ['grid',['Grid',['../classglimac_1_1_grid.html',1,'glimac']]], + ['gl_5frunner',['GL_runner',['../md__r_e_a_d_m_e.html',1,'']]] +]; diff --git a/doc/html/search/all_7.html b/doc/html/search/all_7.html new file mode 100644 index 0000000..de19107 --- /dev/null +++ b/doc/html/search/all_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_7.js b/doc/html/search/all_7.js new file mode 100644 index 0000000..e057b3b --- /dev/null +++ b/doc/html/search/all_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['hash_3c_20glimac_3a_3afilepath_20_3e',['hash< glimac::FilePath >',['../structstd_1_1hash_3_01glimac_1_1_file_path_01_4.html',1,'std']]], + ['hero',['Hero',['../class_hero.html',1,'Hero'],['../class_hero.html#ab5920677a4b5cb59d6f513922d037dca',1,'Hero::Hero()'],['../class_hero.html#aebb8529350172b15e22c038351b2d315',1,'Hero::Hero(const glm::vec3 &position, const float &speed, const std::string &type="Hero")'],['../classmotor__game_1_1_p_p_m.html#a3c48561aa7a07ca1d7265cd92fa2c6e6',1,'motor_game::PPM::hero() const'],['../classmotor__game_1_1_p_p_m.html#ae7479bd6996f1dd4e9a758848894d530',1,'motor_game::PPM::hero()']]] +]; diff --git a/doc/html/search/all_8.html b/doc/html/search/all_8.html new file mode 100644 index 0000000..11e27cd --- /dev/null +++ b/doc/html/search/all_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_8.js b/doc/html/search/all_8.js new file mode 100644 index 0000000..3c5d46e --- /dev/null +++ b/doc/html/search/all_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['image',['Image',['../classglimac_1_1_image.html',1,'glimac']]], + ['imagemanager',['ImageManager',['../classglimac_1_1_image_manager.html',1,'glimac']]] +]; diff --git a/doc/html/search/all_9.html b/doc/html/search/all_9.html new file mode 100644 index 0000000..f8abbbe --- /dev/null +++ b/doc/html/search/all_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_9.js b/doc/html/search/all_9.js new file mode 100644 index 0000000..32c4427 --- /dev/null +++ b/doc/html/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['killhero',['killHero',['../class_enemy.html#a0bf887aeca58cd4b0b12738b25fd4d22',1,'Enemy']]] +]; diff --git a/doc/html/search/all_a.html b/doc/html/search/all_a.html new file mode 100644 index 0000000..9601fce --- /dev/null +++ b/doc/html/search/all_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_a.js b/doc/html/search/all_a.js new file mode 100644 index 0000000..7e40427 --- /dev/null +++ b/doc/html/search/all_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['landmark',['Landmark',['../classglimac_1_1_landmark.html',1,'glimac']]], + ['lightshader',['LightShader',['../class_light_shader.html',1,'LightShader'],['../class_light_shader.html#a32ea81d3f4198b359276fdd558f30969',1,'LightShader::LightShader()']]], + ['loadcubemap',['LoadCubeMap',['../class_texture_loader.html#a2a2e60a5a071e39771777f5b391d2f0d',1,'TextureLoader']]], + ['loadscene',['loadScene',['../class_scene.html#a32091b54cbae4bbb5baffc74bad0b297',1,'Scene']]], + ['loadtexture',['LoadTexture',['../class_texture_loader.html#a96f7503e52d014f6ac92f4b7def265b5',1,'TextureLoader']]] +]; diff --git a/doc/html/search/all_b.html b/doc/html/search/all_b.html new file mode 100644 index 0000000..0814e4e --- /dev/null +++ b/doc/html/search/all_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_b.js b/doc/html/search/all_b.js new file mode 100644 index 0000000..a853f18 --- /dev/null +++ b/doc/html/search/all_b.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['m_5fposition',['m_position',['../class_printable_element.html#ab0821f7fc243e730934ec184e1d3e35c',1,'PrintableElement']]], + ['m_5ftype',['m_type',['../class_printable_element.html#a95735f770c6997776c77a16177aba11f',1,'PrintableElement']]], + ['map',['Map',['../classmotor__game_1_1_map.html',1,'motor_game::Map'],['../classmotor__game_1_1_p_p_m.html#abc41fdd031233190f0b146047a26cc9f',1,'motor_game::PPM::map() const'],['../classmotor__game_1_1_p_p_m.html#af8cd50627453230d76054a96791d36fc',1,'motor_game::PPM::map()']]], + ['material',['Material',['../structglimac_1_1_geometry_1_1_material.html',1,'glimac::Geometry']]], + ['material_5ft',['material_t',['../structtinyobj_1_1material__t.html',1,'tinyobj']]], + ['materialfilereader',['MaterialFileReader',['../classtinyobj_1_1_material_file_reader.html',1,'tinyobj']]], + ['materialreader',['MaterialReader',['../classtinyobj_1_1_material_reader.html',1,'tinyobj']]], + ['menu',['Menu',['../class_menu.html',1,'']]], + ['mesh',['Mesh',['../structglimac_1_1_geometry_1_1_mesh.html',1,'glimac::Geometry']]], + ['mesh_5ft',['mesh_t',['../structtinyobj_1_1mesh__t.html',1,'tinyobj']]], + ['moveleft',['moveLeft',['../class_character.html#a88dfc867ab226d3f115b891fc3b34d67',1,'Character']]], + ['moveright',['moveRight',['../class_character.html#a0a8bf66e3d70c196a0fa8ce183f4aeb4',1,'Character']]], + ['multimap',['multimap',['../classmotor__game_1_1_scores.html#a7c2badfbba33841e544a7d0e2e687ca1',1,'motor_game::Scores']]] +]; diff --git a/doc/html/search/all_c.html b/doc/html/search/all_c.html new file mode 100644 index 0000000..da08c38 --- /dev/null +++ b/doc/html/search/all_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_c.js b/doc/html/search/all_c.js new file mode 100644 index 0000000..aa28fb5 --- /dev/null +++ b/doc/html/search/all_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['negative_5fvector',['negative_vector',['../classnegative__vector.html',1,'']]], + ['negative_5fvector_3c_20element_20_2a_3e',['negative_vector< Element *>',['../classnegative__vector.html',1,'']]] +]; diff --git a/doc/html/search/all_d.html b/doc/html/search/all_d.html new file mode 100644 index 0000000..9986c9c --- /dev/null +++ b/doc/html/search/all_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_d.js b/doc/html/search/all_d.js new file mode 100644 index 0000000..cc3d712 --- /dev/null +++ b/doc/html/search/all_d.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['obj_5fshape',['obj_shape',['../structtinyobj_1_1obj__shape.html',1,'tinyobj']]], + ['object',['Object',['../classglimac_1_1_object.html',1,'glimac']]], + ['obstacle',['Obstacle',['../class_obstacle.html',1,'Obstacle'],['../class_obstacle.html#a8f734072321fa06a7b7dae2d5f50f352',1,'Obstacle::Obstacle()'],['../class_obstacle.html#abe293155be3bb14ff303ca419c7bcb1a',1,'Obstacle::Obstacle(const glm::vec3 &position, const std::string &type="Obstacle")']]], + ['onkeyboardevent',['onKeyboardEvent',['../class_eye_camera.html#a4db7ed2ad703f55ea8b9c080b5cbb8e5',1,'EyeCamera::onKeyboardEvent()'],['../class_trackball_camera.html#af8b955f41853996645c9c68c409fa6e1',1,'TrackballCamera::onKeyboardEvent()']]], + ['onmouseevent',['onMouseEvent',['../class_eye_camera.html#a36f492df5cc9ad052eae99d4cf352308',1,'EyeCamera::onMouseEvent()'],['../class_trackball_camera.html#ab2bcd71d702b7e835ac95fb134829a4b',1,'TrackballCamera::onMouseEvent()']]], + ['onmousewheelevent',['onMouseWheelEvent',['../class_eye_camera.html#a5f99695388ba6a70514ced81caea415f',1,'EyeCamera::onMouseWheelEvent()'],['../class_trackball_camera.html#a75d5c4d92f827f97ed296e437d262ac5',1,'TrackballCamera::onMouseWheelEvent()']]], + ['operator_2b',['operator+',['../classglimac_1_1_file_path.html#a8113825c73d8a8f1f1cf3ca57de6bad8',1,'glimac::FilePath']]], + ['operator_3c_3c',['operator<<',['../classglimac_1_1_file_path.html#a924c4e68c4618cf40156646d23ec5f1c',1,'glimac::FilePath']]] +]; diff --git a/doc/html/search/all_e.html b/doc/html/search/all_e.html new file mode 100644 index 0000000..9fa42bb --- /dev/null +++ b/doc/html/search/all_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_e.js b/doc/html/search/all_e.js new file mode 100644 index 0000000..368b814 --- /dev/null +++ b/doc/html/search/all_e.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['perspectiveshader',['PerspectiveShader',['../class_perspective_shader.html',1,'PerspectiveShader'],['../class_perspective_shader.html#a1ee093db52d7d7c2db4b1abf02442aff',1,'PerspectiveShader::PerspectiveShader(const char *filepathFragmentShader="./shaders/normals.fs.glsl")'],['../class_perspective_shader.html#a2a5db1f2fa4f9e841c622763e2a8b52f',1,'PerspectiveShader::PerspectiveShader(const char *filepathVertexShader, const char *filepathFragmentShader)']]], + ['ppm',['PPM',['../classmotor__game_1_1_p_p_m.html',1,'motor_game::PPM'],['../classmotor__game_1_1_p_p_m.html#a116501ec49756c4043e9abdb8647bea5',1,'motor_game::PPM::PPM()']]], + ['ppmreader',['PPMreader',['../classmotor__game_1_1_p_p_mreader.html',1,'motor_game::PPMreader'],['../classmotor__game_1_1_p_p_mreader.html#a07894b469588e2fe3fb79980e87dd85a',1,'motor_game::PPMreader::PPMreader()']]], + ['printableelement',['PrintableElement',['../class_printable_element.html',1,'PrintableElement'],['../class_printable_element.html#a009b9fd5c08d09ab8e773f7a00a5ee32',1,'PrintableElement::PrintableElement()'],['../class_printable_element.html#a417fc20e093b3848509977b021126767',1,'PrintableElement::PrintableElement(const glm::vec3 &position, const std::string &type)']]], + ['printelement',['printElement',['../class_character.html#a3600d60ee2a732b9776277df6b76790a',1,'Character::printElement()'],['../class_coin.html#ae787238d6ec9f44f58eb7b503e8043a0',1,'Coin::printElement()'],['../class_element.html#a3315b21d304cc392f56f8d19a2cf2d56',1,'Element::printElement()'],['../classmotor__game_1_1_end.html#a511178d610f637cdfe1603a52d0b7f06',1,'motor_game::End::printElement()'],['../class_enemy.html#a1895057350de6dc50bff9086320b2588',1,'Enemy::printElement()'],['../class_floor.html#ad04f41cee097ee6519582c09e0d9c27e',1,'Floor::printElement()'],['../classmotor__game_1_1_gap.html#a387c373efdcb198ea23d9f9ad6f5a8a5',1,'motor_game::Gap::printElement()'],['../class_hero.html#a5dee41509761cffeb71618295b164200',1,'Hero::printElement()'],['../class_obstacle.html#ae7198a1e9113d43a99ace9deaed06942',1,'Obstacle::printElement()'],['../class_printable_element.html#ab010677021618677ab8604ac5f3390f7',1,'PrintableElement::printElement()'],['../classmotor__game_1_1_turn.html#abb8e1d754e76e14b8d82025216c51801',1,'motor_game::Turn::printElement()'],['../class_wall.html#a21098547a395a6292b9cbfc9e5e30f20',1,'Wall::printElement()']]], + ['printplayer',['printPlayer',['../class_user.html#a61f163dbeb4209b48023d8ad4c7fe60b',1,'User']]], + ['program',['Program',['../classglimac_1_1_program.html',1,'glimac']]], + ['projectionx',['projectionX',['../classmotor__game_1_1_map.html#ab54766b30850b1235e02cf9bd11a7276',1,'motor_game::Map::projectionX() const'],['../classmotor__game_1_1_map.html#a2ef84fc298faff5272fba5750aa3953e',1,'motor_game::Map::projectionX(const int x)']]], + ['projectiony',['projectionY',['../classmotor__game_1_1_map.html#ac7493f6971b67f86ce5154570686cde8',1,'motor_game::Map::projectionY() const'],['../classmotor__game_1_1_map.html#ae0d7d36858ed3b2819da5fced88a591d',1,'motor_game::Map::projectionY(const int y)']]], + ['projectionz',['projectionZ',['../classmotor__game_1_1_map.html#a0f270cb6d3951df76aa065577db4eb46',1,'motor_game::Map::projectionZ() const'],['../classmotor__game_1_1_map.html#a253681e3d6bc0f894b769cb2180b4d57',1,'motor_game::Map::projectionZ(const int z)']]] +]; diff --git a/doc/html/search/all_f.html b/doc/html/search/all_f.html new file mode 100644 index 0000000..6ecfc0e --- /dev/null +++ b/doc/html/search/all_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/all_f.js b/doc/html/search/all_f.js new file mode 100644 index 0000000..c15948a --- /dev/null +++ b/doc/html/search/all_f.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['read',['read',['../classmotor__game_1_1_scores.html#a8c705cb9a8cee42115b1a2479d96f11e',1,'motor_game::Scores']]], + ['readfile',['readFile',['../classmotor__game_1_1_p_p_mreader.html#a154b0e4b981269c9a9019113b74b4682',1,'motor_game::PPMreader::readFile()'],['../classmotor__game_1_1_p_p_mreader.html#ac7068e960aa9be9b7dc59bc3cb4805a6',1,'motor_game::PPMreader::readFile(PPM &ppm)']]], + ['run',['run',['../class_character.html#a42e9030d75b7096984c27e2abe7ae603',1,'Character']]] +]; diff --git a/doc/html/search/classes_0.html b/doc/html/search/classes_0.html new file mode 100644 index 0000000..1c3e406 --- /dev/null +++ b/doc/html/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_0.js b/doc/html/search/classes_0.js new file mode 100644 index 0000000..5a9a995 --- /dev/null +++ b/doc/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['appmanager',['AppManager',['../class_app_manager.html',1,'']]] +]; diff --git a/doc/html/search/classes_1.html b/doc/html/search/classes_1.html new file mode 100644 index 0000000..a8e7069 --- /dev/null +++ b/doc/html/search/classes_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_1.js b/doc/html/search/classes_1.js new file mode 100644 index 0000000..1469eab --- /dev/null +++ b/doc/html/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bbox3f',['BBox3f',['../structglimac_1_1_b_box3f.html',1,'glimac']]] +]; diff --git a/doc/html/search/classes_10.html b/doc/html/search/classes_10.html new file mode 100644 index 0000000..c1a9355 --- /dev/null +++ b/doc/html/search/classes_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_10.js b/doc/html/search/classes_10.js new file mode 100644 index 0000000..755c1f8 --- /dev/null +++ b/doc/html/search/classes_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['vertex',['Vertex',['../structglimac_1_1_geometry_1_1_vertex.html',1,'glimac::Geometry']]], + ['vertex_5findex',['vertex_index',['../structtinyobj_1_1vertex__index.html',1,'tinyobj']]] +]; diff --git a/doc/html/search/classes_11.html b/doc/html/search/classes_11.html new file mode 100644 index 0000000..2df8ed3 --- /dev/null +++ b/doc/html/search/classes_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_11.js b/doc/html/search/classes_11.js new file mode 100644 index 0000000..b5cf4ad --- /dev/null +++ b/doc/html/search/classes_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['wall',['Wall',['../class_wall.html',1,'']]] +]; diff --git a/doc/html/search/classes_2.html b/doc/html/search/classes_2.html new file mode 100644 index 0000000..5c09c96 --- /dev/null +++ b/doc/html/search/classes_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_2.js b/doc/html/search/classes_2.js new file mode 100644 index 0000000..1585c52 --- /dev/null +++ b/doc/html/search/classes_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['camera',['Camera',['../class_camera.html',1,'']]], + ['character',['Character',['../class_character.html',1,'']]], + ['coin',['Coin',['../class_coin.html',1,'']]], + ['cone',['Cone',['../classglimac_1_1_cone.html',1,'glimac']]], + ['constructor',['constructor',['../classconstructor.html',1,'']]], + ['cube',['Cube',['../classglimac_1_1_cube.html',1,'glimac']]] +]; diff --git a/doc/html/search/classes_3.html b/doc/html/search/classes_3.html new file mode 100644 index 0000000..5faaeba --- /dev/null +++ b/doc/html/search/classes_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_3.js b/doc/html/search/classes_3.js new file mode 100644 index 0000000..a42d81c --- /dev/null +++ b/doc/html/search/classes_3.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['element',['Element',['../class_element.html',1,'']]], + ['end',['End',['../classmotor__game_1_1_end.html',1,'motor_game']]], + ['enemy',['Enemy',['../class_enemy.html',1,'']]], + ['exceptimac',['ExceptIMAC',['../classcpp___i_m_a_c_1_1_except_i_m_a_c.html',1,'cpp_IMAC']]], + ['eyecamera',['EyeCamera',['../class_eye_camera.html',1,'']]] +]; diff --git a/doc/html/search/classes_4.html b/doc/html/search/classes_4.html new file mode 100644 index 0000000..b3f11bc --- /dev/null +++ b/doc/html/search/classes_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_4.js b/doc/html/search/classes_4.js new file mode 100644 index 0000000..ff37d81 --- /dev/null +++ b/doc/html/search/classes_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['filepath',['FilePath',['../classglimac_1_1_file_path.html',1,'glimac']]], + ['floor',['Floor',['../class_floor.html',1,'Floor'],['../classfloor.html',1,'floor']]], + ['font',['Font',['../class_font.html',1,'']]], + ['freelycamera',['FreelyCamera',['../classglimac_1_1_freely_camera.html',1,'glimac']]] +]; diff --git a/doc/html/search/classes_5.html b/doc/html/search/classes_5.html new file mode 100644 index 0000000..952ace6 --- /dev/null +++ b/doc/html/search/classes_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_5.js b/doc/html/search/classes_5.js new file mode 100644 index 0000000..0720ab2 --- /dev/null +++ b/doc/html/search/classes_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['gap',['Gap',['../classmotor__game_1_1_gap.html',1,'motor_game']]], + ['geometry',['Geometry',['../classglimac_1_1_geometry.html',1,'glimac']]], + ['grid',['Grid',['../classglimac_1_1_grid.html',1,'glimac']]] +]; diff --git a/doc/html/search/classes_6.html b/doc/html/search/classes_6.html new file mode 100644 index 0000000..75eef9f --- /dev/null +++ b/doc/html/search/classes_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_6.js b/doc/html/search/classes_6.js new file mode 100644 index 0000000..675fd0e --- /dev/null +++ b/doc/html/search/classes_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['hash_3c_20glimac_3a_3afilepath_20_3e',['hash< glimac::FilePath >',['../structstd_1_1hash_3_01glimac_1_1_file_path_01_4.html',1,'std']]], + ['hero',['Hero',['../class_hero.html',1,'']]] +]; diff --git a/doc/html/search/classes_7.html b/doc/html/search/classes_7.html new file mode 100644 index 0000000..745f5f2 --- /dev/null +++ b/doc/html/search/classes_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_7.js b/doc/html/search/classes_7.js new file mode 100644 index 0000000..3c5d46e --- /dev/null +++ b/doc/html/search/classes_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['image',['Image',['../classglimac_1_1_image.html',1,'glimac']]], + ['imagemanager',['ImageManager',['../classglimac_1_1_image_manager.html',1,'glimac']]] +]; diff --git a/doc/html/search/classes_8.html b/doc/html/search/classes_8.html new file mode 100644 index 0000000..5a443d9 --- /dev/null +++ b/doc/html/search/classes_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_8.js b/doc/html/search/classes_8.js new file mode 100644 index 0000000..8bff729 --- /dev/null +++ b/doc/html/search/classes_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['landmark',['Landmark',['../classglimac_1_1_landmark.html',1,'glimac']]], + ['lightshader',['LightShader',['../class_light_shader.html',1,'']]] +]; diff --git a/doc/html/search/classes_9.html b/doc/html/search/classes_9.html new file mode 100644 index 0000000..9cb55be --- /dev/null +++ b/doc/html/search/classes_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_9.js b/doc/html/search/classes_9.js new file mode 100644 index 0000000..312ddde --- /dev/null +++ b/doc/html/search/classes_9.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['map',['Map',['../classmotor__game_1_1_map.html',1,'motor_game']]], + ['material',['Material',['../structglimac_1_1_geometry_1_1_material.html',1,'glimac::Geometry']]], + ['material_5ft',['material_t',['../structtinyobj_1_1material__t.html',1,'tinyobj']]], + ['materialfilereader',['MaterialFileReader',['../classtinyobj_1_1_material_file_reader.html',1,'tinyobj']]], + ['materialreader',['MaterialReader',['../classtinyobj_1_1_material_reader.html',1,'tinyobj']]], + ['menu',['Menu',['../class_menu.html',1,'']]], + ['mesh',['Mesh',['../structglimac_1_1_geometry_1_1_mesh.html',1,'glimac::Geometry']]], + ['mesh_5ft',['mesh_t',['../structtinyobj_1_1mesh__t.html',1,'tinyobj']]] +]; diff --git a/doc/html/search/classes_a.html b/doc/html/search/classes_a.html new file mode 100644 index 0000000..54940d7 --- /dev/null +++ b/doc/html/search/classes_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_a.js b/doc/html/search/classes_a.js new file mode 100644 index 0000000..aa28fb5 --- /dev/null +++ b/doc/html/search/classes_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['negative_5fvector',['negative_vector',['../classnegative__vector.html',1,'']]], + ['negative_5fvector_3c_20element_20_2a_3e',['negative_vector< Element *>',['../classnegative__vector.html',1,'']]] +]; diff --git a/doc/html/search/classes_b.html b/doc/html/search/classes_b.html new file mode 100644 index 0000000..6071ae0 --- /dev/null +++ b/doc/html/search/classes_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_b.js b/doc/html/search/classes_b.js new file mode 100644 index 0000000..b13afeb --- /dev/null +++ b/doc/html/search/classes_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['obj_5fshape',['obj_shape',['../structtinyobj_1_1obj__shape.html',1,'tinyobj']]], + ['object',['Object',['../classglimac_1_1_object.html',1,'glimac']]], + ['obstacle',['Obstacle',['../class_obstacle.html',1,'']]] +]; diff --git a/doc/html/search/classes_c.html b/doc/html/search/classes_c.html new file mode 100644 index 0000000..6cf1d00 --- /dev/null +++ b/doc/html/search/classes_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_c.js b/doc/html/search/classes_c.js new file mode 100644 index 0000000..136d627 --- /dev/null +++ b/doc/html/search/classes_c.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['perspectiveshader',['PerspectiveShader',['../class_perspective_shader.html',1,'']]], + ['ppm',['PPM',['../classmotor__game_1_1_p_p_m.html',1,'motor_game']]], + ['ppmreader',['PPMreader',['../classmotor__game_1_1_p_p_mreader.html',1,'motor_game']]], + ['printableelement',['PrintableElement',['../class_printable_element.html',1,'']]], + ['program',['Program',['../classglimac_1_1_program.html',1,'glimac']]] +]; diff --git a/doc/html/search/classes_d.html b/doc/html/search/classes_d.html new file mode 100644 index 0000000..d4a7ed7 --- /dev/null +++ b/doc/html/search/classes_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_d.js b/doc/html/search/classes_d.js new file mode 100644 index 0000000..7a39638 --- /dev/null +++ b/doc/html/search/classes_d.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['scene',['Scene',['../class_scene.html',1,'']]], + ['scores',['Scores',['../classmotor__game_1_1_scores.html',1,'motor_game']]], + ['sdlwindowmanager',['SDLWindowManager',['../classglimac_1_1_s_d_l_window_manager.html',1,'glimac']]], + ['shader',['Shader',['../classglimac_1_1_shader.html',1,'glimac']]], + ['shaderl',['ShaderL',['../class_shader_l.html',1,'']]], + ['shape_5ft',['shape_t',['../structtinyobj_1_1shape__t.html',1,'tinyobj']]], + ['shapevertex',['ShapeVertex',['../structglimac_1_1_shape_vertex.html',1,'glimac']]], + ['skybox',['Skybox',['../class_skybox.html',1,'']]], + ['sphere',['Sphere',['../classglimac_1_1_sphere.html',1,'glimac']]], + ['stbi_5fio_5fcallbacks',['stbi_io_callbacks',['../structstbi__io__callbacks.html',1,'']]] +]; diff --git a/doc/html/search/classes_e.html b/doc/html/search/classes_e.html new file mode 100644 index 0000000..9a9f48c --- /dev/null +++ b/doc/html/search/classes_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_e.js b/doc/html/search/classes_e.js new file mode 100644 index 0000000..a86a53b --- /dev/null +++ b/doc/html/search/classes_e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['textureloader',['TextureLoader',['../class_texture_loader.html',1,'']]], + ['trackballcamera',['TrackballCamera',['../class_trackball_camera.html',1,'']]], + ['turn',['Turn',['../classmotor__game_1_1_turn.html',1,'motor_game']]] +]; diff --git a/doc/html/search/classes_f.html b/doc/html/search/classes_f.html new file mode 100644 index 0000000..a128d60 --- /dev/null +++ b/doc/html/search/classes_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/classes_f.js b/doc/html/search/classes_f.js new file mode 100644 index 0000000..d4fe148 --- /dev/null +++ b/doc/html/search/classes_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['user',['User',['../class_user.html',1,'']]] +]; diff --git a/doc/html/search/close.png b/doc/html/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/doc/html/search/close.png differ diff --git a/doc/html/search/functions_0.html b/doc/html/search/functions_0.html new file mode 100644 index 0000000..4e6d87d --- /dev/null +++ b/doc/html/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_0.js b/doc/html/search/functions_0.js new file mode 100644 index 0000000..aaa20d8 --- /dev/null +++ b/doc/html/search/functions_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['add',['add',['../classmotor__game_1_1_scores.html#a1249df9a55bafba7d4d7e18ac3428389',1,'motor_game::Scores']]], + ['addext',['addExt',['../classglimac_1_1_file_path.html#a4167275bb9a0239906a089a0c682ff37',1,'glimac::FilePath']]], + ['appmanager',['AppManager',['../class_app_manager.html#a6221fc1ede71f2ac539c052bbe0c7f6a',1,'AppManager']]] +]; diff --git a/doc/html/search/functions_1.html b/doc/html/search/functions_1.html new file mode 100644 index 0000000..b343e2d --- /dev/null +++ b/doc/html/search/functions_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_1.js b/doc/html/search/functions_1.js new file mode 100644 index 0000000..d98cb8d --- /dev/null +++ b/doc/html/search/functions_1.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['character',['Character',['../class_character.html#adc27bdd255876169bad2ed0bae0cffb5',1,'Character::Character()'],['../class_character.html#a77e33a11f703b3eebb8af8699dfc5785',1,'Character::Character(const glm::vec3 &position, const float &speed, const std::string &type)']]], + ['checkcollision',['checkCollision',['../class_character.html#af39a1917fe85e9b89455cd4bc85b8ad7',1,'Character::checkCollision()'],['../class_hero.html#a1038af0dc35a7ba289aaead4ada14f16',1,'Hero::checkCollision()']]], + ['clear',['clear',['../classmotor__game_1_1_scores.html#ac1e3b3c41390ef0a116b22383a928ab0',1,'motor_game::Scores']]], + ['coin',['Coin',['../class_coin.html#a94b2130e2d3ac956ba47271ad81c64f5',1,'Coin::Coin()'],['../class_coin.html#ab7ffaedf9c89eceb543f279a7d1475ce',1,'Coin::Coin(const glm::vec3 &position, const unsigned int &value, const std::string &type="Coin")']]], + ['collide',['collide',['../class_coin.html#a933e7c8b20c0b79b2f859df992dc8bd6',1,'Coin::collide()'],['../class_element.html#aec262d765312fa14a594695b7e1e2428',1,'Element::collide()'],['../classmotor__game_1_1_end.html#a00cb596263c2b5f32f233627397f59cf',1,'motor_game::End::collide()'],['../class_enemy.html#a7177e12100c06efc3eda1d3e814dc785',1,'Enemy::collide()'],['../classmotor__game_1_1_gap.html#adba24184c21dbcc68a5fca4240bef4ee',1,'motor_game::Gap::collide()'],['../class_obstacle.html#a14b335c8afe547478979bb35730edca0',1,'Obstacle::collide()'],['../classmotor__game_1_1_turn.html#a81615aa974278de34dfe8ac09755aebd',1,'motor_game::Turn::collide()'],['../class_wall.html#a555ecdfdd8bffd5885fade247cfda47f',1,'Wall::collide()']]], + ['collision',['collision',['../class_element.html#abe9303d83544623d814c9291c0eeee72',1,'Element']]], + ['createtexture',['createTexture',['../class_skybox.html#aa40c6b9153f496f2f46bd7a895d42f24',1,'Skybox::createTexture()'],['../class_skybox.html#a28d12c313aa37f558f816cd2449edc98',1,'Skybox::createTexture(std::vector< const char *> faces)']]] +]; diff --git a/doc/html/search/functions_10.html b/doc/html/search/functions_10.html new file mode 100644 index 0000000..72bc1ea --- /dev/null +++ b/doc/html/search/functions_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_10.js b/doc/html/search/functions_10.js new file mode 100644 index 0000000..3e50f21 --- /dev/null +++ b/doc/html/search/functions_10.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['value',['value',['../class_coin.html#a16cf116e47f3fddb7722dbc8b20ea2a8',1,'Coin']]], + ['visibility',['visibility',['../class_menu.html#af36ca6af3edba3abd08c30bcb35a2390',1,'Menu']]], + ['vomanager',['voManager',['../class_skybox.html#a033ca8b4cc7350d2deac064d71f2a992',1,'Skybox']]] +]; diff --git a/doc/html/search/functions_11.html b/doc/html/search/functions_11.html new file mode 100644 index 0000000..6948a61 --- /dev/null +++ b/doc/html/search/functions_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_11.js b/doc/html/search/functions_11.js new file mode 100644 index 0000000..6cb393e --- /dev/null +++ b/doc/html/search/functions_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['wall',['Wall',['../class_wall.html#a12dc41bc7bc045c55ec1034a43e52043',1,'Wall::Wall()'],['../class_wall.html#acc7359263516ec879eda54d995ff2495',1,'Wall::Wall(const glm::vec3 &position, const std::string &type="Wall")']]] +]; diff --git a/doc/html/search/functions_12.html b/doc/html/search/functions_12.html new file mode 100644 index 0000000..3df8489 --- /dev/null +++ b/doc/html/search/functions_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_12.js b/doc/html/search/functions_12.js new file mode 100644 index 0000000..0d76b3d --- /dev/null +++ b/doc/html/search/functions_12.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x',['x',['../classmotor__game_1_1_map.html#a54246d79679ea844b79850ae4ebfc408',1,'motor_game::Map::x()'],['../classmotor__game_1_1_p_p_m.html#a246d40f59fa94e0539db3e32a547032e',1,'motor_game::PPM::x()']]] +]; diff --git a/doc/html/search/functions_13.html b/doc/html/search/functions_13.html new file mode 100644 index 0000000..febf8e0 --- /dev/null +++ b/doc/html/search/functions_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_13.js b/doc/html/search/functions_13.js new file mode 100644 index 0000000..2bab0ba --- /dev/null +++ b/doc/html/search/functions_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['y',['y',['../classmotor__game_1_1_map.html#a8cfa4c508de73e0745419dade928afbd',1,'motor_game::Map::y()'],['../classmotor__game_1_1_p_p_m.html#abd8ad5c69e31375d6d92f463e0cd0432',1,'motor_game::PPM::y()']]] +]; diff --git a/doc/html/search/functions_14.html b/doc/html/search/functions_14.html new file mode 100644 index 0000000..4c814f5 --- /dev/null +++ b/doc/html/search/functions_14.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_14.js b/doc/html/search/functions_14.js new file mode 100644 index 0000000..637684d --- /dev/null +++ b/doc/html/search/functions_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['z',['z',['../classmotor__game_1_1_map.html#a13a7647049f9c2601405ea5507d49dab',1,'motor_game::Map::z()'],['../classmotor__game_1_1_p_p_m.html#aec9a7617bf48bae80ef810f3219f4257',1,'motor_game::PPM::z()']]] +]; diff --git a/doc/html/search/functions_15.html b/doc/html/search/functions_15.html new file mode 100644 index 0000000..0f002b8 --- /dev/null +++ b/doc/html/search/functions_15.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_15.js b/doc/html/search/functions_15.js new file mode 100644 index 0000000..ef1335b --- /dev/null +++ b/doc/html/search/functions_15.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['_7echaracter',['~Character',['../class_character.html#a9e9be564d05ded80962b2045aa70b3fc',1,'Character']]], + ['_7ecoin',['~Coin',['../class_coin.html#ad0371a6d98c194a0f6de615206829b16',1,'Coin']]], + ['_7eelement',['~Element',['../class_element.html#a13d54ba9c08b6bec651402f1c2bb002c',1,'Element']]], + ['_7eend',['~End',['../classmotor__game_1_1_end.html#a035119e2aa5a0aa2555c432071569f81',1,'motor_game::End']]], + ['_7eenemy',['~Enemy',['../class_enemy.html#ac0eec4755e28c02688065f9657150ac3',1,'Enemy']]], + ['_7efloor',['~Floor',['../class_floor.html#ae1b805579f18a76fe2754a3601202e80',1,'Floor']]], + ['_7efont',['~Font',['../class_font.html#a134aaa2f78af0c12d3ce504957169768',1,'Font']]], + ['_7egap',['~Gap',['../classmotor__game_1_1_gap.html#a9c3cbd0654d63a2e5cd7dc74f5bf26ee',1,'motor_game::Gap']]], + ['_7ehero',['~Hero',['../class_hero.html#a5aeef41ede5a80dc29c5acd7b553c4da',1,'Hero']]], + ['_7elightshader',['~LightShader',['../class_light_shader.html#ac70ce3be8cce126572c222d847fadffb',1,'LightShader']]], + ['_7eobstacle',['~Obstacle',['../class_obstacle.html#af2f9cc9c6cff75dca0974fd5ac4f71a9',1,'Obstacle']]], + ['_7eperspectiveshader',['~PerspectiveShader',['../class_perspective_shader.html#aebe00cbf8b336b1d829d004af1aa52ba',1,'PerspectiveShader']]], + ['_7eppmreader',['~PPMreader',['../classmotor__game_1_1_p_p_mreader.html#acd5707bacd9773470a16879091e46a03',1,'motor_game::PPMreader']]], + ['_7eprintableelement',['~PrintableElement',['../class_printable_element.html#a789a5e025057f55baf234f7defa0acd4',1,'PrintableElement']]], + ['_7escene',['~Scene',['../class_scene.html#a3b8cec2e32546713915f8c6303c951f1',1,'Scene']]], + ['_7eturn',['~Turn',['../classmotor__game_1_1_turn.html#a0c62ed05153bc97e42349ac62e40cbb2',1,'motor_game::Turn']]], + ['_7euser',['~User',['../class_user.html#ac00b72ad64eb4149f7b21b9f5468c2b2',1,'User']]], + ['_7ewall',['~Wall',['../class_wall.html#a9a2992f2b533e1c160513d1e719f920c',1,'Wall']]] +]; diff --git a/doc/html/search/functions_2.html b/doc/html/search/functions_2.html new file mode 100644 index 0000000..ecce2f3 --- /dev/null +++ b/doc/html/search/functions_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_2.js b/doc/html/search/functions_2.js new file mode 100644 index 0000000..c310d0f --- /dev/null +++ b/doc/html/search/functions_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['description',['description',['../class_printable_element.html#a749e7f0aafe45e0901f399524175eeee',1,'PrintableElement']]], + ['dimensions',['dimensions',['../classmotor__game_1_1_p_p_m.html#aba8267dfc79fd7d7a226d138987cbca1',1,'motor_game::PPM']]], + ['dirpath',['dirPath',['../classglimac_1_1_file_path.html#a75d8d5573b69d79dd745513ddd4b158f',1,'glimac::FilePath']]], + ['down',['down',['../class_character.html#aef04abffec842976df3313e01673251b',1,'Character']]] +]; diff --git a/doc/html/search/functions_3.html b/doc/html/search/functions_3.html new file mode 100644 index 0000000..15f06ab --- /dev/null +++ b/doc/html/search/functions_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_3.js b/doc/html/search/functions_3.js new file mode 100644 index 0000000..3081514 --- /dev/null +++ b/doc/html/search/functions_3.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['element',['Element',['../class_element.html#ab0d0e20be9a36ae676202db753faeec9',1,'Element::Element()'],['../class_element.html#a47e87e435ffe285ca18013d452c12a3e',1,'Element::Element(const glm::vec3 &position, const std::string &type)'],['../classmotor__game_1_1_map.html#ac6215c73a63a69e10aaa27402ff4ece9',1,'motor_game::Map::element(const int &x, const int &y, const int &z) const'],['../classmotor__game_1_1_map.html#ad6831a7d6811d54a191074f2f124fb36',1,'motor_game::Map::element(const int &x, const int &y, const int &z, Element *element)']]], + ['end',['End',['../classmotor__game_1_1_end.html#adeda88d8296bb099751e851fa857438d',1,'motor_game::End::End()=default'],['../classmotor__game_1_1_end.html#a226a9e7c4f91aecc44692acfa93672a9',1,'motor_game::End::End(const glm::vec3 &position, const std::string &type="End")']]], + ['enemy',['Enemy',['../class_enemy.html#a94f30d348b6d2840fd71675472ba38dd',1,'Enemy::Enemy()'],['../class_enemy.html#aebe5967b163d286b97304d7f3e659e7e',1,'Enemy::Enemy(const glm::vec3 &position, const float &speed, const std::string &type="Enemy")'],['../classmotor__game_1_1_p_p_m.html#a861cc25436ca0caa53d1ebc37e3cad2e',1,'motor_game::PPM::enemy() const'],['../classmotor__game_1_1_p_p_m.html#ae996fb4b6883d1d30260ec3df84e100a',1,'motor_game::PPM::enemy()']]], + ['ext',['ext',['../classglimac_1_1_file_path.html#ac36e170d0864ed2c5f1296dac2104b15',1,'glimac::FilePath']]], + ['eyecamera',['EyeCamera',['../class_eye_camera.html#a5f383370d86c9a548c4bf4b6d5d93a05',1,'EyeCamera::EyeCamera()'],['../class_eye_camera.html#a4b4a41bf3549d55e6bd7bac873f2bf53',1,'EyeCamera::EyeCamera(const float fDistance, const float fAngleX, const float fAngleY)']]] +]; diff --git a/doc/html/search/functions_4.html b/doc/html/search/functions_4.html new file mode 100644 index 0000000..8985ff2 --- /dev/null +++ b/doc/html/search/functions_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_4.js b/doc/html/search/functions_4.js new file mode 100644 index 0000000..4c1a371 --- /dev/null +++ b/doc/html/search/functions_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['file',['file',['../classglimac_1_1_file_path.html#af62ce630c3e3a5e106556cdf17773f3a',1,'glimac::FilePath']]], + ['floor',['Floor',['../class_floor.html#af54aee372639bc176f4507ab0d481246',1,'Floor']]], + ['font',['Font',['../class_font.html#a4e6a119206f505522100221c1fafde45',1,'Font::Font()'],['../class_font.html#ae218e0bbf16ed92ca45a6fab88ee0870',1,'Font::Font(const std::string &fontPath)']]] +]; diff --git a/doc/html/search/functions_5.html b/doc/html/search/functions_5.html new file mode 100644 index 0000000..0314918 --- /dev/null +++ b/doc/html/search/functions_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_5.js b/doc/html/search/functions_5.js new file mode 100644 index 0000000..71c99f7 --- /dev/null +++ b/doc/html/search/functions_5.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['gap',['Gap',['../classmotor__game_1_1_gap.html#a9c08c33065fffb772d501fbc926ae84c',1,'motor_game::Gap']]], + ['getappheight',['getAppHeight',['../class_app_manager.html#affae46e05f7c0832fce71c97a628a1a2',1,'AppManager']]], + ['getappwidth',['getAppWidth',['../class_app_manager.html#ac44f43240b8165fee3ef7732677db5ce',1,'AppManager']]], + ['getname',['getName',['../class_user.html#a446a64e63adafbc2e1428532275ad6a1',1,'User']]], + ['getposition',['getPosition',['../class_printable_element.html#a28297e04d261ea6d2124d51d53f8c11c',1,'PrintableElement']]], + ['getscore',['getScore',['../class_hero.html#ae641d66ff284f3727c47b6113c05088e',1,'Hero']]], + ['gettype',['getType',['../class_printable_element.html#ad31b8e6efe88fd081424db4ffbc87edc',1,'PrintableElement']]], + ['getviewmatrix',['getViewMatrix',['../class_eye_camera.html#acb8c0f7117a2f39bffb130749da612b7',1,'EyeCamera::getViewMatrix()'],['../class_trackball_camera.html#a6854938c871ebcf357ebea51c9410e4d',1,'TrackballCamera::getViewMatrix()']]], + ['getwindowname',['getWindowName',['../class_app_manager.html#a2de910deb66a72a84ba7e489d6762a04',1,'AppManager']]], + ['getx',['getX',['../class_printable_element.html#aae915c7eb90a8673ac4abf12c9cad5f1',1,'PrintableElement']]], + ['gety',['getY',['../class_printable_element.html#ac54f34dfdeb402410fb8d91a0d6a578a',1,'PrintableElement']]], + ['getz',['getZ',['../class_printable_element.html#a77eb7f324a737483c1ef8dc755c83e9e',1,'PrintableElement']]] +]; diff --git a/doc/html/search/functions_6.html b/doc/html/search/functions_6.html new file mode 100644 index 0000000..c506123 --- /dev/null +++ b/doc/html/search/functions_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_6.js b/doc/html/search/functions_6.js new file mode 100644 index 0000000..4601e0b --- /dev/null +++ b/doc/html/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hero',['Hero',['../class_hero.html#ab5920677a4b5cb59d6f513922d037dca',1,'Hero::Hero()'],['../class_hero.html#aebb8529350172b15e22c038351b2d315',1,'Hero::Hero(const glm::vec3 &position, const float &speed, const std::string &type="Hero")'],['../classmotor__game_1_1_p_p_m.html#a3c48561aa7a07ca1d7265cd92fa2c6e6',1,'motor_game::PPM::hero() const'],['../classmotor__game_1_1_p_p_m.html#ae7479bd6996f1dd4e9a758848894d530',1,'motor_game::PPM::hero()']]] +]; diff --git a/doc/html/search/functions_7.html b/doc/html/search/functions_7.html new file mode 100644 index 0000000..83a7b84 --- /dev/null +++ b/doc/html/search/functions_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_7.js b/doc/html/search/functions_7.js new file mode 100644 index 0000000..32c4427 --- /dev/null +++ b/doc/html/search/functions_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['killhero',['killHero',['../class_enemy.html#a0bf887aeca58cd4b0b12738b25fd4d22',1,'Enemy']]] +]; diff --git a/doc/html/search/functions_8.html b/doc/html/search/functions_8.html new file mode 100644 index 0000000..b55f0e6 --- /dev/null +++ b/doc/html/search/functions_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_8.js b/doc/html/search/functions_8.js new file mode 100644 index 0000000..32f5fc5 --- /dev/null +++ b/doc/html/search/functions_8.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['lightshader',['LightShader',['../class_light_shader.html#a32ea81d3f4198b359276fdd558f30969',1,'LightShader']]], + ['loadcubemap',['LoadCubeMap',['../class_texture_loader.html#a2a2e60a5a071e39771777f5b391d2f0d',1,'TextureLoader']]], + ['loadscene',['loadScene',['../class_scene.html#a32091b54cbae4bbb5baffc74bad0b297',1,'Scene']]], + ['loadtexture',['LoadTexture',['../class_texture_loader.html#a96f7503e52d014f6ac92f4b7def265b5',1,'TextureLoader']]] +]; diff --git a/doc/html/search/functions_9.html b/doc/html/search/functions_9.html new file mode 100644 index 0000000..c73f07b --- /dev/null +++ b/doc/html/search/functions_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_9.js b/doc/html/search/functions_9.js new file mode 100644 index 0000000..469f6f1 --- /dev/null +++ b/doc/html/search/functions_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['map',['map',['../classmotor__game_1_1_p_p_m.html#abc41fdd031233190f0b146047a26cc9f',1,'motor_game::PPM::map() const'],['../classmotor__game_1_1_p_p_m.html#af8cd50627453230d76054a96791d36fc',1,'motor_game::PPM::map()']]], + ['moveleft',['moveLeft',['../class_character.html#a88dfc867ab226d3f115b891fc3b34d67',1,'Character']]], + ['moveright',['moveRight',['../class_character.html#a0a8bf66e3d70c196a0fa8ce183f4aeb4',1,'Character']]], + ['multimap',['multimap',['../classmotor__game_1_1_scores.html#a7c2badfbba33841e544a7d0e2e687ca1',1,'motor_game::Scores']]] +]; diff --git a/doc/html/search/functions_a.html b/doc/html/search/functions_a.html new file mode 100644 index 0000000..f10ad63 --- /dev/null +++ b/doc/html/search/functions_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_a.js b/doc/html/search/functions_a.js new file mode 100644 index 0000000..9e5aeac --- /dev/null +++ b/doc/html/search/functions_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['obstacle',['Obstacle',['../class_obstacle.html#a8f734072321fa06a7b7dae2d5f50f352',1,'Obstacle::Obstacle()'],['../class_obstacle.html#abe293155be3bb14ff303ca419c7bcb1a',1,'Obstacle::Obstacle(const glm::vec3 &position, const std::string &type="Obstacle")']]], + ['onkeyboardevent',['onKeyboardEvent',['../class_eye_camera.html#a4db7ed2ad703f55ea8b9c080b5cbb8e5',1,'EyeCamera::onKeyboardEvent()'],['../class_trackball_camera.html#af8b955f41853996645c9c68c409fa6e1',1,'TrackballCamera::onKeyboardEvent()']]], + ['onmouseevent',['onMouseEvent',['../class_eye_camera.html#a36f492df5cc9ad052eae99d4cf352308',1,'EyeCamera::onMouseEvent()'],['../class_trackball_camera.html#ab2bcd71d702b7e835ac95fb134829a4b',1,'TrackballCamera::onMouseEvent()']]], + ['onmousewheelevent',['onMouseWheelEvent',['../class_eye_camera.html#a5f99695388ba6a70514ced81caea415f',1,'EyeCamera::onMouseWheelEvent()'],['../class_trackball_camera.html#a75d5c4d92f827f97ed296e437d262ac5',1,'TrackballCamera::onMouseWheelEvent()']]], + ['operator_2b',['operator+',['../classglimac_1_1_file_path.html#a8113825c73d8a8f1f1cf3ca57de6bad8',1,'glimac::FilePath']]] +]; diff --git a/doc/html/search/functions_b.html b/doc/html/search/functions_b.html new file mode 100644 index 0000000..172ea1b --- /dev/null +++ b/doc/html/search/functions_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_b.js b/doc/html/search/functions_b.js new file mode 100644 index 0000000..943d5db --- /dev/null +++ b/doc/html/search/functions_b.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['perspectiveshader',['PerspectiveShader',['../class_perspective_shader.html#a1ee093db52d7d7c2db4b1abf02442aff',1,'PerspectiveShader::PerspectiveShader(const char *filepathFragmentShader="./shaders/normals.fs.glsl")'],['../class_perspective_shader.html#a2a5db1f2fa4f9e841c622763e2a8b52f',1,'PerspectiveShader::PerspectiveShader(const char *filepathVertexShader, const char *filepathFragmentShader)']]], + ['ppm',['PPM',['../classmotor__game_1_1_p_p_m.html#a116501ec49756c4043e9abdb8647bea5',1,'motor_game::PPM']]], + ['ppmreader',['PPMreader',['../classmotor__game_1_1_p_p_mreader.html#a07894b469588e2fe3fb79980e87dd85a',1,'motor_game::PPMreader']]], + ['printableelement',['PrintableElement',['../class_printable_element.html#a009b9fd5c08d09ab8e773f7a00a5ee32',1,'PrintableElement::PrintableElement()'],['../class_printable_element.html#a417fc20e093b3848509977b021126767',1,'PrintableElement::PrintableElement(const glm::vec3 &position, const std::string &type)']]], + ['printelement',['printElement',['../class_character.html#a3600d60ee2a732b9776277df6b76790a',1,'Character::printElement()'],['../class_coin.html#ae787238d6ec9f44f58eb7b503e8043a0',1,'Coin::printElement()'],['../class_element.html#a3315b21d304cc392f56f8d19a2cf2d56',1,'Element::printElement()'],['../classmotor__game_1_1_end.html#a511178d610f637cdfe1603a52d0b7f06',1,'motor_game::End::printElement()'],['../class_enemy.html#a1895057350de6dc50bff9086320b2588',1,'Enemy::printElement()'],['../class_floor.html#ad04f41cee097ee6519582c09e0d9c27e',1,'Floor::printElement()'],['../classmotor__game_1_1_gap.html#a387c373efdcb198ea23d9f9ad6f5a8a5',1,'motor_game::Gap::printElement()'],['../class_hero.html#a5dee41509761cffeb71618295b164200',1,'Hero::printElement()'],['../class_obstacle.html#ae7198a1e9113d43a99ace9deaed06942',1,'Obstacle::printElement()'],['../class_printable_element.html#ab010677021618677ab8604ac5f3390f7',1,'PrintableElement::printElement()'],['../classmotor__game_1_1_turn.html#abb8e1d754e76e14b8d82025216c51801',1,'motor_game::Turn::printElement()'],['../class_wall.html#a21098547a395a6292b9cbfc9e5e30f20',1,'Wall::printElement()']]], + ['printplayer',['printPlayer',['../class_user.html#a61f163dbeb4209b48023d8ad4c7fe60b',1,'User']]], + ['projectionx',['projectionX',['../classmotor__game_1_1_map.html#ab54766b30850b1235e02cf9bd11a7276',1,'motor_game::Map::projectionX() const'],['../classmotor__game_1_1_map.html#a2ef84fc298faff5272fba5750aa3953e',1,'motor_game::Map::projectionX(const int x)']]], + ['projectiony',['projectionY',['../classmotor__game_1_1_map.html#ac7493f6971b67f86ce5154570686cde8',1,'motor_game::Map::projectionY() const'],['../classmotor__game_1_1_map.html#ae0d7d36858ed3b2819da5fced88a591d',1,'motor_game::Map::projectionY(const int y)']]], + ['projectionz',['projectionZ',['../classmotor__game_1_1_map.html#a0f270cb6d3951df76aa065577db4eb46',1,'motor_game::Map::projectionZ() const'],['../classmotor__game_1_1_map.html#a253681e3d6bc0f894b769cb2180b4d57',1,'motor_game::Map::projectionZ(const int z)']]] +]; diff --git a/doc/html/search/functions_c.html b/doc/html/search/functions_c.html new file mode 100644 index 0000000..99492ba --- /dev/null +++ b/doc/html/search/functions_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_c.js b/doc/html/search/functions_c.js new file mode 100644 index 0000000..c15948a --- /dev/null +++ b/doc/html/search/functions_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['read',['read',['../classmotor__game_1_1_scores.html#a8c705cb9a8cee42115b1a2479d96f11e',1,'motor_game::Scores']]], + ['readfile',['readFile',['../classmotor__game_1_1_p_p_mreader.html#a154b0e4b981269c9a9019113b74b4682',1,'motor_game::PPMreader::readFile()'],['../classmotor__game_1_1_p_p_mreader.html#ac7068e960aa9be9b7dc59bc3cb4805a6',1,'motor_game::PPMreader::readFile(PPM &ppm)']]], + ['run',['run',['../class_character.html#a42e9030d75b7096984c27e2abe7ae603',1,'Character']]] +]; diff --git a/doc/html/search/functions_d.html b/doc/html/search/functions_d.html new file mode 100644 index 0000000..5be9ecc --- /dev/null +++ b/doc/html/search/functions_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_d.js b/doc/html/search/functions_d.js new file mode 100644 index 0000000..2fbf116 --- /dev/null +++ b/doc/html/search/functions_d.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['save',['save',['../classmotor__game_1_1_scores.html#ab6b74ef72ee79255c34ce29b369ea1fe',1,'motor_game::Scores']]], + ['scanarray',['scanArray',['../class_hero.html#ac71f8fd8a5c7d8f379935f17dd0dddc6',1,'Hero']]], + ['scene',['Scene',['../class_scene.html#ad10176d75a9cc0da56626f682d083507',1,'Scene::Scene()'],['../class_scene.html#a8ee4eae847565a51acd3babef70ee0f5',1,'Scene::Scene(std::vector< std::unique_ptr< glimac::Object >> inDataObject, std::shared_ptr< Camera > inCamera)']]], + ['scores',['Scores',['../classmotor__game_1_1_scores.html#a421ac4c4e3ce925c080880f600bf3ca2',1,'motor_game::Scores']]], + ['setfontpath',['setFontPath',['../class_font.html#acf2f4b0d42fc1fb6e5d2ce6c7e9c7595',1,'Font']]], + ['setname',['setName',['../class_user.html#ab3e689190e12adcd8dfc04b489477503',1,'User']]], + ['setposition',['setPosition',['../class_printable_element.html#a3093aa30346e047f45dce13773964924',1,'PrintableElement']]], + ['setscore',['setScore',['../class_hero.html#a5187f68140a9fb4b7a7c587d6d7ddfaa',1,'Hero']]], + ['setuniformmatrix',['setUniformMatrix',['../class_light_shader.html#af168132426e69ab8b655aee4bbab1306',1,'LightShader::setUniformMatrix()'],['../class_perspective_shader.html#a0346f2a0bd8e5cf11c3d1014a9953fb1',1,'PerspectiveShader::setUniformMatrix()']]], + ['setviewmatrix',['setViewMatrix',['../class_light_shader.html#a395d77db8bacc40f93795d8199206529',1,'LightShader::setViewMatrix()'],['../class_perspective_shader.html#a269202bb545bd5a302facacefa81533a',1,'PerspectiveShader::setViewMatrix()']]], + ['setvisibility',['setVisibility',['../class_menu.html#adb992afd36cedc22387287612deb67d2',1,'Menu']]], + ['skybox',['Skybox',['../class_skybox.html#a77a92db4492ed94ed4bd101b05ffb1f4',1,'Skybox']]], + ['start',['start',['../class_app_manager.html#a3326c2410ec8a898f828e8051c414e96',1,'AppManager']]] +]; diff --git a/doc/html/search/functions_e.html b/doc/html/search/functions_e.html new file mode 100644 index 0000000..e256cb6 --- /dev/null +++ b/doc/html/search/functions_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_e.js b/doc/html/search/functions_e.js new file mode 100644 index 0000000..285c21e --- /dev/null +++ b/doc/html/search/functions_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['trackballcamera',['TrackballCamera',['../class_trackball_camera.html#afea99c1d5361fe703637681af59b809d',1,'TrackballCamera::TrackballCamera()'],['../class_trackball_camera.html#ae2b97339a12d299c25afd870d36aa9e9',1,'TrackballCamera::TrackballCamera(const float fDistance, const float fAngleX, const float fAngleY)']]], + ['type',['type',['../class_menu.html#add933febc8aed23d371c35c4c313ba11',1,'Menu::type() const'],['../class_menu.html#a6968b61f3d2452c03b3b21977e0b2ada',1,'Menu::type(const int inType)']]] +]; diff --git a/doc/html/search/functions_f.html b/doc/html/search/functions_f.html new file mode 100644 index 0000000..424126c --- /dev/null +++ b/doc/html/search/functions_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/functions_f.js b/doc/html/search/functions_f.js new file mode 100644 index 0000000..043970e --- /dev/null +++ b/doc/html/search/functions_f.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['up',['up',['../class_character.html#aa8a72c17bc8e2a3e50b2b37a25e50931',1,'Character']]], + ['use',['use',['../class_light_shader.html#a9e08233bd63ae209f4e23a8c5e7625af',1,'LightShader::use()'],['../class_perspective_shader.html#a16f12cd5ff654fdcaa6af12431c7d9c5',1,'PerspectiveShader::use()']]], + ['user',['User',['../class_user.html#a7561ff813cce8c5c23b02a50e6858c48',1,'User']]] +]; diff --git a/doc/html/search/mag_sel.png b/doc/html/search/mag_sel.png new file mode 100644 index 0000000..81f6040 Binary files /dev/null and b/doc/html/search/mag_sel.png differ diff --git a/doc/html/search/nomatches.html b/doc/html/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/doc/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/doc/html/search/pages_0.html b/doc/html/search/pages_0.html new file mode 100644 index 0000000..4955b9e --- /dev/null +++ b/doc/html/search/pages_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/pages_0.js b/doc/html/search/pages_0.js new file mode 100644 index 0000000..25f3c10 --- /dev/null +++ b/doc/html/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gl_5frunner',['GL_runner',['../md__r_e_a_d_m_e.html',1,'']]] +]; diff --git a/doc/html/search/related_0.html b/doc/html/search/related_0.html new file mode 100644 index 0000000..1db947b --- /dev/null +++ b/doc/html/search/related_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/related_0.js b/doc/html/search/related_0.js new file mode 100644 index 0000000..a5ddfbb --- /dev/null +++ b/doc/html/search/related_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_3c_3c',['operator<<',['../classglimac_1_1_file_path.html#a924c4e68c4618cf40156646d23ec5f1c',1,'glimac::FilePath']]] +]; diff --git a/doc/html/search/search.css b/doc/html/search/search.css new file mode 100644 index 0000000..3cf9df9 --- /dev/null +++ b/doc/html/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 8px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:115px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:8px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/doc/html/search/search.js b/doc/html/search/search.js new file mode 100644 index 0000000..dedce3b --- /dev/null +++ b/doc/html/search/search.js @@ -0,0 +1,791 @@ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/doc/html/search/variables_0.js b/doc/html/search/variables_0.js new file mode 100644 index 0000000..92b5047 --- /dev/null +++ b/doc/html/search/variables_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['m_5fposition',['m_position',['../class_printable_element.html#ab0821f7fc243e730934ec184e1d3e35c',1,'PrintableElement']]], + ['m_5ftype',['m_type',['../class_printable_element.html#a95735f770c6997776c77a16177aba11f',1,'PrintableElement']]] +]; diff --git a/doc/html/splitbar.png b/doc/html/splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/doc/html/splitbar.png differ diff --git a/doc/html/stb__image_8h_source.html b/doc/html/stb__image_8h_source.html new file mode 100644 index 0000000..8f795d7 --- /dev/null +++ b/doc/html/stb__image_8h_source.html @@ -0,0 +1,99 @@ + + + + + + + +SpacImac Runner: src/glimac/stb_image.h Source File + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    stb_image.h
    +
    +
    +
    1 /* stb_image - v1.46 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c
    2  when you control the images you're loading
    3  no warranty implied; use at your own risk
    4 
    5  Do this:
    6  #define STB_IMAGE_IMPLEMENTATION
    7  before you include this file in *one* C or C++ file to create the implementation.
    8 
    9  #define STBI_ASSERT(x) to avoid using assert.h.
    10 
    11  QUICK NOTES:
    12  Primarily of interest to game developers and other people who can
    13  avoid problematic images and only need the trivial interface
    14 
    15  JPEG baseline (no JPEG progressive)
    16  PNG 8-bit-per-channel only
    17 
    18  TGA (not sure what subset, if a subset)
    19  BMP non-1bpp, non-RLE
    20  PSD (composited view only, no extra channels)
    21 
    22  GIF (*comp always reports as 4-channel)
    23  HDR (radiance rgbE format)
    24  PIC (Softimage PIC)
    25 
    26  - decode from memory or through FILE (define STBI_NO_STDIO to remove code)
    27  - decode from arbitrary I/O callbacks
    28  - overridable dequantizing-IDCT, YCbCr-to-RGB conversion (define STBI_SIMD)
    29 
    30  Latest revisions:
    31  1.46 (2014-08-26) fix broken tRNS chunk in non-paletted PNG
    32  1.45 (2014-08-16) workaround MSVC-ARM internal compiler error by wrapping malloc
    33  1.44 (2014-08-07) warnings
    34  1.43 (2014-07-15) fix MSVC-only bug in 1.42
    35  1.42 (2014-07-09) no _CRT_SECURE_NO_WARNINGS; error-path fixes; STBI_ASSERT
    36  1.41 (2014-06-25) fix search&replace that messed up comments/error messages
    37  1.40 (2014-06-22) gcc warning
    38  1.39 (2014-06-15) TGA optimization bugfix, multiple BMP fixes
    39  1.38 (2014-06-06) suppress MSVC run-time warnings, fix accidental rename of 'skip'
    40  1.37 (2014-06-04) remove duplicate typedef
    41  1.36 (2014-06-03) converted to header file, allow reading incorrect iphoned-images without iphone flag
    42  1.35 (2014-05-27) warnings, bugfixes, TGA optimization, etc
    43 
    44  See end of file for full revision history.
    45 
    46  TODO:
    47  stbi_info support for BMP,PSD,HDR,PIC
    48 
    49 
    50  ============================ Contributors =========================
    51 
    52  Image formats Bug fixes & warning fixes
    53  Sean Barrett (jpeg, png, bmp) Marc LeBlanc
    54  Nicolas Schulz (hdr, psd) Christpher Lloyd
    55  Jonathan Dummer (tga) Dave Moore
    56  Jean-Marc Lienher (gif) Won Chun
    57  Tom Seddon (pic) the Horde3D community
    58  Thatcher Ulrich (psd) Janez Zemva
    59  Jonathan Blow
    60  Laurent Gomila
    61  Extensions, features Aruelien Pocheville
    62  Jetro Lauha (stbi_info) Ryamond Barbiero
    63  James "moose2000" Brown (iPhone PNG) David Woo
    64  Ben "Disch" Wenger (io callbacks) Roy Eltham
    65  Martin "SpartanJ" Golini Luke Graham
    66  Thomas Ruf
    67  John Bartholomew
    68  Optimizations & bugfixes Ken Hamada
    69  Fabian "ryg" Giesen Cort Stratton
    70  Arseny Kapoulkine Blazej Dariusz Roszkowski
    71  Thibault Reuille
    72  Paul Du Bois
    73  Guillaume George
    74  Jerry Jansson
    75  If your name should be here but Hayaki Saito
    76  isn't, let Sean know. Johan Duparc
    77  Ronny Chevalier
    78  Michal Cichon
    79 */
    80 
    81 #ifndef STBI_INCLUDE_STB_IMAGE_H
    82 #define STBI_INCLUDE_STB_IMAGE_H
    83 
    84 // Limitations:
    85 // - no jpeg progressive support
    86 // - non-HDR formats support 8-bit samples only (jpeg, png)
    87 // - no delayed line count (jpeg) -- IJG doesn't support either
    88 // - no 1-bit BMP
    89 // - GIF always returns *comp=4
    90 //
    91 // Basic usage (see HDR discussion below):
    92 // int x,y,n;
    93 // unsigned char *data = stbi_load(filename, &x, &y, &n, 0);
    94 // // ... process data if not NULL ...
    95 // // ... x = width, y = height, n = # 8-bit components per pixel ...
    96 // // ... replace '0' with '1'..'4' to force that many components per pixel
    97 // // ... but 'n' will always be the number that it would have been if you said 0
    98 // stbi_image_free(data)
    99 //
    100 // Standard parameters:
    101 // int *x -- outputs image width in pixels
    102 // int *y -- outputs image height in pixels
    103 // int *comp -- outputs # of image components in image file
    104 // int req_comp -- if non-zero, # of image components requested in result
    105 //
    106 // The return value from an image loader is an 'unsigned char *' which points
    107 // to the pixel data. The pixel data consists of *y scanlines of *x pixels,
    108 // with each pixel consisting of N interleaved 8-bit components; the first
    109 // pixel pointed to is top-left-most in the image. There is no padding between
    110 // image scanlines or between pixels, regardless of format. The number of
    111 // components N is 'req_comp' if req_comp is non-zero, or *comp otherwise.
    112 // If req_comp is non-zero, *comp has the number of components that _would_
    113 // have been output otherwise. E.g. if you set req_comp to 4, you will always
    114 // get RGBA output, but you can check *comp to easily see if it's opaque.
    115 //
    116 // An output image with N components has the following components interleaved
    117 // in this order in each pixel:
    118 //
    119 // N=#comp components
    120 // 1 grey
    121 // 2 grey, alpha
    122 // 3 red, green, blue
    123 // 4 red, green, blue, alpha
    124 //
    125 // If image loading fails for any reason, the return value will be NULL,
    126 // and *x, *y, *comp will be unchanged. The function stbi_failure_reason()
    127 // can be queried for an extremely brief, end-user unfriendly explanation
    128 // of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid
    129 // compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly
    130 // more user-friendly ones.
    131 //
    132 // Paletted PNG, BMP, GIF, and PIC images are automatically depalettized.
    133 //
    134 // ===========================================================================
    135 //
    136 // iPhone PNG support:
    137 //
    138 // By default we convert iphone-formatted PNGs back to RGB; nominally they
    139 // would silently load as BGR, except the existing code should have just
    140 // failed on such iPhone PNGs. But you can disable this conversion by
    141 // by calling stbi_convert_iphone_png_to_rgb(0), in which case
    142 // you will always just get the native iphone "format" through.
    143 //
    144 // Call stbi_set_unpremultiply_on_load(1) as well to force a divide per
    145 // pixel to remove any premultiplied alpha *only* if the image file explicitly
    146 // says there's premultiplied data (currently only happens in iPhone images,
    147 // and only if iPhone convert-to-rgb processing is on).
    148 //
    149 // ===========================================================================
    150 //
    151 // HDR image support (disable by defining STBI_NO_HDR)
    152 //
    153 // stb_image now supports loading HDR images in general, and currently
    154 // the Radiance .HDR file format, although the support is provided
    155 // generically. You can still load any file through the existing interface;
    156 // if you attempt to load an HDR file, it will be automatically remapped to
    157 // LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1;
    158 // both of these constants can be reconfigured through this interface:
    159 //
    160 // stbi_hdr_to_ldr_gamma(2.2f);
    161 // stbi_hdr_to_ldr_scale(1.0f);
    162 //
    163 // (note, do not use _inverse_ constants; stbi_image will invert them
    164 // appropriately).
    165 //
    166 // Additionally, there is a new, parallel interface for loading files as
    167 // (linear) floats to preserve the full dynamic range:
    168 //
    169 // float *data = stbi_loadf(filename, &x, &y, &n, 0);
    170 //
    171 // If you load LDR images through this interface, those images will
    172 // be promoted to floating point values, run through the inverse of
    173 // constants corresponding to the above:
    174 //
    175 // stbi_ldr_to_hdr_scale(1.0f);
    176 // stbi_ldr_to_hdr_gamma(2.2f);
    177 //
    178 // Finally, given a filename (or an open file or memory block--see header
    179 // file for details) containing image data, you can query for the "most
    180 // appropriate" interface to use (that is, whether the image is HDR or
    181 // not), using:
    182 //
    183 // stbi_is_hdr(char *filename);
    184 //
    185 // ===========================================================================
    186 //
    187 // I/O callbacks
    188 //
    189 // I/O callbacks allow you to read from arbitrary sources, like packaged
    190 // files or some other source. Data read from callbacks are processed
    191 // through a small internal buffer (currently 128 bytes) to try to reduce
    192 // overhead.
    193 //
    194 // The three functions you must define are "read" (reads some bytes of data),
    195 // "skip" (skips some bytes of data), "eof" (reports if the stream is at the end).
    196 
    197 
    198 #ifndef STBI_NO_STDIO
    199 #include <stdio.h>
    200 #endif // STBI_NO_STDIO
    201 
    202 #define STBI_VERSION 1
    203 
    204 enum
    205 {
    206  STBI_default = 0, // only used for req_comp
    207 
    208  STBI_grey = 1,
    209  STBI_grey_alpha = 2,
    210  STBI_rgb = 3,
    211  STBI_rgb_alpha = 4
    212 };
    213 
    214 typedef unsigned char stbi_uc;
    215 
    216 #ifdef __cplusplus
    217 extern "C" {
    218 #endif
    219 
    220 #ifdef STB_IMAGE_STATIC
    221 #define STBIDEF static
    222 #else
    223 #define STBIDEF extern
    224 #endif
    225 
    227 //
    228 // PRIMARY API - works on images of any type
    229 //
    230 
    231 //
    232 // load image by filename, open file, or memory buffer
    233 //
    234 
    235 STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp);
    236 
    237 #ifndef STBI_NO_STDIO
    238 STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *comp, int req_comp);
    239 STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp);
    240 // for stbi_load_from_file, file pointer is left pointing immediately after image
    241 #endif
    242 
    243 typedef struct
    244 {
    245  int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read
    246  void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative
    247  int (*eof) (void *user); // returns nonzero if we are at end of file/data
    249 
    250 STBIDEF stbi_uc *stbi_load_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp);
    251 
    252 #ifndef STBI_NO_HDR
    253  STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp);
    254 
    255  #ifndef STBI_NO_STDIO
    256  STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *comp, int req_comp);
    257  STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *comp, int req_comp);
    258  #endif
    259 
    260  STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp);
    261 
    262  STBIDEF void stbi_hdr_to_ldr_gamma(float gamma);
    263  STBIDEF void stbi_hdr_to_ldr_scale(float scale);
    264 
    265  STBIDEF void stbi_ldr_to_hdr_gamma(float gamma);
    266  STBIDEF void stbi_ldr_to_hdr_scale(float scale);
    267 #endif // STBI_NO_HDR
    268 
    269 // stbi_is_hdr is always defined
    270 STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user);
    271 STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len);
    272 #ifndef STBI_NO_STDIO
    273 STBIDEF int stbi_is_hdr (char const *filename);
    274 STBIDEF int stbi_is_hdr_from_file(FILE *f);
    275 #endif // STBI_NO_STDIO
    276 
    277 
    278 // get a VERY brief reason for failure
    279 // NOT THREADSAFE
    280 STBIDEF const char *stbi_failure_reason (void);
    281 
    282 // free the loaded image -- this is just free()
    283 STBIDEF void stbi_image_free (void *retval_from_stbi_load);
    284 
    285 // get image dimensions & components without fully decoding
    286 STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp);
    287 STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp);
    288 
    289 #ifndef STBI_NO_STDIO
    290 STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp);
    291 STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp);
    292 
    293 #endif
    294 
    295 
    296 
    297 // for image formats that explicitly notate that they have premultiplied alpha,
    298 // we just return the colors as stored in the file. set this flag to force
    299 // unpremultiplication. results are undefined if the unpremultiply overflow.
    300 STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply);
    301 
    302 // indicate whether we should process iphone images back to canonical format,
    303 // or just pass them through "as-is"
    304 STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert);
    305 
    306 
    307 // ZLIB client - used by PNG, available for other purposes
    308 
    309 STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen);
    310 STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header);
    311 STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen);
    312 STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen);
    313 
    314 STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen);
    315 STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen);
    316 
    317 
    318 // define faster low-level operations (typically SIMD support)
    319 #ifdef STBI_SIMD
    320 typedef void (*stbi_idct_8x8)(stbi_uc *out, int out_stride, short data[64], unsigned short *dequantize);
    321 // compute an integer IDCT on "input"
    322 // input[x] = data[x] * dequantize[x]
    323 // write results to 'out': 64 samples, each run of 8 spaced by 'out_stride'
    324 // CLAMP results to 0..255
    325 typedef void (*stbi_YCbCr_to_RGB_run)(stbi_uc *output, stbi_uc const *y, stbi_uc const *cb, stbi_uc const *cr, int count, int step);
    326 // compute a conversion from YCbCr to RGB
    327 // 'count' pixels
    328 // write pixels to 'output'; each pixel is 'step' bytes (either 3 or 4; if 4, write '255' as 4th), order R,G,B
    329 // y: Y input channel
    330 // cb: Cb input channel; scale/biased to be 0..255
    331 // cr: Cr input channel; scale/biased to be 0..255
    332 
    333 STBIDEF void stbi_install_idct(stbi_idct_8x8 func);
    334 STBIDEF void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func);
    335 #endif // STBI_SIMD
    336 
    337 
    338 #ifdef __cplusplus
    339 }
    340 #endif
    341 
    342 //
    343 //
    345 #endif // STBI_INCLUDE_STB_IMAGE_H
    346 
    347 #ifdef STB_IMAGE_IMPLEMENTATION
    348 
    349 #ifndef STBI_NO_HDR
    350 #include <math.h> // ldexp
    351 #include <string.h> // strcmp, strtok
    352 #endif
    353 
    354 #ifndef STBI_NO_STDIO
    355 #include <stdio.h>
    356 #endif
    357 #include <stdlib.h>
    358 #include <string.h>
    359 #ifndef STBI_ASSERT
    360 #include <assert.h>
    361 #define STBI_ASSERT(x) assert(x)
    362 #endif
    363 #include <stdarg.h>
    364 #include <stddef.h> // ptrdiff_t on osx
    365 
    366 #ifndef _MSC_VER
    367  #ifdef __cplusplus
    368  #define stbi_inline inline
    369  #else
    370  #define stbi_inline
    371  #endif
    372 #else
    373  #define stbi_inline __forceinline
    374 #endif
    375 
    376 
    377 #ifdef _MSC_VER
    378 typedef unsigned short stbi__uint16;
    379 typedef signed short stbi__int16;
    380 typedef unsigned int stbi__uint32;
    381 typedef signed int stbi__int32;
    382 #else
    383 #include <stdint.h>
    384 typedef uint16_t stbi__uint16;
    385 typedef int16_t stbi__int16;
    386 typedef uint32_t stbi__uint32;
    387 typedef int32_t stbi__int32;
    388 #endif
    389 
    390 // should produce compiler error if size is wrong
    391 typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1];
    392 
    393 #ifdef _MSC_VER
    394 #define STBI_NOTUSED(v) (void)(v)
    395 #else
    396 #define STBI_NOTUSED(v) (void)sizeof(v)
    397 #endif
    398 
    399 #ifdef _MSC_VER
    400 #define STBI_HAS_LROTL
    401 #endif
    402 
    403 #ifdef STBI_HAS_LROTL
    404  #define stbi_lrot(x,y) _lrotl(x,y)
    405 #else
    406  #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (32 - (y))))
    407 #endif
    408 
    410 //
    411 // stbi__context struct and start_xxx functions
    412 
    413 // stbi__context structure is our basic context used by all images, so it
    414 // contains all the IO context, plus some basic image information
    415 typedef struct
    416 {
    417  stbi__uint32 img_x, img_y;
    418  int img_n, img_out_n;
    419 
    421  void *io_user_data;
    422 
    423  int read_from_callbacks;
    424  int buflen;
    425  stbi_uc buffer_start[128];
    426 
    427  stbi_uc *img_buffer, *img_buffer_end;
    428  stbi_uc *img_buffer_original;
    429 } stbi__context;
    430 
    431 
    432 static void stbi__refill_buffer(stbi__context *s);
    433 
    434 // initialize a memory-decode context
    435 static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len)
    436 {
    437  s->io.read = NULL;
    438  s->read_from_callbacks = 0;
    439  s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer;
    440  s->img_buffer_end = (stbi_uc *) buffer+len;
    441 }
    442 
    443 // initialize a callback-based context
    444 static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user)
    445 {
    446  s->io = *c;
    447  s->io_user_data = user;
    448  s->buflen = sizeof(s->buffer_start);
    449  s->read_from_callbacks = 1;
    450  s->img_buffer_original = s->buffer_start;
    451  stbi__refill_buffer(s);
    452 }
    453 
    454 #ifndef STBI_NO_STDIO
    455 
    456 static int stbi__stdio_read(void *user, char *data, int size)
    457 {
    458  return (int) fread(data,1,size,(FILE*) user);
    459 }
    460 
    461 static void stbi__stdio_skip(void *user, int n)
    462 {
    463  fseek((FILE*) user, n, SEEK_CUR);
    464 }
    465 
    466 static int stbi__stdio_eof(void *user)
    467 {
    468  return feof((FILE*) user);
    469 }
    470 
    471 static stbi_io_callbacks stbi__stdio_callbacks =
    472 {
    473  stbi__stdio_read,
    474  stbi__stdio_skip,
    475  stbi__stdio_eof,
    476 };
    477 
    478 static void stbi__start_file(stbi__context *s, FILE *f)
    479 {
    480  stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f);
    481 }
    482 
    483 //static void stop_file(stbi__context *s) { }
    484 
    485 #endif // !STBI_NO_STDIO
    486 
    487 static void stbi__rewind(stbi__context *s)
    488 {
    489  // conceptually rewind SHOULD rewind to the beginning of the stream,
    490  // but we just rewind to the beginning of the initial buffer, because
    491  // we only use it after doing 'test', which only ever looks at at most 92 bytes
    492  s->img_buffer = s->img_buffer_original;
    493 }
    494 
    495 static int stbi__jpeg_test(stbi__context *s);
    496 static stbi_uc *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
    497 static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp);
    498 static int stbi__png_test(stbi__context *s);
    499 static stbi_uc *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
    500 static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp);
    501 static int stbi__bmp_test(stbi__context *s);
    502 static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
    503 static int stbi__tga_test(stbi__context *s);
    504 static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
    505 static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp);
    506 static int stbi__psd_test(stbi__context *s);
    507 static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
    508 #ifndef STBI_NO_HDR
    509 static int stbi__hdr_test(stbi__context *s);
    510 static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
    511 #endif
    512 static int stbi__pic_test(stbi__context *s);
    513 static stbi_uc *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
    514 static int stbi__gif_test(stbi__context *s);
    515 static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
    516 static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp);
    517 
    518 
    519 // this is not threadsafe
    520 static const char *stbi__g_failure_reason;
    521 
    522 STBIDEF const char *stbi_failure_reason(void)
    523 {
    524  return stbi__g_failure_reason;
    525 }
    526 
    527 static int stbi__err(const char *str)
    528 {
    529  stbi__g_failure_reason = str;
    530  return 0;
    531 }
    532 
    533 static void *stbi__malloc(size_t size)
    534 {
    535  return malloc(size);
    536 }
    537 
    538 // stbi__err - error
    539 // stbi__errpf - error returning pointer to float
    540 // stbi__errpuc - error returning pointer to unsigned char
    541 
    542 #ifdef STBI_NO_FAILURE_STRINGS
    543  #define stbi__err(x,y) 0
    544 #elif defined(STBI_FAILURE_USERMSG)
    545  #define stbi__err(x,y) stbi__err(y)
    546 #else
    547  #define stbi__err(x,y) stbi__err(x)
    548 #endif
    549 
    550 #define stbi__errpf(x,y) ((float *) (stbi__err(x,y)?NULL:NULL))
    551 #define stbi__errpuc(x,y) ((unsigned char *) (stbi__err(x,y)?NULL:NULL))
    552 
    553 STBIDEF void stbi_image_free(void *retval_from_stbi_load)
    554 {
    555  free(retval_from_stbi_load);
    556 }
    557 
    558 #ifndef STBI_NO_HDR
    559 static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp);
    560 static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp);
    561 #endif
    562 
    563 static unsigned char *stbi_load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp)
    564 {
    565  if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp);
    566  if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp);
    567  if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp);
    568  if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp);
    569  if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp);
    570  if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp);
    571 
    572  #ifndef STBI_NO_HDR
    573  if (stbi__hdr_test(s)) {
    574  float *hdr = stbi__hdr_load(s, x,y,comp,req_comp);
    575  return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp);
    576  }
    577  #endif
    578 
    579  // test tga last because it's a crappy test!
    580  if (stbi__tga_test(s))
    581  return stbi__tga_load(s,x,y,comp,req_comp);
    582  return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt");
    583 }
    584 
    585 #ifndef STBI_NO_STDIO
    586 
    587 FILE *stbi__fopen(char const *filename, char const *mode)
    588 {
    589  FILE *f;
    590 #if defined(_MSC_VER) && _MSC_VER >= 1400
    591  if (0 != fopen_s(&f, filename, mode))
    592  f=0;
    593 #else
    594  f = fopen(filename, mode);
    595 #endif
    596  return f;
    597 }
    598 
    599 
    600 STBIDEF unsigned char *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp)
    601 {
    602  FILE *f = stbi__fopen(filename, "rb");
    603  unsigned char *result;
    604  if (!f) return stbi__errpuc("can't fopen", "Unable to open file");
    605  result = stbi_load_from_file(f,x,y,comp,req_comp);
    606  fclose(f);
    607  return result;
    608 }
    609 
    610 STBIDEF unsigned char *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp)
    611 {
    612  unsigned char *result;
    613  stbi__context s;
    614  stbi__start_file(&s,f);
    615  result = stbi_load_main(&s,x,y,comp,req_comp);
    616  if (result) {
    617  // need to 'unget' all the characters in the IO buffer
    618  fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR);
    619  }
    620  return result;
    621 }
    622 #endif
    623 
    624 STBIDEF unsigned char *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp)
    625 {
    626  stbi__context s;
    627  stbi__start_mem(&s,buffer,len);
    628  return stbi_load_main(&s,x,y,comp,req_comp);
    629 }
    630 
    631 unsigned char *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp)
    632 {
    633  stbi__context s;
    634  stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user);
    635  return stbi_load_main(&s,x,y,comp,req_comp);
    636 }
    637 
    638 #ifndef STBI_NO_HDR
    639 
    640 float *stbi_loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp)
    641 {
    642  unsigned char *data;
    643  #ifndef STBI_NO_HDR
    644  if (stbi__hdr_test(s))
    645  return stbi__hdr_load(s,x,y,comp,req_comp);
    646  #endif
    647  data = stbi_load_main(s, x, y, comp, req_comp);
    648  if (data)
    649  return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp);
    650  return stbi__errpf("unknown image type", "Image not of any known type, or corrupt");
    651 }
    652 
    653 float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp)
    654 {
    655  stbi__context s;
    656  stbi__start_mem(&s,buffer,len);
    657  return stbi_loadf_main(&s,x,y,comp,req_comp);
    658 }
    659 
    660 float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp)
    661 {
    662  stbi__context s;
    663  stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user);
    664  return stbi_loadf_main(&s,x,y,comp,req_comp);
    665 }
    666 
    667 #ifndef STBI_NO_STDIO
    668 float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp)
    669 {
    670  float *result;
    671  FILE *f = stbi__fopen(filename, "rb");
    672  if (!f) return stbi__errpf("can't fopen", "Unable to open file");
    673  result = stbi_loadf_from_file(f,x,y,comp,req_comp);
    674  fclose(f);
    675  return result;
    676 }
    677 
    678 float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp)
    679 {
    680  stbi__context s;
    681  stbi__start_file(&s,f);
    682  return stbi_loadf_main(&s,x,y,comp,req_comp);
    683 }
    684 #endif // !STBI_NO_STDIO
    685 
    686 #endif // !STBI_NO_HDR
    687 
    688 // these is-hdr-or-not is defined independent of whether STBI_NO_HDR is
    689 // defined, for API simplicity; if STBI_NO_HDR is defined, it always
    690 // reports false!
    691 
    692 int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len)
    693 {
    694  #ifndef STBI_NO_HDR
    695  stbi__context s;
    696  stbi__start_mem(&s,buffer,len);
    697  return stbi__hdr_test(&s);
    698  #else
    699  STBI_NOTUSED(buffer);
    700  STBI_NOTUSED(len);
    701  return 0;
    702  #endif
    703 }
    704 
    705 #ifndef STBI_NO_STDIO
    706 STBIDEF int stbi_is_hdr (char const *filename)
    707 {
    708  FILE *f = stbi__fopen(filename, "rb");
    709  int result=0;
    710  if (f) {
    711  result = stbi_is_hdr_from_file(f);
    712  fclose(f);
    713  }
    714  return result;
    715 }
    716 
    717 STBIDEF int stbi_is_hdr_from_file(FILE *f)
    718 {
    719  #ifndef STBI_NO_HDR
    720  stbi__context s;
    721  stbi__start_file(&s,f);
    722  return stbi__hdr_test(&s);
    723  #else
    724  return 0;
    725  #endif
    726 }
    727 #endif // !STBI_NO_STDIO
    728 
    729 STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user)
    730 {
    731  #ifndef STBI_NO_HDR
    732  stbi__context s;
    733  stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user);
    734  return stbi__hdr_test(&s);
    735  #else
    736  return 0;
    737  #endif
    738 }
    739 
    740 #ifndef STBI_NO_HDR
    741 static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f;
    742 static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f;
    743 
    744 void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; }
    745 void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; }
    746 
    747 void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; }
    748 void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; }
    749 #endif
    750 
    751 
    753 //
    754 // Common code used by all image loaders
    755 //
    756 
    757 enum
    758 {
    759  SCAN_load=0,
    760  SCAN_type,
    761  SCAN_header
    762 };
    763 
    764 static void stbi__refill_buffer(stbi__context *s)
    765 {
    766  int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen);
    767  if (n == 0) {
    768  // at end of file, treat same as if from memory, but need to handle case
    769  // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file
    770  s->read_from_callbacks = 0;
    771  s->img_buffer = s->buffer_start;
    772  s->img_buffer_end = s->buffer_start+1;
    773  *s->img_buffer = 0;
    774  } else {
    775  s->img_buffer = s->buffer_start;
    776  s->img_buffer_end = s->buffer_start + n;
    777  }
    778 }
    779 
    780 stbi_inline static stbi_uc stbi__get8(stbi__context *s)
    781 {
    782  if (s->img_buffer < s->img_buffer_end)
    783  return *s->img_buffer++;
    784  if (s->read_from_callbacks) {
    785  stbi__refill_buffer(s);
    786  return *s->img_buffer++;
    787  }
    788  return 0;
    789 }
    790 
    791 stbi_inline static int stbi__at_eof(stbi__context *s)
    792 {
    793  if (s->io.read) {
    794  if (!(s->io.eof)(s->io_user_data)) return 0;
    795  // if feof() is true, check if buffer = end
    796  // special case: we've only got the special 0 character at the end
    797  if (s->read_from_callbacks == 0) return 1;
    798  }
    799 
    800  return s->img_buffer >= s->img_buffer_end;
    801 }
    802 
    803 static void stbi__skip(stbi__context *s, int n)
    804 {
    805  if (s->io.read) {
    806  int blen = (int) (s->img_buffer_end - s->img_buffer);
    807  if (blen < n) {
    808  s->img_buffer = s->img_buffer_end;
    809  (s->io.skip)(s->io_user_data, n - blen);
    810  return;
    811  }
    812  }
    813  s->img_buffer += n;
    814 }
    815 
    816 static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n)
    817 {
    818  if (s->io.read) {
    819  int blen = (int) (s->img_buffer_end - s->img_buffer);
    820  if (blen < n) {
    821  int res, count;
    822 
    823  memcpy(buffer, s->img_buffer, blen);
    824 
    825  count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen);
    826  res = (count == (n-blen));
    827  s->img_buffer = s->img_buffer_end;
    828  return res;
    829  }
    830  }
    831 
    832  if (s->img_buffer+n <= s->img_buffer_end) {
    833  memcpy(buffer, s->img_buffer, n);
    834  s->img_buffer += n;
    835  return 1;
    836  } else
    837  return 0;
    838 }
    839 
    840 static int stbi__get16be(stbi__context *s)
    841 {
    842  int z = stbi__get8(s);
    843  return (z << 8) + stbi__get8(s);
    844 }
    845 
    846 static stbi__uint32 stbi__get32be(stbi__context *s)
    847 {
    848  stbi__uint32 z = stbi__get16be(s);
    849  return (z << 16) + stbi__get16be(s);
    850 }
    851 
    852 static int stbi__get16le(stbi__context *s)
    853 {
    854  int z = stbi__get8(s);
    855  return z + (stbi__get8(s) << 8);
    856 }
    857 
    858 static stbi__uint32 stbi__get32le(stbi__context *s)
    859 {
    860  stbi__uint32 z = stbi__get16le(s);
    861  return z + (stbi__get16le(s) << 16);
    862 }
    863 
    865 //
    866 // generic converter from built-in img_n to req_comp
    867 // individual types do this automatically as much as possible (e.g. jpeg
    868 // does all cases internally since it needs to colorspace convert anyway,
    869 // and it never has alpha, so very few cases ). png can automatically
    870 // interleave an alpha=255 channel, but falls back to this for other cases
    871 //
    872 // assume data buffer is malloced, so malloc a new one and free that one
    873 // only failure mode is malloc failing
    874 
    875 static stbi_uc stbi__compute_y(int r, int g, int b)
    876 {
    877  return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8);
    878 }
    879 
    880 static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y)
    881 {
    882  int i,j;
    883  unsigned char *good;
    884 
    885  if (req_comp == img_n) return data;
    886  STBI_ASSERT(req_comp >= 1 && req_comp <= 4);
    887 
    888  good = (unsigned char *) stbi__malloc(req_comp * x * y);
    889  if (good == NULL) {
    890  free(data);
    891  return stbi__errpuc("outofmem", "Out of memory");
    892  }
    893 
    894  for (j=0; j < (int) y; ++j) {
    895  unsigned char *src = data + j * x * img_n ;
    896  unsigned char *dest = good + j * x * req_comp;
    897 
    898  #define COMBO(a,b) ((a)*8+(b))
    899  #define CASE(a,b) case COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b)
    900  // convert source image with img_n components to one with req_comp components;
    901  // avoid switch per pixel, so use switch per scanline and massive macros
    902  switch (COMBO(img_n, req_comp)) {
    903  CASE(1,2) dest[0]=src[0], dest[1]=255; break;
    904  CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break;
    905  CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break;
    906  CASE(2,1) dest[0]=src[0]; break;
    907  CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break;
    908  CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break;
    909  CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break;
    910  CASE(3,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break;
    911  CASE(3,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = 255; break;
    912  CASE(4,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break;
    913  CASE(4,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break;
    914  CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break;
    915  default: STBI_ASSERT(0);
    916  }
    917  #undef CASE
    918  }
    919 
    920  free(data);
    921  return good;
    922 }
    923 
    924 #ifndef STBI_NO_HDR
    925 static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp)
    926 {
    927  int i,k,n;
    928  float *output = (float *) stbi__malloc(x * y * comp * sizeof(float));
    929  if (output == NULL) { free(data); return stbi__errpf("outofmem", "Out of memory"); }
    930  // compute number of non-alpha components
    931  if (comp & 1) n = comp; else n = comp-1;
    932  for (i=0; i < x*y; ++i) {
    933  for (k=0; k < n; ++k) {
    934  output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale);
    935  }
    936  if (k < comp) output[i*comp + k] = data[i*comp+k]/255.0f;
    937  }
    938  free(data);
    939  return output;
    940 }
    941 
    942 #define stbi__float2int(x) ((int) (x))
    943 static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp)
    944 {
    945  int i,k,n;
    946  stbi_uc *output = (stbi_uc *) stbi__malloc(x * y * comp);
    947  if (output == NULL) { free(data); return stbi__errpuc("outofmem", "Out of memory"); }
    948  // compute number of non-alpha components
    949  if (comp & 1) n = comp; else n = comp-1;
    950  for (i=0; i < x*y; ++i) {
    951  for (k=0; k < n; ++k) {
    952  float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f;
    953  if (z < 0) z = 0;
    954  if (z > 255) z = 255;
    955  output[i*comp + k] = (stbi_uc) stbi__float2int(z);
    956  }
    957  if (k < comp) {
    958  float z = data[i*comp+k] * 255 + 0.5f;
    959  if (z < 0) z = 0;
    960  if (z > 255) z = 255;
    961  output[i*comp + k] = (stbi_uc) stbi__float2int(z);
    962  }
    963  }
    964  free(data);
    965  return output;
    966 }
    967 #endif
    968 
    970 //
    971 // "baseline" JPEG/JFIF decoder (not actually fully baseline implementation)
    972 //
    973 // simple implementation
    974 // - channel subsampling of at most 2 in each dimension
    975 // - doesn't support delayed output of y-dimension
    976 // - simple interface (only one output format: 8-bit interleaved RGB)
    977 // - doesn't try to recover corrupt jpegs
    978 // - doesn't allow partial loading, loading multiple at once
    979 // - still fast on x86 (copying globals into locals doesn't help x86)
    980 // - allocates lots of intermediate memory (full size of all components)
    981 // - non-interleaved case requires this anyway
    982 // - allows good upsampling (see next)
    983 // high-quality
    984 // - upsampled channels are bilinearly interpolated, even across blocks
    985 // - quality integer IDCT derived from IJG's 'slow'
    986 // performance
    987 // - fast huffman; reasonable integer IDCT
    988 // - uses a lot of intermediate memory, could cache poorly
    989 // - load http://nothings.org/remote/anemones.jpg 3 times on 2.8Ghz P4
    990 // stb_jpeg: 1.34 seconds (MSVC6, default release build)
    991 // stb_jpeg: 1.06 seconds (MSVC6, processor = Pentium Pro)
    992 // IJL11.dll: 1.08 seconds (compiled by intel)
    993 // IJG 1998: 0.98 seconds (MSVC6, makefile provided by IJG)
    994 // IJG 1998: 0.95 seconds (MSVC6, makefile + proc=PPro)
    995 
    996 // huffman decoding acceleration
    997 #define FAST_BITS 9 // larger handles more cases; smaller stomps less cache
    998 
    999 typedef struct
    1000 {
    1001  stbi_uc fast[1 << FAST_BITS];
    1002  // weirdly, repacking this into AoS is a 10% speed loss, instead of a win
    1003  stbi__uint16 code[256];
    1004  stbi_uc values[256];
    1005  stbi_uc size[257];
    1006  unsigned int maxcode[18];
    1007  int delta[17]; // old 'firstsymbol' - old 'firstcode'
    1008 } stbi__huffman;
    1009 
    1010 typedef struct
    1011 {
    1012  #ifdef STBI_SIMD
    1013  unsigned short dequant2[4][64];
    1014  #endif
    1015  stbi__context *s;
    1016  stbi__huffman huff_dc[4];
    1017  stbi__huffman huff_ac[4];
    1018  stbi_uc dequant[4][64];
    1019 
    1020 // sizes for components, interleaved MCUs
    1021  int img_h_max, img_v_max;
    1022  int img_mcu_x, img_mcu_y;
    1023  int img_mcu_w, img_mcu_h;
    1024 
    1025 // definition of jpeg image component
    1026  struct
    1027  {
    1028  int id;
    1029  int h,v;
    1030  int tq;
    1031  int hd,ha;
    1032  int dc_pred;
    1033 
    1034  int x,y,w2,h2;
    1035  stbi_uc *data;
    1036  void *raw_data;
    1037  stbi_uc *linebuf;
    1038  } img_comp[4];
    1039 
    1040  stbi__uint32 code_buffer; // jpeg entropy-coded buffer
    1041  int code_bits; // number of valid bits
    1042  unsigned char marker; // marker seen while filling entropy buffer
    1043  int nomore; // flag if we saw a marker so must stop
    1044 
    1045  int scan_n, order[4];
    1046  int restart_interval, todo;
    1047 } stbi__jpeg;
    1048 
    1049 static int stbi__build_huffman(stbi__huffman *h, int *count)
    1050 {
    1051  int i,j,k=0,code;
    1052  // build size list for each symbol (from JPEG spec)
    1053  for (i=0; i < 16; ++i)
    1054  for (j=0; j < count[i]; ++j)
    1055  h->size[k++] = (stbi_uc) (i+1);
    1056  h->size[k] = 0;
    1057 
    1058  // compute actual symbols (from jpeg spec)
    1059  code = 0;
    1060  k = 0;
    1061  for(j=1; j <= 16; ++j) {
    1062  // compute delta to add to code to compute symbol id
    1063  h->delta[j] = k - code;
    1064  if (h->size[k] == j) {
    1065  while (h->size[k] == j)
    1066  h->code[k++] = (stbi__uint16) (code++);
    1067  if (code-1 >= (1 << j)) return stbi__err("bad code lengths","Corrupt JPEG");
    1068  }
    1069  // compute largest code + 1 for this size, preshifted as needed later
    1070  h->maxcode[j] = code << (16-j);
    1071  code <<= 1;
    1072  }
    1073  h->maxcode[j] = 0xffffffff;
    1074 
    1075  // build non-spec acceleration table; 255 is flag for not-accelerated
    1076  memset(h->fast, 255, 1 << FAST_BITS);
    1077  for (i=0; i < k; ++i) {
    1078  int s = h->size[i];
    1079  if (s <= FAST_BITS) {
    1080  int c = h->code[i] << (FAST_BITS-s);
    1081  int m = 1 << (FAST_BITS-s);
    1082  for (j=0; j < m; ++j) {
    1083  h->fast[c+j] = (stbi_uc) i;
    1084  }
    1085  }
    1086  }
    1087  return 1;
    1088 }
    1089 
    1090 static void stbi__grow_buffer_unsafe(stbi__jpeg *j)
    1091 {
    1092  do {
    1093  int b = j->nomore ? 0 : stbi__get8(j->s);
    1094  if (b == 0xff) {
    1095  int c = stbi__get8(j->s);
    1096  if (c != 0) {
    1097  j->marker = (unsigned char) c;
    1098  j->nomore = 1;
    1099  return;
    1100  }
    1101  }
    1102  j->code_buffer |= b << (24 - j->code_bits);
    1103  j->code_bits += 8;
    1104  } while (j->code_bits <= 24);
    1105 }
    1106 
    1107 // (1 << n) - 1
    1108 static stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535};
    1109 
    1110 // decode a jpeg huffman value from the bitstream
    1111 stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h)
    1112 {
    1113  unsigned int temp;
    1114  int c,k;
    1115 
    1116  if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
    1117 
    1118  // look at the top FAST_BITS and determine what symbol ID it is,
    1119  // if the code is <= FAST_BITS
    1120  c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1);
    1121  k = h->fast[c];
    1122  if (k < 255) {
    1123  int s = h->size[k];
    1124  if (s > j->code_bits)
    1125  return -1;
    1126  j->code_buffer <<= s;
    1127  j->code_bits -= s;
    1128  return h->values[k];
    1129  }
    1130 
    1131  // naive test is to shift the code_buffer down so k bits are
    1132  // valid, then test against maxcode. To speed this up, we've
    1133  // preshifted maxcode left so that it has (16-k) 0s at the
    1134  // end; in other words, regardless of the number of bits, it
    1135  // wants to be compared against something shifted to have 16;
    1136  // that way we don't need to shift inside the loop.
    1137  temp = j->code_buffer >> 16;
    1138  for (k=FAST_BITS+1 ; ; ++k)
    1139  if (temp < h->maxcode[k])
    1140  break;
    1141  if (k == 17) {
    1142  // error! code not found
    1143  j->code_bits -= 16;
    1144  return -1;
    1145  }
    1146 
    1147  if (k > j->code_bits)
    1148  return -1;
    1149 
    1150  // convert the huffman code to the symbol id
    1151  c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k];
    1152  STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]);
    1153 
    1154  // convert the id to a symbol
    1155  j->code_bits -= k;
    1156  j->code_buffer <<= k;
    1157  return h->values[c];
    1158 }
    1159 
    1160 // combined JPEG 'receive' and JPEG 'extend', since baseline
    1161 // always extends everything it receives.
    1162 stbi_inline static int stbi__extend_receive(stbi__jpeg *j, int n)
    1163 {
    1164  unsigned int m = 1 << (n-1);
    1165  unsigned int k;
    1166  if (j->code_bits < n) stbi__grow_buffer_unsafe(j);
    1167 
    1168  #if 1
    1169  k = stbi_lrot(j->code_buffer, n);
    1170  j->code_buffer = k & ~stbi__bmask[n];
    1171  k &= stbi__bmask[n];
    1172  j->code_bits -= n;
    1173  #else
    1174  k = (j->code_buffer >> (32 - n)) & stbi__bmask[n];
    1175  j->code_bits -= n;
    1176  j->code_buffer <<= n;
    1177  #endif
    1178  // the following test is probably a random branch that won't
    1179  // predict well. I tried to table accelerate it but failed.
    1180  // maybe it's compiling as a conditional move?
    1181  if (k < m)
    1182  return (-1 << n) + k + 1;
    1183  else
    1184  return k;
    1185 }
    1186 
    1187 // given a value that's at position X in the zigzag stream,
    1188 // where does it appear in the 8x8 matrix coded as row-major?
    1189 static stbi_uc stbi__jpeg_dezigzag[64+15] =
    1190 {
    1191  0, 1, 8, 16, 9, 2, 3, 10,
    1192  17, 24, 32, 25, 18, 11, 4, 5,
    1193  12, 19, 26, 33, 40, 48, 41, 34,
    1194  27, 20, 13, 6, 7, 14, 21, 28,
    1195  35, 42, 49, 56, 57, 50, 43, 36,
    1196  29, 22, 15, 23, 30, 37, 44, 51,
    1197  58, 59, 52, 45, 38, 31, 39, 46,
    1198  53, 60, 61, 54, 47, 55, 62, 63,
    1199  // let corrupt input sample past end
    1200  63, 63, 63, 63, 63, 63, 63, 63,
    1201  63, 63, 63, 63, 63, 63, 63
    1202 };
    1203 
    1204 // decode one 64-entry block--
    1205 static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, int b)
    1206 {
    1207  int diff,dc,k;
    1208  int t = stbi__jpeg_huff_decode(j, hdc);
    1209  if (t < 0) return stbi__err("bad huffman code","Corrupt JPEG");
    1210 
    1211  // 0 all the ac values now so we can do it 32-bits at a time
    1212  memset(data,0,64*sizeof(data[0]));
    1213 
    1214  diff = t ? stbi__extend_receive(j, t) : 0;
    1215  dc = j->img_comp[b].dc_pred + diff;
    1216  j->img_comp[b].dc_pred = dc;
    1217  data[0] = (short) dc;
    1218 
    1219  // decode AC components, see JPEG spec
    1220  k = 1;
    1221  do {
    1222  int r,s;
    1223  int rs = stbi__jpeg_huff_decode(j, hac);
    1224  if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG");
    1225  s = rs & 15;
    1226  r = rs >> 4;
    1227  if (s == 0) {
    1228  if (rs != 0xf0) break; // end block
    1229  k += 16;
    1230  } else {
    1231  k += r;
    1232  // decode into unzigzag'd location
    1233  data[stbi__jpeg_dezigzag[k++]] = (short) stbi__extend_receive(j,s);
    1234  }
    1235  } while (k < 64);
    1236  return 1;
    1237 }
    1238 
    1239 // take a -128..127 value and stbi__clamp it and convert to 0..255
    1240 stbi_inline static stbi_uc stbi__clamp(int x)
    1241 {
    1242  // trick to use a single test to catch both cases
    1243  if ((unsigned int) x > 255) {
    1244  if (x < 0) return 0;
    1245  if (x > 255) return 255;
    1246  }
    1247  return (stbi_uc) x;
    1248 }
    1249 
    1250 #define stbi__f2f(x) (int) (((x) * 4096 + 0.5))
    1251 #define stbi__fsh(x) ((x) << 12)
    1252 
    1253 // derived from jidctint -- DCT_ISLOW
    1254 #define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \
    1255  int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \
    1256  p2 = s2; \
    1257  p3 = s6; \
    1258  p1 = (p2+p3) * stbi__f2f(0.5411961f); \
    1259  t2 = p1 + p3*stbi__f2f(-1.847759065f); \
    1260  t3 = p1 + p2*stbi__f2f( 0.765366865f); \
    1261  p2 = s0; \
    1262  p3 = s4; \
    1263  t0 = stbi__fsh(p2+p3); \
    1264  t1 = stbi__fsh(p2-p3); \
    1265  x0 = t0+t3; \
    1266  x3 = t0-t3; \
    1267  x1 = t1+t2; \
    1268  x2 = t1-t2; \
    1269  t0 = s7; \
    1270  t1 = s5; \
    1271  t2 = s3; \
    1272  t3 = s1; \
    1273  p3 = t0+t2; \
    1274  p4 = t1+t3; \
    1275  p1 = t0+t3; \
    1276  p2 = t1+t2; \
    1277  p5 = (p3+p4)*stbi__f2f( 1.175875602f); \
    1278  t0 = t0*stbi__f2f( 0.298631336f); \
    1279  t1 = t1*stbi__f2f( 2.053119869f); \
    1280  t2 = t2*stbi__f2f( 3.072711026f); \
    1281  t3 = t3*stbi__f2f( 1.501321110f); \
    1282  p1 = p5 + p1*stbi__f2f(-0.899976223f); \
    1283  p2 = p5 + p2*stbi__f2f(-2.562915447f); \
    1284  p3 = p3*stbi__f2f(-1.961570560f); \
    1285  p4 = p4*stbi__f2f(-0.390180644f); \
    1286  t3 += p1+p4; \
    1287  t2 += p2+p3; \
    1288  t1 += p2+p4; \
    1289  t0 += p1+p3;
    1290 
    1291 #ifdef STBI_SIMD
    1292 typedef unsigned short stbi_dequantize_t;
    1293 #else
    1294 typedef stbi_uc stbi_dequantize_t;
    1295 #endif
    1296 
    1297 // .344 seconds on 3*anemones.jpg
    1298 static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64], stbi_dequantize_t *dequantize)
    1299 {
    1300  int i,val[64],*v=val;
    1301  stbi_dequantize_t *dq = dequantize;
    1302  stbi_uc *o;
    1303  short *d = data;
    1304 
    1305  // columns
    1306  for (i=0; i < 8; ++i,++d,++dq, ++v) {
    1307  // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing
    1308  if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0
    1309  && d[40]==0 && d[48]==0 && d[56]==0) {
    1310  // no shortcut 0 seconds
    1311  // (1|2|3|4|5|6|7)==0 0 seconds
    1312  // all separate -0.047 seconds
    1313  // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds
    1314  int dcterm = d[0] * dq[0] << 2;
    1315  v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm;
    1316  } else {
    1317  STBI__IDCT_1D(d[ 0]*dq[ 0],d[ 8]*dq[ 8],d[16]*dq[16],d[24]*dq[24],
    1318  d[32]*dq[32],d[40]*dq[40],d[48]*dq[48],d[56]*dq[56])
    1319  // constants scaled things up by 1<<12; let's bring them back
    1320  // down, but keep 2 extra bits of precision
    1321  x0 += 512; x1 += 512; x2 += 512; x3 += 512;
    1322  v[ 0] = (x0+t3) >> 10;
    1323  v[56] = (x0-t3) >> 10;
    1324  v[ 8] = (x1+t2) >> 10;
    1325  v[48] = (x1-t2) >> 10;
    1326  v[16] = (x2+t1) >> 10;
    1327  v[40] = (x2-t1) >> 10;
    1328  v[24] = (x3+t0) >> 10;
    1329  v[32] = (x3-t0) >> 10;
    1330  }
    1331  }
    1332 
    1333  for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) {
    1334  // no fast case since the first 1D IDCT spread components out
    1335  STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7])
    1336  // constants scaled things up by 1<<12, plus we had 1<<2 from first
    1337  // loop, plus horizontal and vertical each scale by sqrt(8) so together
    1338  // we've got an extra 1<<3, so 1<<17 total we need to remove.
    1339  // so we want to round that, which means adding 0.5 * 1<<17,
    1340  // aka 65536. Also, we'll end up with -128 to 127 that we want
    1341  // to encode as 0..255 by adding 128, so we'll add that before the shift
    1342  x0 += 65536 + (128<<17);
    1343  x1 += 65536 + (128<<17);
    1344  x2 += 65536 + (128<<17);
    1345  x3 += 65536 + (128<<17);
    1346  // tried computing the shifts into temps, or'ing the temps to see
    1347  // if any were out of range, but that was slower
    1348  o[0] = stbi__clamp((x0+t3) >> 17);
    1349  o[7] = stbi__clamp((x0-t3) >> 17);
    1350  o[1] = stbi__clamp((x1+t2) >> 17);
    1351  o[6] = stbi__clamp((x1-t2) >> 17);
    1352  o[2] = stbi__clamp((x2+t1) >> 17);
    1353  o[5] = stbi__clamp((x2-t1) >> 17);
    1354  o[3] = stbi__clamp((x3+t0) >> 17);
    1355  o[4] = stbi__clamp((x3-t0) >> 17);
    1356  }
    1357 }
    1358 
    1359 #ifdef STBI_SIMD
    1360 static stbi_idct_8x8 stbi__idct_installed = stbi__idct_block;
    1361 
    1362 STBIDEF void stbi_install_idct(stbi_idct_8x8 func)
    1363 {
    1364  stbi__idct_installed = func;
    1365 }
    1366 #endif
    1367 
    1368 #define STBI__MARKER_none 0xff
    1369 // if there's a pending marker from the entropy stream, return that
    1370 // otherwise, fetch from the stream and get a marker. if there's no
    1371 // marker, return 0xff, which is never a valid marker value
    1372 static stbi_uc stbi__get_marker(stbi__jpeg *j)
    1373 {
    1374  stbi_uc x;
    1375  if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; }
    1376  x = stbi__get8(j->s);
    1377  if (x != 0xff) return STBI__MARKER_none;
    1378  while (x == 0xff)
    1379  x = stbi__get8(j->s);
    1380  return x;
    1381 }
    1382 
    1383 // in each scan, we'll have scan_n components, and the order
    1384 // of the components is specified by order[]
    1385 #define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7)
    1386 
    1387 // after a restart interval, stbi__jpeg_reset the entropy decoder and
    1388 // the dc prediction
    1389 static void stbi__jpeg_reset(stbi__jpeg *j)
    1390 {
    1391  j->code_bits = 0;
    1392  j->code_buffer = 0;
    1393  j->nomore = 0;
    1394  j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = 0;
    1395  j->marker = STBI__MARKER_none;
    1396  j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff;
    1397  // no more than 1<<31 MCUs if no restart_interal? that's plenty safe,
    1398  // since we don't even allow 1<<30 pixels
    1399 }
    1400 
    1401 static int stbi__parse_entropy_coded_data(stbi__jpeg *z)
    1402 {
    1403  stbi__jpeg_reset(z);
    1404  if (z->scan_n == 1) {
    1405  int i,j;
    1406  #ifdef STBI_SIMD
    1407  __declspec(align(16))
    1408  #endif
    1409  short data[64];
    1410  int n = z->order[0];
    1411  // non-interleaved data, we just need to process one block at a time,
    1412  // in trivial scanline order
    1413  // number of blocks to do just depends on how many actual "pixels" this
    1414  // component has, independent of interleaved MCU blocking and such
    1415  int w = (z->img_comp[n].x+7) >> 3;
    1416  int h = (z->img_comp[n].y+7) >> 3;
    1417  for (j=0; j < h; ++j) {
    1418  for (i=0; i < w; ++i) {
    1419  if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+z->img_comp[n].ha, n)) return 0;
    1420  #ifdef STBI_SIMD
    1421  stbi__idct_installed(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data, z->dequant2[z->img_comp[n].tq]);
    1422  #else
    1423  stbi__idct_block(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data, z->dequant[z->img_comp[n].tq]);
    1424  #endif
    1425  // every data block is an MCU, so countdown the restart interval
    1426  if (--z->todo <= 0) {
    1427  if (z->code_bits < 24) stbi__grow_buffer_unsafe(z);
    1428  // if it's NOT a restart, then just bail, so we get corrupt data
    1429  // rather than no data
    1430  if (!STBI__RESTART(z->marker)) return 1;
    1431  stbi__jpeg_reset(z);
    1432  }
    1433  }
    1434  }
    1435  } else { // interleaved!
    1436  int i,j,k,x,y;
    1437  short data[64];
    1438  for (j=0; j < z->img_mcu_y; ++j) {
    1439  for (i=0; i < z->img_mcu_x; ++i) {
    1440  // scan an interleaved mcu... process scan_n components in order
    1441  for (k=0; k < z->scan_n; ++k) {
    1442  int n = z->order[k];
    1443  // scan out an mcu's worth of this component; that's just determined
    1444  // by the basic H and V specified for the component
    1445  for (y=0; y < z->img_comp[n].v; ++y) {
    1446  for (x=0; x < z->img_comp[n].h; ++x) {
    1447  int x2 = (i*z->img_comp[n].h + x)*8;
    1448  int y2 = (j*z->img_comp[n].v + y)*8;
    1449  if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+z->img_comp[n].ha, n)) return 0;
    1450  #ifdef STBI_SIMD
    1451  stbi__idct_installed(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data, z->dequant2[z->img_comp[n].tq]);
    1452  #else
    1453  stbi__idct_block(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data, z->dequant[z->img_comp[n].tq]);
    1454  #endif
    1455  }
    1456  }
    1457  }
    1458  // after all interleaved components, that's an interleaved MCU,
    1459  // so now count down the restart interval
    1460  if (--z->todo <= 0) {
    1461  if (z->code_bits < 24) stbi__grow_buffer_unsafe(z);
    1462  // if it's NOT a restart, then just bail, so we get corrupt data
    1463  // rather than no data
    1464  if (!STBI__RESTART(z->marker)) return 1;
    1465  stbi__jpeg_reset(z);
    1466  }
    1467  }
    1468  }
    1469  }
    1470  return 1;
    1471 }
    1472 
    1473 static int stbi__process_marker(stbi__jpeg *z, int m)
    1474 {
    1475  int L;
    1476  switch (m) {
    1477  case STBI__MARKER_none: // no marker found
    1478  return stbi__err("expected marker","Corrupt JPEG");
    1479 
    1480  case 0xC2: // stbi__SOF - progressive
    1481  return stbi__err("progressive jpeg","JPEG format not supported (progressive)");
    1482 
    1483  case 0xDD: // DRI - specify restart interval
    1484  if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG");
    1485  z->restart_interval = stbi__get16be(z->s);
    1486  return 1;
    1487 
    1488  case 0xDB: // DQT - define quantization table
    1489  L = stbi__get16be(z->s)-2;
    1490  while (L > 0) {
    1491  int q = stbi__get8(z->s);
    1492  int p = q >> 4;
    1493  int t = q & 15,i;
    1494  if (p != 0) return stbi__err("bad DQT type","Corrupt JPEG");
    1495  if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG");
    1496  for (i=0; i < 64; ++i)
    1497  z->dequant[t][stbi__jpeg_dezigzag[i]] = stbi__get8(z->s);
    1498  #ifdef STBI_SIMD
    1499  for (i=0; i < 64; ++i)
    1500  z->dequant2[t][i] = z->dequant[t][i];
    1501  #endif
    1502  L -= 65;
    1503  }
    1504  return L==0;
    1505 
    1506  case 0xC4: // DHT - define huffman table
    1507  L = stbi__get16be(z->s)-2;
    1508  while (L > 0) {
    1509  stbi_uc *v;
    1510  int sizes[16],i,n=0;
    1511  int q = stbi__get8(z->s);
    1512  int tc = q >> 4;
    1513  int th = q & 15;
    1514  if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG");
    1515  for (i=0; i < 16; ++i) {
    1516  sizes[i] = stbi__get8(z->s);
    1517  n += sizes[i];
    1518  }
    1519  L -= 17;
    1520  if (tc == 0) {
    1521  if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0;
    1522  v = z->huff_dc[th].values;
    1523  } else {
    1524  if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0;
    1525  v = z->huff_ac[th].values;
    1526  }
    1527  for (i=0; i < n; ++i)
    1528  v[i] = stbi__get8(z->s);
    1529  L -= n;
    1530  }
    1531  return L==0;
    1532  }
    1533  // check for comment block or APP blocks
    1534  if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) {
    1535  stbi__skip(z->s, stbi__get16be(z->s)-2);
    1536  return 1;
    1537  }
    1538  return 0;
    1539 }
    1540 
    1541 // after we see stbi__SOS
    1542 static int stbi__process_scan_header(stbi__jpeg *z)
    1543 {
    1544  int i;
    1545  int Ls = stbi__get16be(z->s);
    1546  z->scan_n = stbi__get8(z->s);
    1547  if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad stbi__SOS component count","Corrupt JPEG");
    1548  if (Ls != 6+2*z->scan_n) return stbi__err("bad stbi__SOS len","Corrupt JPEG");
    1549  for (i=0; i < z->scan_n; ++i) {
    1550  int id = stbi__get8(z->s), which;
    1551  int q = stbi__get8(z->s);
    1552  for (which = 0; which < z->s->img_n; ++which)
    1553  if (z->img_comp[which].id == id)
    1554  break;
    1555  if (which == z->s->img_n) return 0;
    1556  z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG");
    1557  z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG");
    1558  z->order[i] = which;
    1559  }
    1560  if (stbi__get8(z->s) != 0) return stbi__err("bad stbi__SOS","Corrupt JPEG");
    1561  stbi__get8(z->s); // should be 63, but might be 0
    1562  if (stbi__get8(z->s) != 0) return stbi__err("bad stbi__SOS","Corrupt JPEG");
    1563 
    1564  return 1;
    1565 }
    1566 
    1567 static int stbi__process_frame_header(stbi__jpeg *z, int scan)
    1568 {
    1569  stbi__context *s = z->s;
    1570  int Lf,p,i,q, h_max=1,v_max=1,c;
    1571  Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad stbi__SOF len","Corrupt JPEG"); // JPEG
    1572  p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline
    1573  s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG
    1574  s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires
    1575  c = stbi__get8(s);
    1576  if (c != 3 && c != 1) return stbi__err("bad component count","Corrupt JPEG"); // JFIF requires
    1577  s->img_n = c;
    1578  for (i=0; i < c; ++i) {
    1579  z->img_comp[i].data = NULL;
    1580  z->img_comp[i].linebuf = NULL;
    1581  }
    1582 
    1583  if (Lf != 8+3*s->img_n) return stbi__err("bad stbi__SOF len","Corrupt JPEG");
    1584 
    1585  for (i=0; i < s->img_n; ++i) {
    1586  z->img_comp[i].id = stbi__get8(s);
    1587  if (z->img_comp[i].id != i+1) // JFIF requires
    1588  if (z->img_comp[i].id != i) // some version of jpegtran outputs non-JFIF-compliant files!
    1589  return stbi__err("bad component ID","Corrupt JPEG");
    1590  q = stbi__get8(s);
    1591  z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG");
    1592  z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG");
    1593  z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG");
    1594  }
    1595 
    1596  if (scan != SCAN_load) return 1;
    1597 
    1598  if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode");
    1599 
    1600  for (i=0; i < s->img_n; ++i) {
    1601  if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h;
    1602  if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v;
    1603  }
    1604 
    1605  // compute interleaved mcu info
    1606  z->img_h_max = h_max;
    1607  z->img_v_max = v_max;
    1608  z->img_mcu_w = h_max * 8;
    1609  z->img_mcu_h = v_max * 8;
    1610  z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w;
    1611  z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h;
    1612 
    1613  for (i=0; i < s->img_n; ++i) {
    1614  // number of effective pixels (e.g. for non-interleaved MCU)
    1615  z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max;
    1616  z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max;
    1617  // to simplify generation, we'll allocate enough memory to decode
    1618  // the bogus oversized data from using interleaved MCUs and their
    1619  // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't
    1620  // discard the extra data until colorspace conversion
    1621  z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8;
    1622  z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8;
    1623  z->img_comp[i].raw_data = stbi__malloc(z->img_comp[i].w2 * z->img_comp[i].h2+15);
    1624  if (z->img_comp[i].raw_data == NULL) {
    1625  for(--i; i >= 0; --i) {
    1626  free(z->img_comp[i].raw_data);
    1627  z->img_comp[i].data = NULL;
    1628  }
    1629  return stbi__err("outofmem", "Out of memory");
    1630  }
    1631  // align blocks for installable-idct using mmx/sse
    1632  z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15);
    1633  z->img_comp[i].linebuf = NULL;
    1634  }
    1635 
    1636  return 1;
    1637 }
    1638 
    1639 // use comparisons since in some cases we handle more than one case (e.g. stbi__SOF)
    1640 #define stbi__DNL(x) ((x) == 0xdc)
    1641 #define stbi__SOI(x) ((x) == 0xd8)
    1642 #define stbi__EOI(x) ((x) == 0xd9)
    1643 #define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1)
    1644 #define stbi__SOS(x) ((x) == 0xda)
    1645 
    1646 static int decode_jpeg_header(stbi__jpeg *z, int scan)
    1647 {
    1648  int m;
    1649  z->marker = STBI__MARKER_none; // initialize cached marker to empty
    1650  m = stbi__get_marker(z);
    1651  if (!stbi__SOI(m)) return stbi__err("no stbi__SOI","Corrupt JPEG");
    1652  if (scan == SCAN_type) return 1;
    1653  m = stbi__get_marker(z);
    1654  while (!stbi__SOF(m)) {
    1655  if (!stbi__process_marker(z,m)) return 0;
    1656  m = stbi__get_marker(z);
    1657  while (m == STBI__MARKER_none) {
    1658  // some files have extra padding after their blocks, so ok, we'll scan
    1659  if (stbi__at_eof(z->s)) return stbi__err("no stbi__SOF", "Corrupt JPEG");
    1660  m = stbi__get_marker(z);
    1661  }
    1662  }
    1663  if (!stbi__process_frame_header(z, scan)) return 0;
    1664  return 1;
    1665 }
    1666 
    1667 static int decode_jpeg_image(stbi__jpeg *j)
    1668 {
    1669  int m;
    1670  j->restart_interval = 0;
    1671  if (!decode_jpeg_header(j, SCAN_load)) return 0;
    1672  m = stbi__get_marker(j);
    1673  while (!stbi__EOI(m)) {
    1674  if (stbi__SOS(m)) {
    1675  if (!stbi__process_scan_header(j)) return 0;
    1676  if (!stbi__parse_entropy_coded_data(j)) return 0;
    1677  if (j->marker == STBI__MARKER_none ) {
    1678  // handle 0s at the end of image data from IP Kamera 9060
    1679  while (!stbi__at_eof(j->s)) {
    1680  int x = stbi__get8(j->s);
    1681  if (x == 255) {
    1682  j->marker = stbi__get8(j->s);
    1683  break;
    1684  } else if (x != 0) {
    1685  return 0;
    1686  }
    1687  }
    1688  // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0
    1689  }
    1690  } else {
    1691  if (!stbi__process_marker(j, m)) return 0;
    1692  }
    1693  m = stbi__get_marker(j);
    1694  }
    1695  return 1;
    1696 }
    1697 
    1698 // static jfif-centered resampling (across block boundaries)
    1699 
    1700 typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1,
    1701  int w, int hs);
    1702 
    1703 #define stbi__div4(x) ((stbi_uc) ((x) >> 2))
    1704 
    1705 static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
    1706 {
    1707  STBI_NOTUSED(out);
    1708  STBI_NOTUSED(in_far);
    1709  STBI_NOTUSED(w);
    1710  STBI_NOTUSED(hs);
    1711  return in_near;
    1712 }
    1713 
    1714 static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
    1715 {
    1716  // need to generate two samples vertically for every one in input
    1717  int i;
    1718  STBI_NOTUSED(hs);
    1719  for (i=0; i < w; ++i)
    1720  out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2);
    1721  return out;
    1722 }
    1723 
    1724 static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
    1725 {
    1726  // need to generate two samples horizontally for every one in input
    1727  int i;
    1728  stbi_uc *input = in_near;
    1729 
    1730  if (w == 1) {
    1731  // if only one sample, can't do any interpolation
    1732  out[0] = out[1] = input[0];
    1733  return out;
    1734  }
    1735 
    1736  out[0] = input[0];
    1737  out[1] = stbi__div4(input[0]*3 + input[1] + 2);
    1738  for (i=1; i < w-1; ++i) {
    1739  int n = 3*input[i]+2;
    1740  out[i*2+0] = stbi__div4(n+input[i-1]);
    1741  out[i*2+1] = stbi__div4(n+input[i+1]);
    1742  }
    1743  out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2);
    1744  out[i*2+1] = input[w-1];
    1745 
    1746  STBI_NOTUSED(in_far);
    1747  STBI_NOTUSED(hs);
    1748 
    1749  return out;
    1750 }
    1751 
    1752 #define stbi__div16(x) ((stbi_uc) ((x) >> 4))
    1753 
    1754 static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
    1755 {
    1756  // need to generate 2x2 samples for every one in input
    1757  int i,t0,t1;
    1758  if (w == 1) {
    1759  out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2);
    1760  return out;
    1761  }
    1762 
    1763  t1 = 3*in_near[0] + in_far[0];
    1764  out[0] = stbi__div4(t1+2);
    1765  for (i=1; i < w; ++i) {
    1766  t0 = t1;
    1767  t1 = 3*in_near[i]+in_far[i];
    1768  out[i*2-1] = stbi__div16(3*t0 + t1 + 8);
    1769  out[i*2 ] = stbi__div16(3*t1 + t0 + 8);
    1770  }
    1771  out[w*2-1] = stbi__div4(t1+2);
    1772 
    1773  STBI_NOTUSED(hs);
    1774 
    1775  return out;
    1776 }
    1777 
    1778 static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
    1779 {
    1780  // resample with nearest-neighbor
    1781  int i,j;
    1782  STBI_NOTUSED(in_far);
    1783  for (i=0; i < w; ++i)
    1784  for (j=0; j < hs; ++j)
    1785  out[i*hs+j] = in_near[i];
    1786  return out;
    1787 }
    1788 
    1789 #define float2fixed(x) ((int) ((x) * 65536 + 0.5))
    1790 
    1791 // 0.38 seconds on 3*anemones.jpg (0.25 with processor = Pro)
    1792 // VC6 without processor=Pro is generating multiple LEAs per multiply!
    1793 static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step)
    1794 {
    1795  int i;
    1796  for (i=0; i < count; ++i) {
    1797  int y_fixed = (y[i] << 16) + 32768; // rounding
    1798  int r,g,b;
    1799  int cr = pcr[i] - 128;
    1800  int cb = pcb[i] - 128;
    1801  r = y_fixed + cr*float2fixed(1.40200f);
    1802  g = y_fixed - cr*float2fixed(0.71414f) - cb*float2fixed(0.34414f);
    1803  b = y_fixed + cb*float2fixed(1.77200f);
    1804  r >>= 16;
    1805  g >>= 16;
    1806  b >>= 16;
    1807  if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; }
    1808  if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; }
    1809  if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; }
    1810  out[0] = (stbi_uc)r;
    1811  out[1] = (stbi_uc)g;
    1812  out[2] = (stbi_uc)b;
    1813  out[3] = 255;
    1814  out += step;
    1815  }
    1816 }
    1817 
    1818 #ifdef STBI_SIMD
    1819 static stbi_YCbCr_to_RGB_run stbi__YCbCr_installed = stbi__YCbCr_to_RGB_row;
    1820 
    1821 STBIDEF void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func)
    1822 {
    1823  stbi__YCbCr_installed = func;
    1824 }
    1825 #endif
    1826 
    1827 
    1828 // clean up the temporary component buffers
    1829 static void stbi__cleanup_jpeg(stbi__jpeg *j)
    1830 {
    1831  int i;
    1832  for (i=0; i < j->s->img_n; ++i) {
    1833  if (j->img_comp[i].raw_data) {
    1834  free(j->img_comp[i].raw_data);
    1835  j->img_comp[i].raw_data = NULL;
    1836  j->img_comp[i].data = NULL;
    1837  }
    1838  if (j->img_comp[i].linebuf) {
    1839  free(j->img_comp[i].linebuf);
    1840  j->img_comp[i].linebuf = NULL;
    1841  }
    1842  }
    1843 }
    1844 
    1845 typedef struct
    1846 {
    1847  resample_row_func resample;
    1848  stbi_uc *line0,*line1;
    1849  int hs,vs; // expansion factor in each axis
    1850  int w_lores; // horizontal pixels pre-expansion
    1851  int ystep; // how far through vertical expansion we are
    1852  int ypos; // which pre-expansion row we're on
    1853 } stbi__resample;
    1854 
    1855 static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp)
    1856 {
    1857  int n, decode_n;
    1858  z->s->img_n = 0; // make stbi__cleanup_jpeg safe
    1859 
    1860  // validate req_comp
    1861  if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error");
    1862 
    1863  // load a jpeg image from whichever source
    1864  if (!decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; }
    1865 
    1866  // determine actual number of components to generate
    1867  n = req_comp ? req_comp : z->s->img_n;
    1868 
    1869  if (z->s->img_n == 3 && n < 3)
    1870  decode_n = 1;
    1871  else
    1872  decode_n = z->s->img_n;
    1873 
    1874  // resample and color-convert
    1875  {
    1876  int k;
    1877  unsigned int i,j;
    1878  stbi_uc *output;
    1879  stbi_uc *coutput[4];
    1880 
    1881  stbi__resample res_comp[4];
    1882 
    1883  for (k=0; k < decode_n; ++k) {
    1884  stbi__resample *r = &res_comp[k];
    1885 
    1886  // allocate line buffer big enough for upsampling off the edges
    1887  // with upsample factor of 4
    1888  z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3);
    1889  if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); }
    1890 
    1891  r->hs = z->img_h_max / z->img_comp[k].h;
    1892  r->vs = z->img_v_max / z->img_comp[k].v;
    1893  r->ystep = r->vs >> 1;
    1894  r->w_lores = (z->s->img_x + r->hs-1) / r->hs;
    1895  r->ypos = 0;
    1896  r->line0 = r->line1 = z->img_comp[k].data;
    1897 
    1898  if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1;
    1899  else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2;
    1900  else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2;
    1901  else if (r->hs == 2 && r->vs == 2) r->resample = stbi__resample_row_hv_2;
    1902  else r->resample = stbi__resample_row_generic;
    1903  }
    1904 
    1905  // can't error after this so, this is safe
    1906  output = (stbi_uc *) stbi__malloc(n * z->s->img_x * z->s->img_y + 1);
    1907  if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); }
    1908 
    1909  // now go ahead and resample
    1910  for (j=0; j < z->s->img_y; ++j) {
    1911  stbi_uc *out = output + n * z->s->img_x * j;
    1912  for (k=0; k < decode_n; ++k) {
    1913  stbi__resample *r = &res_comp[k];
    1914  int y_bot = r->ystep >= (r->vs >> 1);
    1915  coutput[k] = r->resample(z->img_comp[k].linebuf,
    1916  y_bot ? r->line1 : r->line0,
    1917  y_bot ? r->line0 : r->line1,
    1918  r->w_lores, r->hs);
    1919  if (++r->ystep >= r->vs) {
    1920  r->ystep = 0;
    1921  r->line0 = r->line1;
    1922  if (++r->ypos < z->img_comp[k].y)
    1923  r->line1 += z->img_comp[k].w2;
    1924  }
    1925  }
    1926  if (n >= 3) {
    1927  stbi_uc *y = coutput[0];
    1928  if (z->s->img_n == 3) {
    1929  #ifdef STBI_SIMD
    1930  stbi__YCbCr_installed(out, y, coutput[1], coutput[2], z->s->img_x, n);
    1931  #else
    1932  stbi__YCbCr_to_RGB_row(out, y, coutput[1], coutput[2], z->s->img_x, n);
    1933  #endif
    1934  } else
    1935  for (i=0; i < z->s->img_x; ++i) {
    1936  out[0] = out[1] = out[2] = y[i];
    1937  out[3] = 255; // not used if n==3
    1938  out += n;
    1939  }
    1940  } else {
    1941  stbi_uc *y = coutput[0];
    1942  if (n == 1)
    1943  for (i=0; i < z->s->img_x; ++i) out[i] = y[i];
    1944  else
    1945  for (i=0; i < z->s->img_x; ++i) *out++ = y[i], *out++ = 255;
    1946  }
    1947  }
    1948  stbi__cleanup_jpeg(z);
    1949  *out_x = z->s->img_x;
    1950  *out_y = z->s->img_y;
    1951  if (comp) *comp = z->s->img_n; // report original components, not output
    1952  return output;
    1953  }
    1954 }
    1955 
    1956 static unsigned char *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
    1957 {
    1958  stbi__jpeg j;
    1959  j.s = s;
    1960  return load_jpeg_image(&j, x,y,comp,req_comp);
    1961 }
    1962 
    1963 static int stbi__jpeg_test(stbi__context *s)
    1964 {
    1965  int r;
    1966  stbi__jpeg j;
    1967  j.s = s;
    1968  r = decode_jpeg_header(&j, SCAN_type);
    1969  stbi__rewind(s);
    1970  return r;
    1971 }
    1972 
    1973 static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp)
    1974 {
    1975  if (!decode_jpeg_header(j, SCAN_header)) {
    1976  stbi__rewind( j->s );
    1977  return 0;
    1978  }
    1979  if (x) *x = j->s->img_x;
    1980  if (y) *y = j->s->img_y;
    1981  if (comp) *comp = j->s->img_n;
    1982  return 1;
    1983 }
    1984 
    1985 static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp)
    1986 {
    1987  stbi__jpeg j;
    1988  j.s = s;
    1989  return stbi__jpeg_info_raw(&j, x, y, comp);
    1990 }
    1991 
    1992 // public domain zlib decode v0.2 Sean Barrett 2006-11-18
    1993 // simple implementation
    1994 // - all input must be provided in an upfront buffer
    1995 // - all output is written to a single output buffer (can malloc/realloc)
    1996 // performance
    1997 // - fast huffman
    1998 
    1999 // fast-way is faster to check than jpeg huffman, but slow way is slower
    2000 #define STBI__ZFAST_BITS 9 // accelerate all cases in default tables
    2001 #define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1)
    2002 
    2003 // zlib-style huffman encoding
    2004 // (jpegs packs from left, zlib from right, so can't share code)
    2005 typedef struct
    2006 {
    2007  stbi__uint16 fast[1 << STBI__ZFAST_BITS];
    2008  stbi__uint16 firstcode[16];
    2009  int maxcode[17];
    2010  stbi__uint16 firstsymbol[16];
    2011  stbi_uc size[288];
    2012  stbi__uint16 value[288];
    2013 } stbi__zhuffman;
    2014 
    2015 stbi_inline static int stbi__bitreverse16(int n)
    2016 {
    2017  n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1);
    2018  n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2);
    2019  n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4);
    2020  n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8);
    2021  return n;
    2022 }
    2023 
    2024 stbi_inline static int stbi__bit_reverse(int v, int bits)
    2025 {
    2026  STBI_ASSERT(bits <= 16);
    2027  // to bit reverse n bits, reverse 16 and shift
    2028  // e.g. 11 bits, bit reverse and shift away 5
    2029  return stbi__bitreverse16(v) >> (16-bits);
    2030 }
    2031 
    2032 static int stbi__zbuild_huffman(stbi__zhuffman *z, stbi_uc *sizelist, int num)
    2033 {
    2034  int i,k=0;
    2035  int code, next_code[16], sizes[17];
    2036 
    2037  // DEFLATE spec for generating codes
    2038  memset(sizes, 0, sizeof(sizes));
    2039  memset(z->fast, 255, sizeof(z->fast));
    2040  for (i=0; i < num; ++i)
    2041  ++sizes[sizelist[i]];
    2042  sizes[0] = 0;
    2043  for (i=1; i < 16; ++i)
    2044  STBI_ASSERT(sizes[i] <= (1 << i));
    2045  code = 0;
    2046  for (i=1; i < 16; ++i) {
    2047  next_code[i] = code;
    2048  z->firstcode[i] = (stbi__uint16) code;
    2049  z->firstsymbol[i] = (stbi__uint16) k;
    2050  code = (code + sizes[i]);
    2051  if (sizes[i])
    2052  if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt JPEG");
    2053  z->maxcode[i] = code << (16-i); // preshift for inner loop
    2054  code <<= 1;
    2055  k += sizes[i];
    2056  }
    2057  z->maxcode[16] = 0x10000; // sentinel
    2058  for (i=0; i < num; ++i) {
    2059  int s = sizelist[i];
    2060  if (s) {
    2061  int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s];
    2062  z->size [c] = (stbi_uc ) s;
    2063  z->value[c] = (stbi__uint16) i;
    2064  if (s <= STBI__ZFAST_BITS) {
    2065  int k = stbi__bit_reverse(next_code[s],s);
    2066  while (k < (1 << STBI__ZFAST_BITS)) {
    2067  z->fast[k] = (stbi__uint16) c;
    2068  k += (1 << s);
    2069  }
    2070  }
    2071  ++next_code[s];
    2072  }
    2073  }
    2074  return 1;
    2075 }
    2076 
    2077 // zlib-from-memory implementation for PNG reading
    2078 // because PNG allows splitting the zlib stream arbitrarily,
    2079 // and it's annoying structurally to have PNG call ZLIB call PNG,
    2080 // we require PNG read all the IDATs and combine them into a single
    2081 // memory buffer
    2082 
    2083 typedef struct
    2084 {
    2085  stbi_uc *zbuffer, *zbuffer_end;
    2086  int num_bits;
    2087  stbi__uint32 code_buffer;
    2088 
    2089  char *zout;
    2090  char *zout_start;
    2091  char *zout_end;
    2092  int z_expandable;
    2093 
    2094  stbi__zhuffman z_length, z_distance;
    2095 } stbi__zbuf;
    2096 
    2097 stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z)
    2098 {
    2099  if (z->zbuffer >= z->zbuffer_end) return 0;
    2100  return *z->zbuffer++;
    2101 }
    2102 
    2103 static void stbi__fill_bits(stbi__zbuf *z)
    2104 {
    2105  do {
    2106  STBI_ASSERT(z->code_buffer < (1U << z->num_bits));
    2107  z->code_buffer |= stbi__zget8(z) << z->num_bits;
    2108  z->num_bits += 8;
    2109  } while (z->num_bits <= 24);
    2110 }
    2111 
    2112 stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n)
    2113 {
    2114  unsigned int k;
    2115  if (z->num_bits < n) stbi__fill_bits(z);
    2116  k = z->code_buffer & ((1 << n) - 1);
    2117  z->code_buffer >>= n;
    2118  z->num_bits -= n;
    2119  return k;
    2120 }
    2121 
    2122 stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z)
    2123 {
    2124  int b,s,k;
    2125  if (a->num_bits < 16) stbi__fill_bits(a);
    2126  b = z->fast[a->code_buffer & STBI__ZFAST_MASK];
    2127  if (b < 0xffff) {
    2128  s = z->size[b];
    2129  a->code_buffer >>= s;
    2130  a->num_bits -= s;
    2131  return z->value[b];
    2132  }
    2133 
    2134  // not resolved by fast table, so compute it the slow way
    2135  // use jpeg approach, which requires MSbits at top
    2136  k = stbi__bit_reverse(a->code_buffer, 16);
    2137  for (s=STBI__ZFAST_BITS+1; ; ++s)
    2138  if (k < z->maxcode[s])
    2139  break;
    2140  if (s == 16) return -1; // invalid code!
    2141  // code size is s, so:
    2142  b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s];
    2143  STBI_ASSERT(z->size[b] == s);
    2144  a->code_buffer >>= s;
    2145  a->num_bits -= s;
    2146  return z->value[b];
    2147 }
    2148 
    2149 static int stbi__zexpand(stbi__zbuf *z, int n) // need to make room for n bytes
    2150 {
    2151  char *q;
    2152  int cur, limit;
    2153  if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG");
    2154  cur = (int) (z->zout - z->zout_start);
    2155  limit = (int) (z->zout_end - z->zout_start);
    2156  while (cur + n > limit)
    2157  limit *= 2;
    2158  q = (char *) realloc(z->zout_start, limit);
    2159  if (q == NULL) return stbi__err("outofmem", "Out of memory");
    2160  z->zout_start = q;
    2161  z->zout = q + cur;
    2162  z->zout_end = q + limit;
    2163  return 1;
    2164 }
    2165 
    2166 static int stbi__zlength_base[31] = {
    2167  3,4,5,6,7,8,9,10,11,13,
    2168  15,17,19,23,27,31,35,43,51,59,
    2169  67,83,99,115,131,163,195,227,258,0,0 };
    2170 
    2171 static int stbi__zlength_extra[31]=
    2172 { 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 };
    2173 
    2174 static int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,
    2175 257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0};
    2176 
    2177 static int stbi__zdist_extra[32] =
    2178 { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
    2179 
    2180 static int stbi__parse_huffman_block(stbi__zbuf *a)
    2181 {
    2182  for(;;) {
    2183  int z = stbi__zhuffman_decode(a, &a->z_length);
    2184  if (z < 256) {
    2185  if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes
    2186  if (a->zout >= a->zout_end) if (!stbi__zexpand(a, 1)) return 0;
    2187  *a->zout++ = (char) z;
    2188  } else {
    2189  stbi_uc *p;
    2190  int len,dist;
    2191  if (z == 256) return 1;
    2192  z -= 257;
    2193  len = stbi__zlength_base[z];
    2194  if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]);
    2195  z = stbi__zhuffman_decode(a, &a->z_distance);
    2196  if (z < 0) return stbi__err("bad huffman code","Corrupt PNG");
    2197  dist = stbi__zdist_base[z];
    2198  if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]);
    2199  if (a->zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG");
    2200  if (a->zout + len > a->zout_end) if (!stbi__zexpand(a, len)) return 0;
    2201  p = (stbi_uc *) (a->zout - dist);
    2202  while (len--)
    2203  *a->zout++ = *p++;
    2204  }
    2205  }
    2206 }
    2207 
    2208 static int stbi__compute_huffman_codes(stbi__zbuf *a)
    2209 {
    2210  static stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 };
    2211  stbi__zhuffman z_codelength;
    2212  stbi_uc lencodes[286+32+137];//padding for maximum single op
    2213  stbi_uc codelength_sizes[19];
    2214  int i,n;
    2215 
    2216  int hlit = stbi__zreceive(a,5) + 257;
    2217  int hdist = stbi__zreceive(a,5) + 1;
    2218  int hclen = stbi__zreceive(a,4) + 4;
    2219 
    2220  memset(codelength_sizes, 0, sizeof(codelength_sizes));
    2221  for (i=0; i < hclen; ++i) {
    2222  int s = stbi__zreceive(a,3);
    2223  codelength_sizes[length_dezigzag[i]] = (stbi_uc) s;
    2224  }
    2225  if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0;
    2226 
    2227  n = 0;
    2228  while (n < hlit + hdist) {
    2229  int c = stbi__zhuffman_decode(a, &z_codelength);
    2230  STBI_ASSERT(c >= 0 && c < 19);
    2231  if (c < 16)
    2232  lencodes[n++] = (stbi_uc) c;
    2233  else if (c == 16) {
    2234  c = stbi__zreceive(a,2)+3;
    2235  memset(lencodes+n, lencodes[n-1], c);
    2236  n += c;
    2237  } else if (c == 17) {
    2238  c = stbi__zreceive(a,3)+3;
    2239  memset(lencodes+n, 0, c);
    2240  n += c;
    2241  } else {
    2242  STBI_ASSERT(c == 18);
    2243  c = stbi__zreceive(a,7)+11;
    2244  memset(lencodes+n, 0, c);
    2245  n += c;
    2246  }
    2247  }
    2248  if (n != hlit+hdist) return stbi__err("bad codelengths","Corrupt PNG");
    2249  if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0;
    2250  if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0;
    2251  return 1;
    2252 }
    2253 
    2254 static int stbi__parse_uncomperssed_block(stbi__zbuf *a)
    2255 {
    2256  stbi_uc header[4];
    2257  int len,nlen,k;
    2258  if (a->num_bits & 7)
    2259  stbi__zreceive(a, a->num_bits & 7); // discard
    2260  // drain the bit-packed data into header
    2261  k = 0;
    2262  while (a->num_bits > 0) {
    2263  header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check
    2264  a->code_buffer >>= 8;
    2265  a->num_bits -= 8;
    2266  }
    2267  STBI_ASSERT(a->num_bits == 0);
    2268  // now fill header the normal way
    2269  while (k < 4)
    2270  header[k++] = stbi__zget8(a);
    2271  len = header[1] * 256 + header[0];
    2272  nlen = header[3] * 256 + header[2];
    2273  if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG");
    2274  if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG");
    2275  if (a->zout + len > a->zout_end)
    2276  if (!stbi__zexpand(a, len)) return 0;
    2277  memcpy(a->zout, a->zbuffer, len);
    2278  a->zbuffer += len;
    2279  a->zout += len;
    2280  return 1;
    2281 }
    2282 
    2283 static int stbi__parse_zlib_header(stbi__zbuf *a)
    2284 {
    2285  int cmf = stbi__zget8(a);
    2286  int cm = cmf & 15;
    2287  /* int cinfo = cmf >> 4; */
    2288  int flg = stbi__zget8(a);
    2289  if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec
    2290  if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png
    2291  if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png
    2292  // window = 1 << (8 + cinfo)... but who cares, we fully buffer output
    2293  return 1;
    2294 }
    2295 
    2296 // @TODO: should statically initialize these for optimal thread safety
    2297 static stbi_uc stbi__zdefault_length[288], stbi__zdefault_distance[32];
    2298 static void stbi__init_zdefaults(void)
    2299 {
    2300  int i; // use <= to match clearly with spec
    2301  for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8;
    2302  for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9;
    2303  for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7;
    2304  for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8;
    2305 
    2306  for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5;
    2307 }
    2308 
    2309 static int stbi__parse_zlib(stbi__zbuf *a, int parse_header)
    2310 {
    2311  int final, type;
    2312  if (parse_header)
    2313  if (!stbi__parse_zlib_header(a)) return 0;
    2314  a->num_bits = 0;
    2315  a->code_buffer = 0;
    2316  do {
    2317  final = stbi__zreceive(a,1);
    2318  type = stbi__zreceive(a,2);
    2319  if (type == 0) {
    2320  if (!stbi__parse_uncomperssed_block(a)) return 0;
    2321  } else if (type == 3) {
    2322  return 0;
    2323  } else {
    2324  if (type == 1) {
    2325  // use fixed code lengths
    2326  if (!stbi__zdefault_distance[31]) stbi__init_zdefaults();
    2327  if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , 288)) return 0;
    2328  if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0;
    2329  } else {
    2330  if (!stbi__compute_huffman_codes(a)) return 0;
    2331  }
    2332  if (!stbi__parse_huffman_block(a)) return 0;
    2333  }
    2334  } while (!final);
    2335  return 1;
    2336 }
    2337 
    2338 static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header)
    2339 {
    2340  a->zout_start = obuf;
    2341  a->zout = obuf;
    2342  a->zout_end = obuf + olen;
    2343  a->z_expandable = exp;
    2344 
    2345  return stbi__parse_zlib(a, parse_header);
    2346 }
    2347 
    2348 STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen)
    2349 {
    2350  stbi__zbuf a;
    2351  char *p = (char *) stbi__malloc(initial_size);
    2352  if (p == NULL) return NULL;
    2353  a.zbuffer = (stbi_uc *) buffer;
    2354  a.zbuffer_end = (stbi_uc *) buffer + len;
    2355  if (stbi__do_zlib(&a, p, initial_size, 1, 1)) {
    2356  if (outlen) *outlen = (int) (a.zout - a.zout_start);
    2357  return a.zout_start;
    2358  } else {
    2359  free(a.zout_start);
    2360  return NULL;
    2361  }
    2362 }
    2363 
    2364 STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen)
    2365 {
    2366  return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen);
    2367 }
    2368 
    2369 STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header)
    2370 {
    2371  stbi__zbuf a;
    2372  char *p = (char *) stbi__malloc(initial_size);
    2373  if (p == NULL) return NULL;
    2374  a.zbuffer = (stbi_uc *) buffer;
    2375  a.zbuffer_end = (stbi_uc *) buffer + len;
    2376  if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) {
    2377  if (outlen) *outlen = (int) (a.zout - a.zout_start);
    2378  return a.zout_start;
    2379  } else {
    2380  free(a.zout_start);
    2381  return NULL;
    2382  }
    2383 }
    2384 
    2385 STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen)
    2386 {
    2387  stbi__zbuf a;
    2388  a.zbuffer = (stbi_uc *) ibuffer;
    2389  a.zbuffer_end = (stbi_uc *) ibuffer + ilen;
    2390  if (stbi__do_zlib(&a, obuffer, olen, 0, 1))
    2391  return (int) (a.zout - a.zout_start);
    2392  else
    2393  return -1;
    2394 }
    2395 
    2396 STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen)
    2397 {
    2398  stbi__zbuf a;
    2399  char *p = (char *) stbi__malloc(16384);
    2400  if (p == NULL) return NULL;
    2401  a.zbuffer = (stbi_uc *) buffer;
    2402  a.zbuffer_end = (stbi_uc *) buffer+len;
    2403  if (stbi__do_zlib(&a, p, 16384, 1, 0)) {
    2404  if (outlen) *outlen = (int) (a.zout - a.zout_start);
    2405  return a.zout_start;
    2406  } else {
    2407  free(a.zout_start);
    2408  return NULL;
    2409  }
    2410 }
    2411 
    2412 STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen)
    2413 {
    2414  stbi__zbuf a;
    2415  a.zbuffer = (stbi_uc *) ibuffer;
    2416  a.zbuffer_end = (stbi_uc *) ibuffer + ilen;
    2417  if (stbi__do_zlib(&a, obuffer, olen, 0, 0))
    2418  return (int) (a.zout - a.zout_start);
    2419  else
    2420  return -1;
    2421 }
    2422 
    2423 // public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18
    2424 // simple implementation
    2425 // - only 8-bit samples
    2426 // - no CRC checking
    2427 // - allocates lots of intermediate memory
    2428 // - avoids problem of streaming data between subsystems
    2429 // - avoids explicit window management
    2430 // performance
    2431 // - uses stb_zlib, a PD zlib implementation with fast huffman decoding
    2432 
    2433 
    2434 typedef struct
    2435 {
    2436  stbi__uint32 length;
    2437  stbi__uint32 type;
    2438 } stbi__pngchunk;
    2439 
    2440 #define PNG_TYPE(a,b,c,d) (((a) << 24) + ((b) << 16) + ((c) << 8) + (d))
    2441 
    2442 static stbi__pngchunk stbi__get_chunk_header(stbi__context *s)
    2443 {
    2444  stbi__pngchunk c;
    2445  c.length = stbi__get32be(s);
    2446  c.type = stbi__get32be(s);
    2447  return c;
    2448 }
    2449 
    2450 static int stbi__check_png_header(stbi__context *s)
    2451 {
    2452  static stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 };
    2453  int i;
    2454  for (i=0; i < 8; ++i)
    2455  if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG");
    2456  return 1;
    2457 }
    2458 
    2459 typedef struct
    2460 {
    2461  stbi__context *s;
    2462  stbi_uc *idata, *expanded, *out;
    2463 } stbi__png;
    2464 
    2465 
    2466 enum {
    2467  STBI__F_none=0, STBI__F_sub=1, STBI__F_up=2, STBI__F_avg=3, STBI__F_paeth=4,
    2468  STBI__F_avg_first, STBI__F_paeth_first
    2469 };
    2470 
    2471 static stbi_uc first_row_filter[5] =
    2472 {
    2473  STBI__F_none, STBI__F_sub, STBI__F_none, STBI__F_avg_first, STBI__F_paeth_first
    2474 };
    2475 
    2476 static int stbi__paeth(int a, int b, int c)
    2477 {
    2478  int p = a + b - c;
    2479  int pa = abs(p-a);
    2480  int pb = abs(p-b);
    2481  int pc = abs(p-c);
    2482  if (pa <= pb && pa <= pc) return a;
    2483  if (pb <= pc) return b;
    2484  return c;
    2485 }
    2486 
    2487 #define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings
    2488 
    2489 // create the png data from post-deflated data
    2490 static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y)
    2491 {
    2492  stbi__context *s = a->s;
    2493  stbi__uint32 i,j,stride = x*out_n;
    2494  int k;
    2495  int img_n = s->img_n; // copy it into a local for later
    2496  STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1);
    2497  a->out = (stbi_uc *) stbi__malloc(x * y * out_n);
    2498  if (!a->out) return stbi__err("outofmem", "Out of memory");
    2499  if (s->img_x == x && s->img_y == y) {
    2500  if (raw_len != (img_n * x + 1) * y) return stbi__err("not enough pixels","Corrupt PNG");
    2501  } else { // interlaced:
    2502  if (raw_len < (img_n * x + 1) * y) return stbi__err("not enough pixels","Corrupt PNG");
    2503  }
    2504  for (j=0; j < y; ++j) {
    2505  stbi_uc *cur = a->out + stride*j;
    2506  stbi_uc *prior = cur - stride;
    2507  int filter = *raw++;
    2508  if (filter > 4) return stbi__err("invalid filter","Corrupt PNG");
    2509  // if first row, use special filter that doesn't sample previous row
    2510  if (j == 0) filter = first_row_filter[filter];
    2511  // handle first pixel explicitly
    2512  for (k=0; k < img_n; ++k) {
    2513  switch (filter) {
    2514  case STBI__F_none : cur[k] = raw[k]; break;
    2515  case STBI__F_sub : cur[k] = raw[k]; break;
    2516  case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break;
    2517  case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break;
    2518  case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break;
    2519  case STBI__F_avg_first : cur[k] = raw[k]; break;
    2520  case STBI__F_paeth_first: cur[k] = raw[k]; break;
    2521  }
    2522  }
    2523  if (img_n != out_n) cur[img_n] = 255;
    2524  raw += img_n;
    2525  cur += out_n;
    2526  prior += out_n;
    2527  // this is a little gross, so that we don't switch per-pixel or per-component
    2528  if (img_n == out_n) {
    2529  #define CASE(f) \
    2530  case f: \
    2531  for (i=x-1; i >= 1; --i, raw+=img_n,cur+=img_n,prior+=img_n) \
    2532  for (k=0; k < img_n; ++k)
    2533  switch (filter) {
    2534  CASE(STBI__F_none) cur[k] = raw[k]; break;
    2535  CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-img_n]); break;
    2536  CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break;
    2537  CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-img_n])>>1)); break;
    2538  CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-img_n],prior[k],prior[k-img_n])); break;
    2539  CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-img_n] >> 1)); break;
    2540  CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-img_n],0,0)); break;
    2541  }
    2542  #undef CASE
    2543  } else {
    2544  STBI_ASSERT(img_n+1 == out_n);
    2545  #define CASE(f) \
    2546  case f: \
    2547  for (i=x-1; i >= 1; --i, cur[img_n]=255,raw+=img_n,cur+=out_n,prior+=out_n) \
    2548  for (k=0; k < img_n; ++k)
    2549  switch (filter) {
    2550  CASE(STBI__F_none) cur[k] = raw[k]; break;
    2551  CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-out_n]); break;
    2552  CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break;
    2553  CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-out_n])>>1)); break;
    2554  CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-out_n],prior[k],prior[k-out_n])); break;
    2555  CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-out_n] >> 1)); break;
    2556  CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-out_n],0,0)); break;
    2557  }
    2558  #undef CASE
    2559  }
    2560  }
    2561  return 1;
    2562 }
    2563 
    2564 static int stbi__create_png_image(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, int interlaced)
    2565 {
    2566  stbi_uc *final;
    2567  int p;
    2568  if (!interlaced)
    2569  return stbi__create_png_image_raw(a, raw, raw_len, out_n, a->s->img_x, a->s->img_y);
    2570 
    2571  // de-interlacing
    2572  final = (stbi_uc *) stbi__malloc(a->s->img_x * a->s->img_y * out_n);
    2573  for (p=0; p < 7; ++p) {
    2574  int xorig[] = { 0,4,0,2,0,1,0 };
    2575  int yorig[] = { 0,0,4,0,2,0,1 };
    2576  int xspc[] = { 8,8,4,4,2,2,1 };
    2577  int yspc[] = { 8,8,8,4,4,2,2 };
    2578  int i,j,x,y;
    2579  // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1
    2580  x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p];
    2581  y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p];
    2582  if (x && y) {
    2583  if (!stbi__create_png_image_raw(a, raw, raw_len, out_n, x, y)) {
    2584  free(final);
    2585  return 0;
    2586  }
    2587  for (j=0; j < y; ++j)
    2588  for (i=0; i < x; ++i)
    2589  memcpy(final + (j*yspc[p]+yorig[p])*a->s->img_x*out_n + (i*xspc[p]+xorig[p])*out_n,
    2590  a->out + (j*x+i)*out_n, out_n);
    2591  free(a->out);
    2592  raw += (x*out_n+1)*y;
    2593  raw_len -= (x*out_n+1)*y;
    2594  }
    2595  }
    2596  a->out = final;
    2597 
    2598  return 1;
    2599 }
    2600 
    2601 static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n)
    2602 {
    2603  stbi__context *s = z->s;
    2604  stbi__uint32 i, pixel_count = s->img_x * s->img_y;
    2605  stbi_uc *p = z->out;
    2606 
    2607  // compute color-based transparency, assuming we've
    2608  // already got 255 as the alpha value in the output
    2609  STBI_ASSERT(out_n == 2 || out_n == 4);
    2610 
    2611  if (out_n == 2) {
    2612  for (i=0; i < pixel_count; ++i) {
    2613  p[1] = (p[0] == tc[0] ? 0 : 255);
    2614  p += 2;
    2615  }
    2616  } else {
    2617  for (i=0; i < pixel_count; ++i) {
    2618  if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2])
    2619  p[3] = 0;
    2620  p += 4;
    2621  }
    2622  }
    2623  return 1;
    2624 }
    2625 
    2626 static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n)
    2627 {
    2628  stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y;
    2629  stbi_uc *p, *temp_out, *orig = a->out;
    2630 
    2631  p = (stbi_uc *) stbi__malloc(pixel_count * pal_img_n);
    2632  if (p == NULL) return stbi__err("outofmem", "Out of memory");
    2633 
    2634  // between here and free(out) below, exitting would leak
    2635  temp_out = p;
    2636 
    2637  if (pal_img_n == 3) {
    2638  for (i=0; i < pixel_count; ++i) {
    2639  int n = orig[i]*4;
    2640  p[0] = palette[n ];
    2641  p[1] = palette[n+1];
    2642  p[2] = palette[n+2];
    2643  p += 3;
    2644  }
    2645  } else {
    2646  for (i=0; i < pixel_count; ++i) {
    2647  int n = orig[i]*4;
    2648  p[0] = palette[n ];
    2649  p[1] = palette[n+1];
    2650  p[2] = palette[n+2];
    2651  p[3] = palette[n+3];
    2652  p += 4;
    2653  }
    2654  }
    2655  free(a->out);
    2656  a->out = temp_out;
    2657 
    2658  STBI_NOTUSED(len);
    2659 
    2660  return 1;
    2661 }
    2662 
    2663 static int stbi__unpremultiply_on_load = 0;
    2664 static int stbi__de_iphone_flag = 0;
    2665 
    2666 STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply)
    2667 {
    2668  stbi__unpremultiply_on_load = flag_true_if_should_unpremultiply;
    2669 }
    2670 
    2671 STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert)
    2672 {
    2673  stbi__de_iphone_flag = flag_true_if_should_convert;
    2674 }
    2675 
    2676 static void stbi__de_iphone(stbi__png *z)
    2677 {
    2678  stbi__context *s = z->s;
    2679  stbi__uint32 i, pixel_count = s->img_x * s->img_y;
    2680  stbi_uc *p = z->out;
    2681 
    2682  if (s->img_out_n == 3) { // convert bgr to rgb
    2683  for (i=0; i < pixel_count; ++i) {
    2684  stbi_uc t = p[0];
    2685  p[0] = p[2];
    2686  p[2] = t;
    2687  p += 3;
    2688  }
    2689  } else {
    2690  STBI_ASSERT(s->img_out_n == 4);
    2691  if (stbi__unpremultiply_on_load) {
    2692  // convert bgr to rgb and unpremultiply
    2693  for (i=0; i < pixel_count; ++i) {
    2694  stbi_uc a = p[3];
    2695  stbi_uc t = p[0];
    2696  if (a) {
    2697  p[0] = p[2] * 255 / a;
    2698  p[1] = p[1] * 255 / a;
    2699  p[2] = t * 255 / a;
    2700  } else {
    2701  p[0] = p[2];
    2702  p[2] = t;
    2703  }
    2704  p += 4;
    2705  }
    2706  } else {
    2707  // convert bgr to rgb
    2708  for (i=0; i < pixel_count; ++i) {
    2709  stbi_uc t = p[0];
    2710  p[0] = p[2];
    2711  p[2] = t;
    2712  p += 4;
    2713  }
    2714  }
    2715  }
    2716 }
    2717 
    2718 static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
    2719 {
    2720  stbi_uc palette[1024], pal_img_n=0;
    2721  stbi_uc has_trans=0, tc[3];
    2722  stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0;
    2723  int first=1,k,interlace=0, is_iphone=0;
    2724  stbi__context *s = z->s;
    2725 
    2726  z->expanded = NULL;
    2727  z->idata = NULL;
    2728  z->out = NULL;
    2729 
    2730  if (!stbi__check_png_header(s)) return 0;
    2731 
    2732  if (scan == SCAN_type) return 1;
    2733 
    2734  for (;;) {
    2735  stbi__pngchunk c = stbi__get_chunk_header(s);
    2736  switch (c.type) {
    2737  case PNG_TYPE('C','g','B','I'):
    2738  is_iphone = 1;
    2739  stbi__skip(s, c.length);
    2740  break;
    2741  case PNG_TYPE('I','H','D','R'): {
    2742  int depth,color,comp,filter;
    2743  if (!first) return stbi__err("multiple IHDR","Corrupt PNG");
    2744  first = 0;
    2745  if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG");
    2746  s->img_x = stbi__get32be(s); if (s->img_x > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)");
    2747  s->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)");
    2748  depth = stbi__get8(s); if (depth != 8) return stbi__err("8bit only","PNG not supported: 8-bit only");
    2749  color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG");
    2750  if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG");
    2751  comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG");
    2752  filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG");
    2753  interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG");
    2754  if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG");
    2755  if (!pal_img_n) {
    2756  s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0);
    2757  if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode");
    2758  if (scan == SCAN_header) return 1;
    2759  } else {
    2760  // if paletted, then pal_n is our final components, and
    2761  // img_n is # components to decompress/filter.
    2762  s->img_n = 1;
    2763  if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG");
    2764  // if SCAN_header, have to scan to see if we have a tRNS
    2765  }
    2766  break;
    2767  }
    2768 
    2769  case PNG_TYPE('P','L','T','E'): {
    2770  if (first) return stbi__err("first not IHDR", "Corrupt PNG");
    2771  if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG");
    2772  pal_len = c.length / 3;
    2773  if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG");
    2774  for (i=0; i < pal_len; ++i) {
    2775  palette[i*4+0] = stbi__get8(s);
    2776  palette[i*4+1] = stbi__get8(s);
    2777  palette[i*4+2] = stbi__get8(s);
    2778  palette[i*4+3] = 255;
    2779  }
    2780  break;
    2781  }
    2782 
    2783  case PNG_TYPE('t','R','N','S'): {
    2784  if (first) return stbi__err("first not IHDR", "Corrupt PNG");
    2785  if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG");
    2786  if (pal_img_n) {
    2787  if (scan == SCAN_header) { s->img_n = 4; return 1; }
    2788  if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG");
    2789  if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG");
    2790  pal_img_n = 4;
    2791  for (i=0; i < c.length; ++i)
    2792  palette[i*4+3] = stbi__get8(s);
    2793  } else {
    2794  if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG");
    2795  if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG");
    2796  has_trans = 1;
    2797  for (k=0; k < s->img_n; ++k)
    2798  tc[k] = (stbi_uc) (stbi__get16be(s) & 255); // non 8-bit images will be larger
    2799  }
    2800  break;
    2801  }
    2802 
    2803  case PNG_TYPE('I','D','A','T'): {
    2804  if (first) return stbi__err("first not IHDR", "Corrupt PNG");
    2805  if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG");
    2806  if (scan == SCAN_header) { s->img_n = pal_img_n; return 1; }
    2807  if (ioff + c.length > idata_limit) {
    2808  stbi_uc *p;
    2809  if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096;
    2810  while (ioff + c.length > idata_limit)
    2811  idata_limit *= 2;
    2812  p = (stbi_uc *) realloc(z->idata, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory");
    2813  z->idata = p;
    2814  }
    2815  if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG");
    2816  ioff += c.length;
    2817  break;
    2818  }
    2819 
    2820  case PNG_TYPE('I','E','N','D'): {
    2821  stbi__uint32 raw_len;
    2822  if (first) return stbi__err("first not IHDR", "Corrupt PNG");
    2823  if (scan != SCAN_load) return 1;
    2824  if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG");
    2825  z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, 16384, (int *) &raw_len, !is_iphone);
    2826  if (z->expanded == NULL) return 0; // zlib should set error
    2827  free(z->idata); z->idata = NULL;
    2828  if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans)
    2829  s->img_out_n = s->img_n+1;
    2830  else
    2831  s->img_out_n = s->img_n;
    2832  if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, interlace)) return 0;
    2833  if (has_trans)
    2834  if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0;
    2835  if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2)
    2836  stbi__de_iphone(z);
    2837  if (pal_img_n) {
    2838  // pal_img_n == 3 or 4
    2839  s->img_n = pal_img_n; // record the actual colors we had
    2840  s->img_out_n = pal_img_n;
    2841  if (req_comp >= 3) s->img_out_n = req_comp;
    2842  if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n))
    2843  return 0;
    2844  }
    2845  free(z->expanded); z->expanded = NULL;
    2846  return 1;
    2847  }
    2848 
    2849  default:
    2850  // if critical, fail
    2851  if (first) return stbi__err("first not IHDR", "Corrupt PNG");
    2852  if ((c.type & (1 << 29)) == 0) {
    2853  #ifndef STBI_NO_FAILURE_STRINGS
    2854  // not threadsafe
    2855  static char invalid_chunk[] = "XXXX PNG chunk not known";
    2856  invalid_chunk[0] = STBI__BYTECAST(c.type >> 24);
    2857  invalid_chunk[1] = STBI__BYTECAST(c.type >> 16);
    2858  invalid_chunk[2] = STBI__BYTECAST(c.type >> 8);
    2859  invalid_chunk[3] = STBI__BYTECAST(c.type >> 0);
    2860  #endif
    2861  return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type");
    2862  }
    2863  stbi__skip(s, c.length);
    2864  break;
    2865  }
    2866  // end of PNG chunk, read and skip CRC
    2867  stbi__get32be(s);
    2868  }
    2869 }
    2870 
    2871 static unsigned char *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp)
    2872 {
    2873  unsigned char *result=NULL;
    2874  if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error");
    2875  if (stbi__parse_png_file(p, SCAN_load, req_comp)) {
    2876  result = p->out;
    2877  p->out = NULL;
    2878  if (req_comp && req_comp != p->s->img_out_n) {
    2879  result = stbi__convert_format(result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y);
    2880  p->s->img_out_n = req_comp;
    2881  if (result == NULL) return result;
    2882  }
    2883  *x = p->s->img_x;
    2884  *y = p->s->img_y;
    2885  if (n) *n = p->s->img_out_n;
    2886  }
    2887  free(p->out); p->out = NULL;
    2888  free(p->expanded); p->expanded = NULL;
    2889  free(p->idata); p->idata = NULL;
    2890 
    2891  return result;
    2892 }
    2893 
    2894 static unsigned char *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
    2895 {
    2896  stbi__png p;
    2897  p.s = s;
    2898  return stbi__do_png(&p, x,y,comp,req_comp);
    2899 }
    2900 
    2901 static int stbi__png_test(stbi__context *s)
    2902 {
    2903  int r;
    2904  r = stbi__check_png_header(s);
    2905  stbi__rewind(s);
    2906  return r;
    2907 }
    2908 
    2909 static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp)
    2910 {
    2911  if (!stbi__parse_png_file(p, SCAN_header, 0)) {
    2912  stbi__rewind( p->s );
    2913  return 0;
    2914  }
    2915  if (x) *x = p->s->img_x;
    2916  if (y) *y = p->s->img_y;
    2917  if (comp) *comp = p->s->img_n;
    2918  return 1;
    2919 }
    2920 
    2921 static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp)
    2922 {
    2923  stbi__png p;
    2924  p.s = s;
    2925  return stbi__png_info_raw(&p, x, y, comp);
    2926 }
    2927 
    2928 // Microsoft/Windows BMP image
    2929 static int stbi__bmp_test_raw(stbi__context *s)
    2930 {
    2931  int r;
    2932  int sz;
    2933  if (stbi__get8(s) != 'B') return 0;
    2934  if (stbi__get8(s) != 'M') return 0;
    2935  stbi__get32le(s); // discard filesize
    2936  stbi__get16le(s); // discard reserved
    2937  stbi__get16le(s); // discard reserved
    2938  stbi__get32le(s); // discard data offset
    2939  sz = stbi__get32le(s);
    2940  r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124);
    2941  return r;
    2942 }
    2943 
    2944 static int stbi__bmp_test(stbi__context *s)
    2945 {
    2946  int r = stbi__bmp_test_raw(s);
    2947  stbi__rewind(s);
    2948  return r;
    2949 }
    2950 
    2951 
    2952 // returns 0..31 for the highest set bit
    2953 static int stbi__high_bit(unsigned int z)
    2954 {
    2955  int n=0;
    2956  if (z == 0) return -1;
    2957  if (z >= 0x10000) n += 16, z >>= 16;
    2958  if (z >= 0x00100) n += 8, z >>= 8;
    2959  if (z >= 0x00010) n += 4, z >>= 4;
    2960  if (z >= 0x00004) n += 2, z >>= 2;
    2961  if (z >= 0x00002) n += 1, z >>= 1;
    2962  return n;
    2963 }
    2964 
    2965 static int stbi__bitcount(unsigned int a)
    2966 {
    2967  a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2
    2968  a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4
    2969  a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits
    2970  a = (a + (a >> 8)); // max 16 per 8 bits
    2971  a = (a + (a >> 16)); // max 32 per 8 bits
    2972  return a & 0xff;
    2973 }
    2974 
    2975 static int stbi__shiftsigned(int v, int shift, int bits)
    2976 {
    2977  int result;
    2978  int z=0;
    2979 
    2980  if (shift < 0) v <<= -shift;
    2981  else v >>= shift;
    2982  result = v;
    2983 
    2984  z = bits;
    2985  while (z < 8) {
    2986  result += v >> z;
    2987  z += bits;
    2988  }
    2989  return result;
    2990 }
    2991 
    2992 static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
    2993 {
    2994  stbi_uc *out;
    2995  unsigned int mr=0,mg=0,mb=0,ma=0, fake_a=0;
    2996  stbi_uc pal[256][4];
    2997  int psize=0,i,j,compress=0,width;
    2998  int bpp, flip_vertically, pad, target, offset, hsz;
    2999  if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP");
    3000  stbi__get32le(s); // discard filesize
    3001  stbi__get16le(s); // discard reserved
    3002  stbi__get16le(s); // discard reserved
    3003  offset = stbi__get32le(s);
    3004  hsz = stbi__get32le(s);
    3005  if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown");
    3006  if (hsz == 12) {
    3007  s->img_x = stbi__get16le(s);
    3008  s->img_y = stbi__get16le(s);
    3009  } else {
    3010  s->img_x = stbi__get32le(s);
    3011  s->img_y = stbi__get32le(s);
    3012  }
    3013  if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP");
    3014  bpp = stbi__get16le(s);
    3015  if (bpp == 1) return stbi__errpuc("monochrome", "BMP type not supported: 1-bit");
    3016  flip_vertically = ((int) s->img_y) > 0;
    3017  s->img_y = abs((int) s->img_y);
    3018  if (hsz == 12) {
    3019  if (bpp < 24)
    3020  psize = (offset - 14 - 24) / 3;
    3021  } else {
    3022  compress = stbi__get32le(s);
    3023  if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE");
    3024  stbi__get32le(s); // discard sizeof
    3025  stbi__get32le(s); // discard hres
    3026  stbi__get32le(s); // discard vres
    3027  stbi__get32le(s); // discard colorsused
    3028  stbi__get32le(s); // discard max important
    3029  if (hsz == 40 || hsz == 56) {
    3030  if (hsz == 56) {
    3031  stbi__get32le(s);
    3032  stbi__get32le(s);
    3033  stbi__get32le(s);
    3034  stbi__get32le(s);
    3035  }
    3036  if (bpp == 16 || bpp == 32) {
    3037  mr = mg = mb = 0;
    3038  if (compress == 0) {
    3039  if (bpp == 32) {
    3040  mr = 0xffu << 16;
    3041  mg = 0xffu << 8;
    3042  mb = 0xffu << 0;
    3043  ma = 0xffu << 24;
    3044  fake_a = 1; // @TODO: check for cases like alpha value is all 0 and switch it to 255
    3045  STBI_NOTUSED(fake_a);
    3046  } else {
    3047  mr = 31u << 10;
    3048  mg = 31u << 5;
    3049  mb = 31u << 0;
    3050  }
    3051  } else if (compress == 3) {
    3052  mr = stbi__get32le(s);
    3053  mg = stbi__get32le(s);
    3054  mb = stbi__get32le(s);
    3055  // not documented, but generated by photoshop and handled by mspaint
    3056  if (mr == mg && mg == mb) {
    3057  // ?!?!?
    3058  return stbi__errpuc("bad BMP", "bad BMP");
    3059  }
    3060  } else
    3061  return stbi__errpuc("bad BMP", "bad BMP");
    3062  }
    3063  } else {
    3064  STBI_ASSERT(hsz == 108 || hsz == 124);
    3065  mr = stbi__get32le(s);
    3066  mg = stbi__get32le(s);
    3067  mb = stbi__get32le(s);
    3068  ma = stbi__get32le(s);
    3069  stbi__get32le(s); // discard color space
    3070  for (i=0; i < 12; ++i)
    3071  stbi__get32le(s); // discard color space parameters
    3072  if (hsz == 124) {
    3073  stbi__get32le(s); // discard rendering intent
    3074  stbi__get32le(s); // discard offset of profile data
    3075  stbi__get32le(s); // discard size of profile data
    3076  stbi__get32le(s); // discard reserved
    3077  }
    3078  }
    3079  if (bpp < 16)
    3080  psize = (offset - 14 - hsz) >> 2;
    3081  }
    3082  s->img_n = ma ? 4 : 3;
    3083  if (req_comp && req_comp >= 3) // we can directly decode 3 or 4
    3084  target = req_comp;
    3085  else
    3086  target = s->img_n; // if they want monochrome, we'll post-convert
    3087  out = (stbi_uc *) stbi__malloc(target * s->img_x * s->img_y);
    3088  if (!out) return stbi__errpuc("outofmem", "Out of memory");
    3089  if (bpp < 16) {
    3090  int z=0;
    3091  if (psize == 0 || psize > 256) { free(out); return stbi__errpuc("invalid", "Corrupt BMP"); }
    3092  for (i=0; i < psize; ++i) {
    3093  pal[i][2] = stbi__get8(s);
    3094  pal[i][1] = stbi__get8(s);
    3095  pal[i][0] = stbi__get8(s);
    3096  if (hsz != 12) stbi__get8(s);
    3097  pal[i][3] = 255;
    3098  }
    3099  stbi__skip(s, offset - 14 - hsz - psize * (hsz == 12 ? 3 : 4));
    3100  if (bpp == 4) width = (s->img_x + 1) >> 1;
    3101  else if (bpp == 8) width = s->img_x;
    3102  else { free(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); }
    3103  pad = (-width)&3;
    3104  for (j=0; j < (int) s->img_y; ++j) {
    3105  for (i=0; i < (int) s->img_x; i += 2) {
    3106  int v=stbi__get8(s),v2=0;
    3107  if (bpp == 4) {
    3108  v2 = v & 15;
    3109  v >>= 4;
    3110  }
    3111  out[z++] = pal[v][0];
    3112  out[z++] = pal[v][1];
    3113  out[z++] = pal[v][2];
    3114  if (target == 4) out[z++] = 255;
    3115  if (i+1 == (int) s->img_x) break;
    3116  v = (bpp == 8) ? stbi__get8(s) : v2;
    3117  out[z++] = pal[v][0];
    3118  out[z++] = pal[v][1];
    3119  out[z++] = pal[v][2];
    3120  if (target == 4) out[z++] = 255;
    3121  }
    3122  stbi__skip(s, pad);
    3123  }
    3124  } else {
    3125  int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0;
    3126  int z = 0;
    3127  int easy=0;
    3128  stbi__skip(s, offset - 14 - hsz);
    3129  if (bpp == 24) width = 3 * s->img_x;
    3130  else if (bpp == 16) width = 2*s->img_x;
    3131  else /* bpp = 32 and pad = 0 */ width=0;
    3132  pad = (-width) & 3;
    3133  if (bpp == 24) {
    3134  easy = 1;
    3135  } else if (bpp == 32) {
    3136  if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000)
    3137  easy = 2;
    3138  }
    3139  if (!easy) {
    3140  if (!mr || !mg || !mb) { free(out); return stbi__errpuc("bad masks", "Corrupt BMP"); }
    3141  // right shift amt to put high bit in position #7
    3142  rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr);
    3143  gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg);
    3144  bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb);
    3145  ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma);
    3146  }
    3147  for (j=0; j < (int) s->img_y; ++j) {
    3148  if (easy) {
    3149  for (i=0; i < (int) s->img_x; ++i) {
    3150  unsigned char a;
    3151  out[z+2] = stbi__get8(s);
    3152  out[z+1] = stbi__get8(s);
    3153  out[z+0] = stbi__get8(s);
    3154  z += 3;
    3155  a = (easy == 2 ? stbi__get8(s) : 255);
    3156  if (target == 4) out[z++] = a;
    3157  }
    3158  } else {
    3159  for (i=0; i < (int) s->img_x; ++i) {
    3160  stbi__uint32 v = (stbi__uint32) (bpp == 16 ? stbi__get16le(s) : stbi__get32le(s));
    3161  int a;
    3162  out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount));
    3163  out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount));
    3164  out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount));
    3165  a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255);
    3166  if (target == 4) out[z++] = STBI__BYTECAST(a);
    3167  }
    3168  }
    3169  stbi__skip(s, pad);
    3170  }
    3171  }
    3172  if (flip_vertically) {
    3173  stbi_uc t;
    3174  for (j=0; j < (int) s->img_y>>1; ++j) {
    3175  stbi_uc *p1 = out + j *s->img_x*target;
    3176  stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target;
    3177  for (i=0; i < (int) s->img_x*target; ++i) {
    3178  t = p1[i], p1[i] = p2[i], p2[i] = t;
    3179  }
    3180  }
    3181  }
    3182 
    3183  if (req_comp && req_comp != target) {
    3184  out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y);
    3185  if (out == NULL) return out; // stbi__convert_format frees input on failure
    3186  }
    3187 
    3188  *x = s->img_x;
    3189  *y = s->img_y;
    3190  if (comp) *comp = s->img_n;
    3191  return out;
    3192 }
    3193 
    3194 // Targa Truevision - TGA
    3195 // by Jonathan Dummer
    3196 
    3197 static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp)
    3198 {
    3199  int tga_w, tga_h, tga_comp;
    3200  int sz;
    3201  stbi__get8(s); // discard Offset
    3202  sz = stbi__get8(s); // color type
    3203  if( sz > 1 ) {
    3204  stbi__rewind(s);
    3205  return 0; // only RGB or indexed allowed
    3206  }
    3207  sz = stbi__get8(s); // image type
    3208  // only RGB or grey allowed, +/- RLE
    3209  if ((sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11)) return 0;
    3210  stbi__skip(s,9);
    3211  tga_w = stbi__get16le(s);
    3212  if( tga_w < 1 ) {
    3213  stbi__rewind(s);
    3214  return 0; // test width
    3215  }
    3216  tga_h = stbi__get16le(s);
    3217  if( tga_h < 1 ) {
    3218  stbi__rewind(s);
    3219  return 0; // test height
    3220  }
    3221  sz = stbi__get8(s); // bits per pixel
    3222  // only RGB or RGBA or grey allowed
    3223  if ((sz != 8) && (sz != 16) && (sz != 24) && (sz != 32)) {
    3224  stbi__rewind(s);
    3225  return 0;
    3226  }
    3227  tga_comp = sz;
    3228  if (x) *x = tga_w;
    3229  if (y) *y = tga_h;
    3230  if (comp) *comp = tga_comp / 8;
    3231  return 1; // seems to have passed everything
    3232 }
    3233 
    3234 static int stbi__tga_test(stbi__context *s)
    3235 {
    3236  int res;
    3237  int sz;
    3238  stbi__get8(s); // discard Offset
    3239  sz = stbi__get8(s); // color type
    3240  if ( sz > 1 ) return 0; // only RGB or indexed allowed
    3241  sz = stbi__get8(s); // image type
    3242  if ( (sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11) ) return 0; // only RGB or grey allowed, +/- RLE
    3243  stbi__get16be(s); // discard palette start
    3244  stbi__get16be(s); // discard palette length
    3245  stbi__get8(s); // discard bits per palette color entry
    3246  stbi__get16be(s); // discard x origin
    3247  stbi__get16be(s); // discard y origin
    3248  if ( stbi__get16be(s) < 1 ) return 0; // test width
    3249  if ( stbi__get16be(s) < 1 ) return 0; // test height
    3250  sz = stbi__get8(s); // bits per pixel
    3251  if ( (sz != 8) && (sz != 16) && (sz != 24) && (sz != 32) )
    3252  res = 0;
    3253  else
    3254  res = 1;
    3255  stbi__rewind(s);
    3256  return res;
    3257 }
    3258 
    3259 static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
    3260 {
    3261  // read in the TGA header stuff
    3262  int tga_offset = stbi__get8(s);
    3263  int tga_indexed = stbi__get8(s);
    3264  int tga_image_type = stbi__get8(s);
    3265  int tga_is_RLE = 0;
    3266  int tga_palette_start = stbi__get16le(s);
    3267  int tga_palette_len = stbi__get16le(s);
    3268  int tga_palette_bits = stbi__get8(s);
    3269  int tga_x_origin = stbi__get16le(s);
    3270  int tga_y_origin = stbi__get16le(s);
    3271  int tga_width = stbi__get16le(s);
    3272  int tga_height = stbi__get16le(s);
    3273  int tga_bits_per_pixel = stbi__get8(s);
    3274  int tga_comp = tga_bits_per_pixel / 8;
    3275  int tga_inverted = stbi__get8(s);
    3276  // image data
    3277  unsigned char *tga_data;
    3278  unsigned char *tga_palette = NULL;
    3279  int i, j;
    3280  unsigned char raw_data[4];
    3281  int RLE_count = 0;
    3282  int RLE_repeating = 0;
    3283  int read_next_pixel = 1;
    3284 
    3285  // do a tiny bit of precessing
    3286  if ( tga_image_type >= 8 )
    3287  {
    3288  tga_image_type -= 8;
    3289  tga_is_RLE = 1;
    3290  }
    3291  /* int tga_alpha_bits = tga_inverted & 15; */
    3292  tga_inverted = 1 - ((tga_inverted >> 5) & 1);
    3293 
    3294  // error check
    3295  if ( //(tga_indexed) ||
    3296  (tga_width < 1) || (tga_height < 1) ||
    3297  (tga_image_type < 1) || (tga_image_type > 3) ||
    3298  ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16) &&
    3299  (tga_bits_per_pixel != 24) && (tga_bits_per_pixel != 32))
    3300  )
    3301  {
    3302  return NULL; // we don't report this as a bad TGA because we don't even know if it's TGA
    3303  }
    3304 
    3305  // If I'm paletted, then I'll use the number of bits from the palette
    3306  if ( tga_indexed )
    3307  {
    3308  tga_comp = tga_palette_bits / 8;
    3309  }
    3310 
    3311  // tga info
    3312  *x = tga_width;
    3313  *y = tga_height;
    3314  if (comp) *comp = tga_comp;
    3315 
    3316  tga_data = (unsigned char*)stbi__malloc( tga_width * tga_height * tga_comp );
    3317  if (!tga_data) return stbi__errpuc("outofmem", "Out of memory");
    3318 
    3319  // skip to the data's starting position (offset usually = 0)
    3320  stbi__skip(s, tga_offset );
    3321 
    3322  if ( !tga_indexed && !tga_is_RLE) {
    3323  for (i=0; i < tga_height; ++i) {
    3324  int y = tga_inverted ? tga_height -i - 1 : i;
    3325  stbi_uc *tga_row = tga_data + y*tga_width*tga_comp;
    3326  stbi__getn(s, tga_row, tga_width * tga_comp);
    3327  }
    3328  } else {
    3329  // do I need to load a palette?
    3330  if ( tga_indexed)
    3331  {
    3332  // any data to skip? (offset usually = 0)
    3333  stbi__skip(s, tga_palette_start );
    3334  // load the palette
    3335  tga_palette = (unsigned char*)stbi__malloc( tga_palette_len * tga_palette_bits / 8 );
    3336  if (!tga_palette) {
    3337  free(tga_data);
    3338  return stbi__errpuc("outofmem", "Out of memory");
    3339  }
    3340  if (!stbi__getn(s, tga_palette, tga_palette_len * tga_palette_bits / 8 )) {
    3341  free(tga_data);
    3342  free(tga_palette);
    3343  return stbi__errpuc("bad palette", "Corrupt TGA");
    3344  }
    3345  }
    3346  // load the data
    3347  for (i=0; i < tga_width * tga_height; ++i)
    3348  {
    3349  // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk?
    3350  if ( tga_is_RLE )
    3351  {
    3352  if ( RLE_count == 0 )
    3353  {
    3354  // yep, get the next byte as a RLE command
    3355  int RLE_cmd = stbi__get8(s);
    3356  RLE_count = 1 + (RLE_cmd & 127);
    3357  RLE_repeating = RLE_cmd >> 7;
    3358  read_next_pixel = 1;
    3359  } else if ( !RLE_repeating )
    3360  {
    3361  read_next_pixel = 1;
    3362  }
    3363  } else
    3364  {
    3365  read_next_pixel = 1;
    3366  }
    3367  // OK, if I need to read a pixel, do it now
    3368  if ( read_next_pixel )
    3369  {
    3370  // load however much data we did have
    3371  if ( tga_indexed )
    3372  {
    3373  // read in 1 byte, then perform the lookup
    3374  int pal_idx = stbi__get8(s);
    3375  if ( pal_idx >= tga_palette_len )
    3376  {
    3377  // invalid index
    3378  pal_idx = 0;
    3379  }
    3380  pal_idx *= tga_bits_per_pixel / 8;
    3381  for (j = 0; j*8 < tga_bits_per_pixel; ++j)
    3382  {
    3383  raw_data[j] = tga_palette[pal_idx+j];
    3384  }
    3385  } else
    3386  {
    3387  // read in the data raw
    3388  for (j = 0; j*8 < tga_bits_per_pixel; ++j)
    3389  {
    3390  raw_data[j] = stbi__get8(s);
    3391  }
    3392  }
    3393  // clear the reading flag for the next pixel
    3394  read_next_pixel = 0;
    3395  } // end of reading a pixel
    3396 
    3397  // copy data
    3398  for (j = 0; j < tga_comp; ++j)
    3399  tga_data[i*tga_comp+j] = raw_data[j];
    3400 
    3401  // in case we're in RLE mode, keep counting down
    3402  --RLE_count;
    3403  }
    3404  // do I need to invert the image?
    3405  if ( tga_inverted )
    3406  {
    3407  for (j = 0; j*2 < tga_height; ++j)
    3408  {
    3409  int index1 = j * tga_width * tga_comp;
    3410  int index2 = (tga_height - 1 - j) * tga_width * tga_comp;
    3411  for (i = tga_width * tga_comp; i > 0; --i)
    3412  {
    3413  unsigned char temp = tga_data[index1];
    3414  tga_data[index1] = tga_data[index2];
    3415  tga_data[index2] = temp;
    3416  ++index1;
    3417  ++index2;
    3418  }
    3419  }
    3420  }
    3421  // clear my palette, if I had one
    3422  if ( tga_palette != NULL )
    3423  {
    3424  free( tga_palette );
    3425  }
    3426  }
    3427 
    3428  // swap RGB
    3429  if (tga_comp >= 3)
    3430  {
    3431  unsigned char* tga_pixel = tga_data;
    3432  for (i=0; i < tga_width * tga_height; ++i)
    3433  {
    3434  unsigned char temp = tga_pixel[0];
    3435  tga_pixel[0] = tga_pixel[2];
    3436  tga_pixel[2] = temp;
    3437  tga_pixel += tga_comp;
    3438  }
    3439  }
    3440 
    3441  // convert to target component count
    3442  if (req_comp && req_comp != tga_comp)
    3443  tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height);
    3444 
    3445  // the things I do to get rid of an error message, and yet keep
    3446  // Microsoft's C compilers happy... [8^(
    3447  tga_palette_start = tga_palette_len = tga_palette_bits =
    3448  tga_x_origin = tga_y_origin = 0;
    3449  // OK, done
    3450  return tga_data;
    3451 }
    3452 
    3453 // *************************************************************************************************
    3454 // Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB
    3455 
    3456 static int stbi__psd_test(stbi__context *s)
    3457 {
    3458  int r = (stbi__get32be(s) == 0x38425053);
    3459  stbi__rewind(s);
    3460  return r;
    3461 }
    3462 
    3463 static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
    3464 {
    3465  int pixelCount;
    3466  int channelCount, compression;
    3467  int channel, i, count, len;
    3468  int w,h;
    3469  stbi_uc *out;
    3470 
    3471  // Check identifier
    3472  if (stbi__get32be(s) != 0x38425053) // "8BPS"
    3473  return stbi__errpuc("not PSD", "Corrupt PSD image");
    3474 
    3475  // Check file type version.
    3476  if (stbi__get16be(s) != 1)
    3477  return stbi__errpuc("wrong version", "Unsupported version of PSD image");
    3478 
    3479  // Skip 6 reserved bytes.
    3480  stbi__skip(s, 6 );
    3481 
    3482  // Read the number of channels (R, G, B, A, etc).
    3483  channelCount = stbi__get16be(s);
    3484  if (channelCount < 0 || channelCount > 16)
    3485  return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image");
    3486 
    3487  // Read the rows and columns of the image.
    3488  h = stbi__get32be(s);
    3489  w = stbi__get32be(s);
    3490 
    3491  // Make sure the depth is 8 bits.
    3492  if (stbi__get16be(s) != 8)
    3493  return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 bit");
    3494 
    3495  // Make sure the color mode is RGB.
    3496  // Valid options are:
    3497  // 0: Bitmap
    3498  // 1: Grayscale
    3499  // 2: Indexed color
    3500  // 3: RGB color
    3501  // 4: CMYK color
    3502  // 7: Multichannel
    3503  // 8: Duotone
    3504  // 9: Lab color
    3505  if (stbi__get16be(s) != 3)
    3506  return stbi__errpuc("wrong color format", "PSD is not in RGB color format");
    3507 
    3508  // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.)
    3509  stbi__skip(s,stbi__get32be(s) );
    3510 
    3511  // Skip the image resources. (resolution, pen tool paths, etc)
    3512  stbi__skip(s, stbi__get32be(s) );
    3513 
    3514  // Skip the reserved data.
    3515  stbi__skip(s, stbi__get32be(s) );
    3516 
    3517  // Find out if the data is compressed.
    3518  // Known values:
    3519  // 0: no compression
    3520  // 1: RLE compressed
    3521  compression = stbi__get16be(s);
    3522  if (compression > 1)
    3523  return stbi__errpuc("bad compression", "PSD has an unknown compression format");
    3524 
    3525  // Create the destination image.
    3526  out = (stbi_uc *) stbi__malloc(4 * w*h);
    3527  if (!out) return stbi__errpuc("outofmem", "Out of memory");
    3528  pixelCount = w*h;
    3529 
    3530  // Initialize the data to zero.
    3531  //memset( out, 0, pixelCount * 4 );
    3532 
    3533  // Finally, the image data.
    3534  if (compression) {
    3535  // RLE as used by .PSD and .TIFF
    3536  // Loop until you get the number of unpacked bytes you are expecting:
    3537  // Read the next source byte into n.
    3538  // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally.
    3539  // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times.
    3540  // Else if n is 128, noop.
    3541  // Endloop
    3542 
    3543  // The RLE-compressed data is preceeded by a 2-byte data count for each row in the data,
    3544  // which we're going to just skip.
    3545  stbi__skip(s, h * channelCount * 2 );
    3546 
    3547  // Read the RLE data by channel.
    3548  for (channel = 0; channel < 4; channel++) {
    3549  stbi_uc *p;
    3550 
    3551  p = out+channel;
    3552  if (channel >= channelCount) {
    3553  // Fill this channel with default data.
    3554  for (i = 0; i < pixelCount; i++) *p = (channel == 3 ? 255 : 0), p += 4;
    3555  } else {
    3556  // Read the RLE data.
    3557  count = 0;
    3558  while (count < pixelCount) {
    3559  len = stbi__get8(s);
    3560  if (len == 128) {
    3561  // No-op.
    3562  } else if (len < 128) {
    3563  // Copy next len+1 bytes literally.
    3564  len++;
    3565  count += len;
    3566  while (len) {
    3567  *p = stbi__get8(s);
    3568  p += 4;
    3569  len--;
    3570  }
    3571  } else if (len > 128) {
    3572  stbi_uc val;
    3573  // Next -len+1 bytes in the dest are replicated from next source byte.
    3574  // (Interpret len as a negative 8-bit int.)
    3575  len ^= 0x0FF;
    3576  len += 2;
    3577  val = stbi__get8(s);
    3578  count += len;
    3579  while (len) {
    3580  *p = val;
    3581  p += 4;
    3582  len--;
    3583  }
    3584  }
    3585  }
    3586  }
    3587  }
    3588 
    3589  } else {
    3590  // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...)
    3591  // where each channel consists of an 8-bit value for each pixel in the image.
    3592 
    3593  // Read the data by channel.
    3594  for (channel = 0; channel < 4; channel++) {
    3595  stbi_uc *p;
    3596 
    3597  p = out + channel;
    3598  if (channel > channelCount) {
    3599  // Fill this channel with default data.
    3600  for (i = 0; i < pixelCount; i++) *p = channel == 3 ? 255 : 0, p += 4;
    3601  } else {
    3602  // Read the data.
    3603  for (i = 0; i < pixelCount; i++)
    3604  *p = stbi__get8(s), p += 4;
    3605  }
    3606  }
    3607  }
    3608 
    3609  if (req_comp && req_comp != 4) {
    3610  out = stbi__convert_format(out, 4, req_comp, w, h);
    3611  if (out == NULL) return out; // stbi__convert_format frees input on failure
    3612  }
    3613 
    3614  if (comp) *comp = channelCount;
    3615  *y = h;
    3616  *x = w;
    3617 
    3618  return out;
    3619 }
    3620 
    3621 // *************************************************************************************************
    3622 // Softimage PIC loader
    3623 // by Tom Seddon
    3624 //
    3625 // See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format
    3626 // See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/
    3627 
    3628 static int stbi__pic_is4(stbi__context *s,const char *str)
    3629 {
    3630  int i;
    3631  for (i=0; i<4; ++i)
    3632  if (stbi__get8(s) != (stbi_uc)str[i])
    3633  return 0;
    3634 
    3635  return 1;
    3636 }
    3637 
    3638 static int stbi__pic_test_core(stbi__context *s)
    3639 {
    3640  int i;
    3641 
    3642  if (!stbi__pic_is4(s,"\x53\x80\xF6\x34"))
    3643  return 0;
    3644 
    3645  for(i=0;i<84;++i)
    3646  stbi__get8(s);
    3647 
    3648  if (!stbi__pic_is4(s,"PICT"))
    3649  return 0;
    3650 
    3651  return 1;
    3652 }
    3653 
    3654 typedef struct
    3655 {
    3656  stbi_uc size,type,channel;
    3657 } stbi__pic_packet;
    3658 
    3659 static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest)
    3660 {
    3661  int mask=0x80, i;
    3662 
    3663  for (i=0; i<4; ++i, mask>>=1) {
    3664  if (channel & mask) {
    3665  if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short");
    3666  dest[i]=stbi__get8(s);
    3667  }
    3668  }
    3669 
    3670  return dest;
    3671 }
    3672 
    3673 static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src)
    3674 {
    3675  int mask=0x80,i;
    3676 
    3677  for (i=0;i<4; ++i, mask>>=1)
    3678  if (channel&mask)
    3679  dest[i]=src[i];
    3680 }
    3681 
    3682 static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result)
    3683 {
    3684  int act_comp=0,num_packets=0,y,chained;
    3685  stbi__pic_packet packets[10];
    3686 
    3687  // this will (should...) cater for even some bizarre stuff like having data
    3688  // for the same channel in multiple packets.
    3689  do {
    3690  stbi__pic_packet *packet;
    3691 
    3692  if (num_packets==sizeof(packets)/sizeof(packets[0]))
    3693  return stbi__errpuc("bad format","too many packets");
    3694 
    3695  packet = &packets[num_packets++];
    3696 
    3697  chained = stbi__get8(s);
    3698  packet->size = stbi__get8(s);
    3699  packet->type = stbi__get8(s);
    3700  packet->channel = stbi__get8(s);
    3701 
    3702  act_comp |= packet->channel;
    3703 
    3704  if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)");
    3705  if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp");
    3706  } while (chained);
    3707 
    3708  *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel?
    3709 
    3710  for(y=0; y<height; ++y) {
    3711  int packet_idx;
    3712 
    3713  for(packet_idx=0; packet_idx < num_packets; ++packet_idx) {
    3714  stbi__pic_packet *packet = &packets[packet_idx];
    3715  stbi_uc *dest = result+y*width*4;
    3716 
    3717  switch (packet->type) {
    3718  default:
    3719  return stbi__errpuc("bad format","packet has bad compression type");
    3720 
    3721  case 0: {//uncompressed
    3722  int x;
    3723 
    3724  for(x=0;x<width;++x, dest+=4)
    3725  if (!stbi__readval(s,packet->channel,dest))
    3726  return 0;
    3727  break;
    3728  }
    3729 
    3730  case 1://Pure RLE
    3731  {
    3732  int left=width, i;
    3733 
    3734  while (left>0) {
    3735  stbi_uc count,value[4];
    3736 
    3737  count=stbi__get8(s);
    3738  if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)");
    3739 
    3740  if (count > left)
    3741  count = (stbi_uc) left;
    3742 
    3743  if (!stbi__readval(s,packet->channel,value)) return 0;
    3744 
    3745  for(i=0; i<count; ++i,dest+=4)
    3746  stbi__copyval(packet->channel,dest,value);
    3747  left -= count;
    3748  }
    3749  }
    3750  break;
    3751 
    3752  case 2: {//Mixed RLE
    3753  int left=width;
    3754  while (left>0) {
    3755  int count = stbi__get8(s), i;
    3756  if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)");
    3757 
    3758  if (count >= 128) { // Repeated
    3759  stbi_uc value[4];
    3760  int i;
    3761 
    3762  if (count==128)
    3763  count = stbi__get16be(s);
    3764  else
    3765  count -= 127;
    3766  if (count > left)
    3767  return stbi__errpuc("bad file","scanline overrun");
    3768 
    3769  if (!stbi__readval(s,packet->channel,value))
    3770  return 0;
    3771 
    3772  for(i=0;i<count;++i, dest += 4)
    3773  stbi__copyval(packet->channel,dest,value);
    3774  } else { // Raw
    3775  ++count;
    3776  if (count>left) return stbi__errpuc("bad file","scanline overrun");
    3777 
    3778  for(i=0;i<count;++i, dest+=4)
    3779  if (!stbi__readval(s,packet->channel,dest))
    3780  return 0;
    3781  }
    3782  left-=count;
    3783  }
    3784  break;
    3785  }
    3786  }
    3787  }
    3788  }
    3789 
    3790  return result;
    3791 }
    3792 
    3793 static stbi_uc *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp)
    3794 {
    3795  stbi_uc *result;
    3796  int i, x,y;
    3797 
    3798  for (i=0; i<92; ++i)
    3799  stbi__get8(s);
    3800 
    3801  x = stbi__get16be(s);
    3802  y = stbi__get16be(s);
    3803  if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)");
    3804  if ((1 << 28) / x < y) return stbi__errpuc("too large", "Image too large to decode");
    3805 
    3806  stbi__get32be(s); //skip `ratio'
    3807  stbi__get16be(s); //skip `fields'
    3808  stbi__get16be(s); //skip `pad'
    3809 
    3810  // intermediate buffer is RGBA
    3811  result = (stbi_uc *) stbi__malloc(x*y*4);
    3812  memset(result, 0xff, x*y*4);
    3813 
    3814  if (!stbi__pic_load_core(s,x,y,comp, result)) {
    3815  free(result);
    3816  result=0;
    3817  }
    3818  *px = x;
    3819  *py = y;
    3820  if (req_comp == 0) req_comp = *comp;
    3821  result=stbi__convert_format(result,4,req_comp,x,y);
    3822 
    3823  return result;
    3824 }
    3825 
    3826 static int stbi__pic_test(stbi__context *s)
    3827 {
    3828  int r = stbi__pic_test_core(s);
    3829  stbi__rewind(s);
    3830  return r;
    3831 }
    3832 
    3833 // *************************************************************************************************
    3834 // GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb
    3835 typedef struct
    3836 {
    3837  stbi__int16 prefix;
    3838  stbi_uc first;
    3839  stbi_uc suffix;
    3840 } stbi__gif_lzw;
    3841 
    3842 typedef struct
    3843 {
    3844  int w,h;
    3845  stbi_uc *out; // output buffer (always 4 components)
    3846  int flags, bgindex, ratio, transparent, eflags;
    3847  stbi_uc pal[256][4];
    3848  stbi_uc lpal[256][4];
    3849  stbi__gif_lzw codes[4096];
    3850  stbi_uc *color_table;
    3851  int parse, step;
    3852  int lflags;
    3853  int start_x, start_y;
    3854  int max_x, max_y;
    3855  int cur_x, cur_y;
    3856  int line_size;
    3857 } stbi__gif;
    3858 
    3859 static int stbi__gif_test_raw(stbi__context *s)
    3860 {
    3861  int sz;
    3862  if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0;
    3863  sz = stbi__get8(s);
    3864  if (sz != '9' && sz != '7') return 0;
    3865  if (stbi__get8(s) != 'a') return 0;
    3866  return 1;
    3867 }
    3868 
    3869 static int stbi__gif_test(stbi__context *s)
    3870 {
    3871  int r = stbi__gif_test_raw(s);
    3872  stbi__rewind(s);
    3873  return r;
    3874 }
    3875 
    3876 static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp)
    3877 {
    3878  int i;
    3879  for (i=0; i < num_entries; ++i) {
    3880  pal[i][2] = stbi__get8(s);
    3881  pal[i][1] = stbi__get8(s);
    3882  pal[i][0] = stbi__get8(s);
    3883  pal[i][3] = transp ? 0 : 255;
    3884  }
    3885 }
    3886 
    3887 static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info)
    3888 {
    3889  stbi_uc version;
    3890  if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8')
    3891  return stbi__err("not GIF", "Corrupt GIF");
    3892 
    3893  version = stbi__get8(s);
    3894  if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF");
    3895  if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF");
    3896 
    3897  stbi__g_failure_reason = "";
    3898  g->w = stbi__get16le(s);
    3899  g->h = stbi__get16le(s);
    3900  g->flags = stbi__get8(s);
    3901  g->bgindex = stbi__get8(s);
    3902  g->ratio = stbi__get8(s);
    3903  g->transparent = -1;
    3904 
    3905  if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments
    3906 
    3907  if (is_info) return 1;
    3908 
    3909  if (g->flags & 0x80)
    3910  stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1);
    3911 
    3912  return 1;
    3913 }
    3914 
    3915 static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp)
    3916 {
    3917  stbi__gif g;
    3918  if (!stbi__gif_header(s, &g, comp, 1)) {
    3919  stbi__rewind( s );
    3920  return 0;
    3921  }
    3922  if (x) *x = g.w;
    3923  if (y) *y = g.h;
    3924  return 1;
    3925 }
    3926 
    3927 static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code)
    3928 {
    3929  stbi_uc *p, *c;
    3930 
    3931  // recurse to decode the prefixes, since the linked-list is backwards,
    3932  // and working backwards through an interleaved image would be nasty
    3933  if (g->codes[code].prefix >= 0)
    3934  stbi__out_gif_code(g, g->codes[code].prefix);
    3935 
    3936  if (g->cur_y >= g->max_y) return;
    3937 
    3938  p = &g->out[g->cur_x + g->cur_y];
    3939  c = &g->color_table[g->codes[code].suffix * 4];
    3940 
    3941  if (c[3] >= 128) {
    3942  p[0] = c[2];
    3943  p[1] = c[1];
    3944  p[2] = c[0];
    3945  p[3] = c[3];
    3946  }
    3947  g->cur_x += 4;
    3948 
    3949  if (g->cur_x >= g->max_x) {
    3950  g->cur_x = g->start_x;
    3951  g->cur_y += g->step;
    3952 
    3953  while (g->cur_y >= g->max_y && g->parse > 0) {
    3954  g->step = (1 << g->parse) * g->line_size;
    3955  g->cur_y = g->start_y + (g->step >> 1);
    3956  --g->parse;
    3957  }
    3958  }
    3959 }
    3960 
    3961 static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g)
    3962 {
    3963  stbi_uc lzw_cs;
    3964  stbi__int32 len, code;
    3965  stbi__uint32 first;
    3966  stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear;
    3967  stbi__gif_lzw *p;
    3968 
    3969  lzw_cs = stbi__get8(s);
    3970  clear = 1 << lzw_cs;
    3971  first = 1;
    3972  codesize = lzw_cs + 1;
    3973  codemask = (1 << codesize) - 1;
    3974  bits = 0;
    3975  valid_bits = 0;
    3976  for (code = 0; code < clear; code++) {
    3977  g->codes[code].prefix = -1;
    3978  g->codes[code].first = (stbi_uc) code;
    3979  g->codes[code].suffix = (stbi_uc) code;
    3980  }
    3981 
    3982  // support no starting clear code
    3983  avail = clear+2;
    3984  oldcode = -1;
    3985 
    3986  len = 0;
    3987  for(;;) {
    3988  if (valid_bits < codesize) {
    3989  if (len == 0) {
    3990  len = stbi__get8(s); // start new block
    3991  if (len == 0)
    3992  return g->out;
    3993  }
    3994  --len;
    3995  bits |= (stbi__int32) stbi__get8(s) << valid_bits;
    3996  valid_bits += 8;
    3997  } else {
    3998  stbi__int32 code = bits & codemask;
    3999  bits >>= codesize;
    4000  valid_bits -= codesize;
    4001  // @OPTIMIZE: is there some way we can accelerate the non-clear path?
    4002  if (code == clear) { // clear code
    4003  codesize = lzw_cs + 1;
    4004  codemask = (1 << codesize) - 1;
    4005  avail = clear + 2;
    4006  oldcode = -1;
    4007  first = 0;
    4008  } else if (code == clear + 1) { // end of stream code
    4009  stbi__skip(s, len);
    4010  while ((len = stbi__get8(s)) > 0)
    4011  stbi__skip(s,len);
    4012  return g->out;
    4013  } else if (code <= avail) {
    4014  if (first) return stbi__errpuc("no clear code", "Corrupt GIF");
    4015 
    4016  if (oldcode >= 0) {
    4017  p = &g->codes[avail++];
    4018  if (avail > 4096) return stbi__errpuc("too many codes", "Corrupt GIF");
    4019  p->prefix = (stbi__int16) oldcode;
    4020  p->first = g->codes[oldcode].first;
    4021  p->suffix = (code == avail) ? p->first : g->codes[code].first;
    4022  } else if (code == avail)
    4023  return stbi__errpuc("illegal code in raster", "Corrupt GIF");
    4024 
    4025  stbi__out_gif_code(g, (stbi__uint16) code);
    4026 
    4027  if ((avail & codemask) == 0 && avail <= 0x0FFF) {
    4028  codesize++;
    4029  codemask = (1 << codesize) - 1;
    4030  }
    4031 
    4032  oldcode = code;
    4033  } else {
    4034  return stbi__errpuc("illegal code in raster", "Corrupt GIF");
    4035  }
    4036  }
    4037  }
    4038 }
    4039 
    4040 static void stbi__fill_gif_background(stbi__gif *g)
    4041 {
    4042  int i;
    4043  stbi_uc *c = g->pal[g->bgindex];
    4044  // @OPTIMIZE: write a dword at a time
    4045  for (i = 0; i < g->w * g->h * 4; i += 4) {
    4046  stbi_uc *p = &g->out[i];
    4047  p[0] = c[2];
    4048  p[1] = c[1];
    4049  p[2] = c[0];
    4050  p[3] = c[3];
    4051  }
    4052 }
    4053 
    4054 // this function is designed to support animated gifs, although stb_image doesn't support it
    4055 static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp)
    4056 {
    4057  int i;
    4058  stbi_uc *old_out = 0;
    4059 
    4060  if (g->out == 0) {
    4061  if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header
    4062  g->out = (stbi_uc *) stbi__malloc(4 * g->w * g->h);
    4063  if (g->out == 0) return stbi__errpuc("outofmem", "Out of memory");
    4064  stbi__fill_gif_background(g);
    4065  } else {
    4066  // animated-gif-only path
    4067  if (((g->eflags & 0x1C) >> 2) == 3) {
    4068  old_out = g->out;
    4069  g->out = (stbi_uc *) stbi__malloc(4 * g->w * g->h);
    4070  if (g->out == 0) return stbi__errpuc("outofmem", "Out of memory");
    4071  memcpy(g->out, old_out, g->w*g->h*4);
    4072  }
    4073  }
    4074 
    4075  for (;;) {
    4076  switch (stbi__get8(s)) {
    4077  case 0x2C: /* Image Descriptor */
    4078  {
    4079  stbi__int32 x, y, w, h;
    4080  stbi_uc *o;
    4081 
    4082  x = stbi__get16le(s);
    4083  y = stbi__get16le(s);
    4084  w = stbi__get16le(s);
    4085  h = stbi__get16le(s);
    4086  if (((x + w) > (g->w)) || ((y + h) > (g->h)))
    4087  return stbi__errpuc("bad Image Descriptor", "Corrupt GIF");
    4088 
    4089  g->line_size = g->w * 4;
    4090  g->start_x = x * 4;
    4091  g->start_y = y * g->line_size;
    4092  g->max_x = g->start_x + w * 4;
    4093  g->max_y = g->start_y + h * g->line_size;
    4094  g->cur_x = g->start_x;
    4095  g->cur_y = g->start_y;
    4096 
    4097  g->lflags = stbi__get8(s);
    4098 
    4099  if (g->lflags & 0x40) {
    4100  g->step = 8 * g->line_size; // first interlaced spacing
    4101  g->parse = 3;
    4102  } else {
    4103  g->step = g->line_size;
    4104  g->parse = 0;
    4105  }
    4106 
    4107  if (g->lflags & 0x80) {
    4108  stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1);
    4109  g->color_table = (stbi_uc *) g->lpal;
    4110  } else if (g->flags & 0x80) {
    4111  for (i=0; i < 256; ++i) // @OPTIMIZE: stbi__jpeg_reset only the previous transparent
    4112  g->pal[i][3] = 255;
    4113  if (g->transparent >= 0 && (g->eflags & 0x01))
    4114  g->pal[g->transparent][3] = 0;
    4115  g->color_table = (stbi_uc *) g->pal;
    4116  } else
    4117  return stbi__errpuc("missing color table", "Corrupt GIF");
    4118 
    4119  o = stbi__process_gif_raster(s, g);
    4120  if (o == NULL) return NULL;
    4121 
    4122  if (req_comp && req_comp != 4)
    4123  o = stbi__convert_format(o, 4, req_comp, g->w, g->h);
    4124  return o;
    4125  }
    4126 
    4127  case 0x21: // Comment Extension.
    4128  {
    4129  int len;
    4130  if (stbi__get8(s) == 0xF9) { // Graphic Control Extension.
    4131  len = stbi__get8(s);
    4132  if (len == 4) {
    4133  g->eflags = stbi__get8(s);
    4134  stbi__get16le(s); // delay
    4135  g->transparent = stbi__get8(s);
    4136  } else {
    4137  stbi__skip(s, len);
    4138  break;
    4139  }
    4140  }
    4141  while ((len = stbi__get8(s)) != 0)
    4142  stbi__skip(s, len);
    4143  break;
    4144  }
    4145 
    4146  case 0x3B: // gif stream termination code
    4147  return (stbi_uc *) s; // using '1' causes warning on some compilers
    4148 
    4149  default:
    4150  return stbi__errpuc("unknown code", "Corrupt GIF");
    4151  }
    4152  }
    4153 }
    4154 
    4155 static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
    4156 {
    4157  stbi_uc *u = 0;
    4158  stbi__gif g;
    4159  memset(&g, 0, sizeof(g));
    4160 
    4161  u = stbi__gif_load_next(s, &g, comp, req_comp);
    4162  if (u == (stbi_uc *) s) u = 0; // end of animated gif marker
    4163  if (u) {
    4164  *x = g.w;
    4165  *y = g.h;
    4166  }
    4167 
    4168  return u;
    4169 }
    4170 
    4171 static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp)
    4172 {
    4173  return stbi__gif_info_raw(s,x,y,comp);
    4174 }
    4175 
    4176 
    4177 // *************************************************************************************************
    4178 // Radiance RGBE HDR loader
    4179 // originally by Nicolas Schulz
    4180 #ifndef STBI_NO_HDR
    4181 static int stbi__hdr_test_core(stbi__context *s)
    4182 {
    4183  const char *signature = "#?RADIANCE\n";
    4184  int i;
    4185  for (i=0; signature[i]; ++i)
    4186  if (stbi__get8(s) != signature[i])
    4187  return 0;
    4188  return 1;
    4189 }
    4190 
    4191 static int stbi__hdr_test(stbi__context* s)
    4192 {
    4193  int r = stbi__hdr_test_core(s);
    4194  stbi__rewind(s);
    4195  return r;
    4196 }
    4197 
    4198 #define STBI__HDR_BUFLEN 1024
    4199 static char *stbi__hdr_gettoken(stbi__context *z, char *buffer)
    4200 {
    4201  int len=0;
    4202  char c = '\0';
    4203 
    4204  c = (char) stbi__get8(z);
    4205 
    4206  while (!stbi__at_eof(z) && c != '\n') {
    4207  buffer[len++] = c;
    4208  if (len == STBI__HDR_BUFLEN-1) {
    4209  // flush to end of line
    4210  while (!stbi__at_eof(z) && stbi__get8(z) != '\n')
    4211  ;
    4212  break;
    4213  }
    4214  c = (char) stbi__get8(z);
    4215  }
    4216 
    4217  buffer[len] = 0;
    4218  return buffer;
    4219 }
    4220 
    4221 static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp)
    4222 {
    4223  if ( input[3] != 0 ) {
    4224  float f1;
    4225  // Exponent
    4226  f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8));
    4227  if (req_comp <= 2)
    4228  output[0] = (input[0] + input[1] + input[2]) * f1 / 3;
    4229  else {
    4230  output[0] = input[0] * f1;
    4231  output[1] = input[1] * f1;
    4232  output[2] = input[2] * f1;
    4233  }
    4234  if (req_comp == 2) output[1] = 1;
    4235  if (req_comp == 4) output[3] = 1;
    4236  } else {
    4237  switch (req_comp) {
    4238  case 4: output[3] = 1; /* fallthrough */
    4239  case 3: output[0] = output[1] = output[2] = 0;
    4240  break;
    4241  case 2: output[1] = 1; /* fallthrough */
    4242  case 1: output[0] = 0;
    4243  break;
    4244  }
    4245  }
    4246 }
    4247 
    4248 static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
    4249 {
    4250  char buffer[STBI__HDR_BUFLEN];
    4251  char *token;
    4252  int valid = 0;
    4253  int width, height;
    4254  stbi_uc *scanline;
    4255  float *hdr_data;
    4256  int len;
    4257  unsigned char count, value;
    4258  int i, j, k, c1,c2, z;
    4259 
    4260 
    4261  // Check identifier
    4262  if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0)
    4263  return stbi__errpf("not HDR", "Corrupt HDR image");
    4264 
    4265  // Parse header
    4266  for(;;) {
    4267  token = stbi__hdr_gettoken(s,buffer);
    4268  if (token[0] == 0) break;
    4269  if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1;
    4270  }
    4271 
    4272  if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format");
    4273 
    4274  // Parse width and height
    4275  // can't use sscanf() if we're not using stdio!
    4276  token = stbi__hdr_gettoken(s,buffer);
    4277  if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format");
    4278  token += 3;
    4279  height = (int) strtol(token, &token, 10);
    4280  while (*token == ' ') ++token;
    4281  if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format");
    4282  token += 3;
    4283  width = (int) strtol(token, NULL, 10);
    4284 
    4285  *x = width;
    4286  *y = height;
    4287 
    4288  if (comp) *comp = 3;
    4289  if (req_comp == 0) req_comp = 3;
    4290 
    4291  // Read data
    4292  hdr_data = (float *) stbi__malloc(height * width * req_comp * sizeof(float));
    4293 
    4294  // Load image data
    4295  // image data is stored as some number of sca
    4296  if ( width < 8 || width >= 32768) {
    4297  // Read flat data
    4298  for (j=0; j < height; ++j) {
    4299  for (i=0; i < width; ++i) {
    4300  stbi_uc rgbe[4];
    4301  main_decode_loop:
    4302  stbi__getn(s, rgbe, 4);
    4303  stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp);
    4304  }
    4305  }
    4306  } else {
    4307  // Read RLE-encoded data
    4308  scanline = NULL;
    4309 
    4310  for (j = 0; j < height; ++j) {
    4311  c1 = stbi__get8(s);
    4312  c2 = stbi__get8(s);
    4313  len = stbi__get8(s);
    4314  if (c1 != 2 || c2 != 2 || (len & 0x80)) {
    4315  // not run-length encoded, so we have to actually use THIS data as a decoded
    4316  // pixel (note this can't be a valid pixel--one of RGB must be >= 128)
    4317  stbi_uc rgbe[4];
    4318  rgbe[0] = (stbi_uc) c1;
    4319  rgbe[1] = (stbi_uc) c2;
    4320  rgbe[2] = (stbi_uc) len;
    4321  rgbe[3] = (stbi_uc) stbi__get8(s);
    4322  stbi__hdr_convert(hdr_data, rgbe, req_comp);
    4323  i = 1;
    4324  j = 0;
    4325  free(scanline);
    4326  goto main_decode_loop; // yes, this makes no sense
    4327  }
    4328  len <<= 8;
    4329  len |= stbi__get8(s);
    4330  if (len != width) { free(hdr_data); free(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); }
    4331  if (scanline == NULL) scanline = (stbi_uc *) stbi__malloc(width * 4);
    4332 
    4333  for (k = 0; k < 4; ++k) {
    4334  i = 0;
    4335  while (i < width) {
    4336  count = stbi__get8(s);
    4337  if (count > 128) {
    4338  // Run
    4339  value = stbi__get8(s);
    4340  count -= 128;
    4341  for (z = 0; z < count; ++z)
    4342  scanline[i++ * 4 + k] = value;
    4343  } else {
    4344  // Dump
    4345  for (z = 0; z < count; ++z)
    4346  scanline[i++ * 4 + k] = stbi__get8(s);
    4347  }
    4348  }
    4349  }
    4350  for (i=0; i < width; ++i)
    4351  stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp);
    4352  }
    4353  free(scanline);
    4354  }
    4355 
    4356  return hdr_data;
    4357 }
    4358 
    4359 static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp)
    4360 {
    4361  char buffer[STBI__HDR_BUFLEN];
    4362  char *token;
    4363  int valid = 0;
    4364 
    4365  if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0) {
    4366  stbi__rewind( s );
    4367  return 0;
    4368  }
    4369 
    4370  for(;;) {
    4371  token = stbi__hdr_gettoken(s,buffer);
    4372  if (token[0] == 0) break;
    4373  if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1;
    4374  }
    4375 
    4376  if (!valid) {
    4377  stbi__rewind( s );
    4378  return 0;
    4379  }
    4380  token = stbi__hdr_gettoken(s,buffer);
    4381  if (strncmp(token, "-Y ", 3)) {
    4382  stbi__rewind( s );
    4383  return 0;
    4384  }
    4385  token += 3;
    4386  *y = (int) strtol(token, &token, 10);
    4387  while (*token == ' ') ++token;
    4388  if (strncmp(token, "+X ", 3)) {
    4389  stbi__rewind( s );
    4390  return 0;
    4391  }
    4392  token += 3;
    4393  *x = (int) strtol(token, NULL, 10);
    4394  *comp = 3;
    4395  return 1;
    4396 }
    4397 #endif // STBI_NO_HDR
    4398 
    4399 static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp)
    4400 {
    4401  int hsz;
    4402  if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') {
    4403  stbi__rewind( s );
    4404  return 0;
    4405  }
    4406  stbi__skip(s,12);
    4407  hsz = stbi__get32le(s);
    4408  if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) {
    4409  stbi__rewind( s );
    4410  return 0;
    4411  }
    4412  if (hsz == 12) {
    4413  *x = stbi__get16le(s);
    4414  *y = stbi__get16le(s);
    4415  } else {
    4416  *x = stbi__get32le(s);
    4417  *y = stbi__get32le(s);
    4418  }
    4419  if (stbi__get16le(s) != 1) {
    4420  stbi__rewind( s );
    4421  return 0;
    4422  }
    4423  *comp = stbi__get16le(s) / 8;
    4424  return 1;
    4425 }
    4426 
    4427 static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp)
    4428 {
    4429  int channelCount;
    4430  if (stbi__get32be(s) != 0x38425053) {
    4431  stbi__rewind( s );
    4432  return 0;
    4433  }
    4434  if (stbi__get16be(s) != 1) {
    4435  stbi__rewind( s );
    4436  return 0;
    4437  }
    4438  stbi__skip(s, 6);
    4439  channelCount = stbi__get16be(s);
    4440  if (channelCount < 0 || channelCount > 16) {
    4441  stbi__rewind( s );
    4442  return 0;
    4443  }
    4444  *y = stbi__get32be(s);
    4445  *x = stbi__get32be(s);
    4446  if (stbi__get16be(s) != 8) {
    4447  stbi__rewind( s );
    4448  return 0;
    4449  }
    4450  if (stbi__get16be(s) != 3) {
    4451  stbi__rewind( s );
    4452  return 0;
    4453  }
    4454  *comp = 4;
    4455  return 1;
    4456 }
    4457 
    4458 static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp)
    4459 {
    4460  int act_comp=0,num_packets=0,chained;
    4461  stbi__pic_packet packets[10];
    4462 
    4463  stbi__skip(s, 92);
    4464 
    4465  *x = stbi__get16be(s);
    4466  *y = stbi__get16be(s);
    4467  if (stbi__at_eof(s)) return 0;
    4468  if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) {
    4469  stbi__rewind( s );
    4470  return 0;
    4471  }
    4472 
    4473  stbi__skip(s, 8);
    4474 
    4475  do {
    4476  stbi__pic_packet *packet;
    4477 
    4478  if (num_packets==sizeof(packets)/sizeof(packets[0]))
    4479  return 0;
    4480 
    4481  packet = &packets[num_packets++];
    4482  chained = stbi__get8(s);
    4483  packet->size = stbi__get8(s);
    4484  packet->type = stbi__get8(s);
    4485  packet->channel = stbi__get8(s);
    4486  act_comp |= packet->channel;
    4487 
    4488  if (stbi__at_eof(s)) {
    4489  stbi__rewind( s );
    4490  return 0;
    4491  }
    4492  if (packet->size != 8) {
    4493  stbi__rewind( s );
    4494  return 0;
    4495  }
    4496  } while (chained);
    4497 
    4498  *comp = (act_comp & 0x10 ? 4 : 3);
    4499 
    4500  return 1;
    4501 }
    4502 
    4503 static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp)
    4504 {
    4505  if (stbi__jpeg_info(s, x, y, comp))
    4506  return 1;
    4507  if (stbi__png_info(s, x, y, comp))
    4508  return 1;
    4509  if (stbi__gif_info(s, x, y, comp))
    4510  return 1;
    4511  if (stbi__bmp_info(s, x, y, comp))
    4512  return 1;
    4513  if (stbi__psd_info(s, x, y, comp))
    4514  return 1;
    4515  if (stbi__pic_info(s, x, y, comp))
    4516  return 1;
    4517  #ifndef STBI_NO_HDR
    4518  if (stbi__hdr_info(s, x, y, comp))
    4519  return 1;
    4520  #endif
    4521  // test tga last because it's a crappy test!
    4522  if (stbi__tga_info(s, x, y, comp))
    4523  return 1;
    4524  return stbi__err("unknown image type", "Image not of any known type, or corrupt");
    4525 }
    4526 
    4527 #ifndef STBI_NO_STDIO
    4528 STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp)
    4529 {
    4530  FILE *f = stbi__fopen(filename, "rb");
    4531  int result;
    4532  if (!f) return stbi__err("can't fopen", "Unable to open file");
    4533  result = stbi_info_from_file(f, x, y, comp);
    4534  fclose(f);
    4535  return result;
    4536 }
    4537 
    4538 STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp)
    4539 {
    4540  int r;
    4541  stbi__context s;
    4542  long pos = ftell(f);
    4543  stbi__start_file(&s, f);
    4544  r = stbi__info_main(&s,x,y,comp);
    4545  fseek(f,pos,SEEK_SET);
    4546  return r;
    4547 }
    4548 #endif // !STBI_NO_STDIO
    4549 
    4550 STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp)
    4551 {
    4552  stbi__context s;
    4553  stbi__start_mem(&s,buffer,len);
    4554  return stbi__info_main(&s,x,y,comp);
    4555 }
    4556 
    4557 STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp)
    4558 {
    4559  stbi__context s;
    4560  stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user);
    4561  return stbi__info_main(&s,x,y,comp);
    4562 }
    4563 
    4564 #endif // STB_IMAGE_IMPLEMENTATION
    4565 
    4566 /*
    4567  revision history:
    4568  1.46 (2014-08-26)
    4569  fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG
    4570  1.45 (2014-08-16)
    4571  fix MSVC-ARM internal compiler error by wrapping malloc
    4572  1.44 (2014-08-07)
    4573  various warning fixes from Ronny Chevalier
    4574  1.43 (2014-07-15)
    4575  fix MSVC-only compiler problem in code changed in 1.42
    4576  1.42 (2014-07-09)
    4577  don't define _CRT_SECURE_NO_WARNINGS (affects user code)
    4578  fixes to stbi__cleanup_jpeg path
    4579  added STBI_ASSERT to avoid requiring assert.h
    4580  1.41 (2014-06-25)
    4581  fix search&replace from 1.36 that messed up comments/error messages
    4582  1.40 (2014-06-22)
    4583  fix gcc struct-initialization warning
    4584  1.39 (2014-06-15)
    4585  fix to TGA optimization when req_comp != number of components in TGA;
    4586  fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite)
    4587  add support for BMP version 5 (more ignored fields)
    4588  1.38 (2014-06-06)
    4589  suppress MSVC warnings on integer casts truncating values
    4590  fix accidental rename of 'skip' field of I/O
    4591  1.37 (2014-06-04)
    4592  remove duplicate typedef
    4593  1.36 (2014-06-03)
    4594  convert to header file single-file library
    4595  if de-iphone isn't set, load iphone images color-swapped instead of returning NULL
    4596  1.35 (2014-05-27)
    4597  various warnings
    4598  fix broken STBI_SIMD path
    4599  fix bug where stbi_load_from_file no longer left file pointer in correct place
    4600  fix broken non-easy path for 32-bit BMP (possibly never used)
    4601  TGA optimization by Arseny Kapoulkine
    4602  1.34 (unknown)
    4603  use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case
    4604  1.33 (2011-07-14)
    4605  make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements
    4606  1.32 (2011-07-13)
    4607  support for "info" function for all supported filetypes (SpartanJ)
    4608  1.31 (2011-06-20)
    4609  a few more leak fixes, bug in PNG handling (SpartanJ)
    4610  1.30 (2011-06-11)
    4611  added ability to load files via callbacks to accomidate custom input streams (Ben Wenger)
    4612  removed deprecated format-specific test/load functions
    4613  removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway
    4614  error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha)
    4615  fix inefficiency in decoding 32-bit BMP (David Woo)
    4616  1.29 (2010-08-16)
    4617  various warning fixes from Aurelien Pocheville
    4618  1.28 (2010-08-01)
    4619  fix bug in GIF palette transparency (SpartanJ)
    4620  1.27 (2010-08-01)
    4621  cast-to-stbi_uc to fix warnings
    4622  1.26 (2010-07-24)
    4623  fix bug in file buffering for PNG reported by SpartanJ
    4624  1.25 (2010-07-17)
    4625  refix trans_data warning (Won Chun)
    4626  1.24 (2010-07-12)
    4627  perf improvements reading from files on platforms with lock-heavy fgetc()
    4628  minor perf improvements for jpeg
    4629  deprecated type-specific functions so we'll get feedback if they're needed
    4630  attempt to fix trans_data warning (Won Chun)
    4631  1.23 fixed bug in iPhone support
    4632  1.22 (2010-07-10)
    4633  removed image *writing* support
    4634  stbi_info support from Jetro Lauha
    4635  GIF support from Jean-Marc Lienher
    4636  iPhone PNG-extensions from James Brown
    4637  warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva)
    4638  1.21 fix use of 'stbi_uc' in header (reported by jon blow)
    4639  1.20 added support for Softimage PIC, by Tom Seddon
    4640  1.19 bug in interlaced PNG corruption check (found by ryg)
    4641  1.18 2008-08-02
    4642  fix a threading bug (local mutable static)
    4643  1.17 support interlaced PNG
    4644  1.16 major bugfix - stbi__convert_format converted one too many pixels
    4645  1.15 initialize some fields for thread safety
    4646  1.14 fix threadsafe conversion bug
    4647  header-file-only version (#define STBI_HEADER_FILE_ONLY before including)
    4648  1.13 threadsafe
    4649  1.12 const qualifiers in the API
    4650  1.11 Support installable IDCT, colorspace conversion routines
    4651  1.10 Fixes for 64-bit (don't use "unsigned long")
    4652  optimized upsampling by Fabian "ryg" Giesen
    4653  1.09 Fix format-conversion for PSD code (bad global variables!)
    4654  1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz
    4655  1.07 attempt to fix C++ warning/errors again
    4656  1.06 attempt to fix C++ warning/errors again
    4657  1.05 fix TGA loading to return correct *comp and use good luminance calc
    4658  1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free
    4659  1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR
    4660  1.02 support for (subset of) HDR files, float interface for preferred access to them
    4661  1.01 fix bug: possible bug in handling right-side up bmps... not sure
    4662  fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all
    4663  1.00 interface to zlib that skips zlib header
    4664  0.99 correct handling of alpha in palette
    4665  0.98 TGA loader by lonesock; dynamically add loaders (untested)
    4666  0.97 jpeg errors on too large a file; also catch another malloc failure
    4667  0.96 fix detection of invalid v value - particleman@mollyrocket forum
    4668  0.95 during header scan, seek to markers in case of padding
    4669  0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same
    4670  0.93 handle jpegtran output; verbose errors
    4671  0.92 read 4,8,16,24,32-bit BMP files of several formats
    4672  0.91 output 24-bit Windows 3.0 BMP files
    4673  0.90 fix a few more warnings; bump version number to approach 1.0
    4674  0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd
    4675  0.60 fix compiling as c++
    4676  0.59 fix warnings: merge Dave Moore's -Wall fixes
    4677  0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian
    4678  0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available
    4679  0.56 fix bug: zlib uncompressed mode len vs. nlen
    4680  0.55 fix bug: restart_interval not initialized to 0
    4681  0.54 allow NULL for 'int *comp'
    4682  0.53 fix bug in png 3->4; speedup png decoding
    4683  0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments
    4684  0.51 obey req_comp requests, 1-component jpegs return as 1-component,
    4685  on 'test' only check type, not whether we support this variant
    4686  0.50 first released version
    4687 */
    Definition: stb_image.h:243
    +
    +
    + + + + diff --git a/doc/html/structglimac_1_1_b_box3f-members.html b/doc/html/structglimac_1_1_b_box3f-members.html new file mode 100644 index 0000000..9d337b0 --- /dev/null +++ b/doc/html/structglimac_1_1_b_box3f-members.html @@ -0,0 +1,112 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    glimac::BBox3f Member List
    +
    +
    + +

    This is the complete list of members for glimac::BBox3f, including all inherited members.

    + + + + + + + + + + + + + +
    BBox3f() (defined in glimac::BBox3f)glimac::BBox3finline
    BBox3f(const BBox3f &other) (defined in glimac::BBox3f)glimac::BBox3finline
    BBox3f(const glm::vec3 &v) (defined in glimac::BBox3f)glimac::BBox3finline
    BBox3f(const glm::vec3 &lower, const glm::vec3 &upper) (defined in glimac::BBox3f)glimac::BBox3finline
    dim (defined in glimac::BBox3f)glimac::BBox3fstatic
    empty() const (defined in glimac::BBox3f)glimac::BBox3finline
    grow(const BBox3f &other) (defined in glimac::BBox3f)glimac::BBox3finline
    grow(const glm::vec3 &other) (defined in glimac::BBox3f)glimac::BBox3finline
    lower (defined in glimac::BBox3f)glimac::BBox3f
    operator=(const BBox3f &other) (defined in glimac::BBox3f)glimac::BBox3finline
    size() const (defined in glimac::BBox3f)glimac::BBox3finline
    upper (defined in glimac::BBox3f)glimac::BBox3f
    +
    + + + + diff --git a/doc/html/structglimac_1_1_b_box3f.html b/doc/html/structglimac_1_1_b_box3f.html new file mode 100644 index 0000000..a74e436 --- /dev/null +++ b/doc/html/structglimac_1_1_b_box3f.html @@ -0,0 +1,149 @@ + + + + + + + +SpacImac Runner: glimac::BBox3f Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + + +
    + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    BBox3f (const BBox3f &other)
     
    +BBox3foperator= (const BBox3f &other)
     
    BBox3f (const glm::vec3 &v)
     
    BBox3f (const glm::vec3 &lower, const glm::vec3 &upper)
     
    +void grow (const BBox3f &other)
     
    +void grow (const glm::vec3 &other)
     
    +bool empty () const
     
    +glm::vec3 size () const
     
    + + + + + +

    +Public Attributes

    +glm::vec3 lower
     
    +glm::vec3 upper
     
    + + + +

    +Static Public Attributes

    +static const auto dim = 3
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/doc/html/structglimac_1_1_b_box3f.js b/doc/html/structglimac_1_1_b_box3f.js new file mode 100644 index 0000000..6cbe51f --- /dev/null +++ b/doc/html/structglimac_1_1_b_box3f.js @@ -0,0 +1,14 @@ +var structglimac_1_1_b_box3f = +[ + [ "BBox3f", "structglimac_1_1_b_box3f.html#ad465498ccf0a9b58990864bbc229ea5c", null ], + [ "BBox3f", "structglimac_1_1_b_box3f.html#aa28fa2e34e2ecda8936aab0f4e2bfe76", null ], + [ "BBox3f", "structglimac_1_1_b_box3f.html#a76a193184d30bf08bc8725885ed19ef0", null ], + [ "BBox3f", "structglimac_1_1_b_box3f.html#abf2d788fa66847dac227a2669ebe9d30", null ], + [ "empty", "structglimac_1_1_b_box3f.html#a96444ed68bfab6e7c648467f2e8f9218", null ], + [ "grow", "structglimac_1_1_b_box3f.html#adce98ea70025deadd71e0467435d654a", null ], + [ "grow", "structglimac_1_1_b_box3f.html#a37342deeeba63916f701037ac1acc002", null ], + [ "operator=", "structglimac_1_1_b_box3f.html#aac86d7db2775def5999a06dd10da81c8", null ], + [ "size", "structglimac_1_1_b_box3f.html#aca6b2f64a4a904fe8b42a8121ee7f087", null ], + [ "lower", "structglimac_1_1_b_box3f.html#a6416c303ada3a2433fb742021e021c27", null ], + [ "upper", "structglimac_1_1_b_box3f.html#a5446e619162abd8011cab858f98d1954", null ] +]; \ No newline at end of file diff --git a/doc/html/structglimac_1_1_geometry_1_1_material-members.html b/doc/html/structglimac_1_1_geometry_1_1_material-members.html new file mode 100644 index 0000000..36d8ff8 --- /dev/null +++ b/doc/html/structglimac_1_1_geometry_1_1_material-members.html @@ -0,0 +1,112 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    glimac::Geometry::Material Member List
    +
    + +
    + + + + diff --git a/doc/html/structglimac_1_1_geometry_1_1_material.html b/doc/html/structglimac_1_1_geometry_1_1_material.html new file mode 100644 index 0000000..11c44d3 --- /dev/null +++ b/doc/html/structglimac_1_1_geometry_1_1_material.html @@ -0,0 +1,144 @@ + + + + + + + +SpacImac Runner: glimac::Geometry::Material Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    glimac::Geometry::Material Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +glm::vec3 m_Ka
     
    +glm::vec3 m_Kd
     
    +glm::vec3 m_Ks
     
    +glm::vec3 m_Tr
     
    +glm::vec3 m_Le
     
    +float m_Shininess
     
    +float m_RefractionIndex
     
    +float m_Dissolve
     
    +const Imagem_pKaMap
     
    +const Imagem_pKdMap
     
    +const Imagem_pKsMap
     
    +const Imagem_pNormalMap
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/doc/html/structglimac_1_1_geometry_1_1_material.js b/doc/html/structglimac_1_1_geometry_1_1_material.js new file mode 100644 index 0000000..b223f5b --- /dev/null +++ b/doc/html/structglimac_1_1_geometry_1_1_material.js @@ -0,0 +1,15 @@ +var structglimac_1_1_geometry_1_1_material = +[ + [ "m_Dissolve", "structglimac_1_1_geometry_1_1_material.html#a16ffa9e0bdb2c128fd7850a951227bf0", null ], + [ "m_Ka", "structglimac_1_1_geometry_1_1_material.html#aeff0b7a66fe6b75d6d5e07d59f8c7187", null ], + [ "m_Kd", "structglimac_1_1_geometry_1_1_material.html#a6a8a53af1e2fce607684401c057d8243", null ], + [ "m_Ks", "structglimac_1_1_geometry_1_1_material.html#a4f2c1b8288e8dc45444eae1718bfcea1", null ], + [ "m_Le", "structglimac_1_1_geometry_1_1_material.html#a9ce961f48a5f71dc6697ce29ad7115be", null ], + [ "m_pKaMap", "structglimac_1_1_geometry_1_1_material.html#a041e7d8f1dccafd1ec42efae4068ad3f", null ], + [ "m_pKdMap", "structglimac_1_1_geometry_1_1_material.html#a9a26257d9b03b0e0ccd16e566a5d782a", null ], + [ "m_pKsMap", "structglimac_1_1_geometry_1_1_material.html#a78e0546646aae5b635200947bc9bd295", null ], + [ "m_pNormalMap", "structglimac_1_1_geometry_1_1_material.html#a8c066caf9be0f2a4d59b0b5fdf73e007", null ], + [ "m_RefractionIndex", "structglimac_1_1_geometry_1_1_material.html#abd69296b7d6fb73e2aea61764e385606", null ], + [ "m_Shininess", "structglimac_1_1_geometry_1_1_material.html#a3b1996eacf625d67e833bcbe96a1d344", null ], + [ "m_Tr", "structglimac_1_1_geometry_1_1_material.html#afdf9d8c876cc33ca62a196fecaaa3ccb", null ] +]; \ No newline at end of file diff --git a/doc/html/structglimac_1_1_geometry_1_1_mesh-members.html b/doc/html/structglimac_1_1_geometry_1_1_mesh-members.html new file mode 100644 index 0000000..71f1549 --- /dev/null +++ b/doc/html/structglimac_1_1_geometry_1_1_mesh-members.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    glimac::Geometry::Mesh Member List
    +
    +
    + +

    This is the complete list of members for glimac::Geometry::Mesh, including all inherited members.

    + + + + + + +
    m_nIndexCount (defined in glimac::Geometry::Mesh)glimac::Geometry::Mesh
    m_nIndexOffset (defined in glimac::Geometry::Mesh)glimac::Geometry::Mesh
    m_nMaterialIndex (defined in glimac::Geometry::Mesh)glimac::Geometry::Mesh
    m_sName (defined in glimac::Geometry::Mesh)glimac::Geometry::Mesh
    Mesh(std::string name, unsigned int indexOffset, unsigned int indexCount, int materialIndex) (defined in glimac::Geometry::Mesh)glimac::Geometry::Meshinline
    +
    + + + + diff --git a/doc/html/structglimac_1_1_geometry_1_1_mesh.html b/doc/html/structglimac_1_1_geometry_1_1_mesh.html new file mode 100644 index 0000000..c93470a --- /dev/null +++ b/doc/html/structglimac_1_1_geometry_1_1_mesh.html @@ -0,0 +1,127 @@ + + + + + + + +SpacImac Runner: glimac::Geometry::Mesh Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    glimac::Geometry::Mesh Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    Mesh (std::string name, unsigned int indexOffset, unsigned int indexCount, int materialIndex)
     
    + + + + + + + + + +

    +Public Attributes

    +std::string m_sName
     
    +unsigned int m_nIndexOffset
     
    +unsigned int m_nIndexCount
     
    +int m_nMaterialIndex
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/doc/html/structglimac_1_1_geometry_1_1_mesh.js b/doc/html/structglimac_1_1_geometry_1_1_mesh.js new file mode 100644 index 0000000..f2afd47 --- /dev/null +++ b/doc/html/structglimac_1_1_geometry_1_1_mesh.js @@ -0,0 +1,8 @@ +var structglimac_1_1_geometry_1_1_mesh = +[ + [ "Mesh", "structglimac_1_1_geometry_1_1_mesh.html#ab1d9f7b63bf6a2f1f18e4122196fae17", null ], + [ "m_nIndexCount", "structglimac_1_1_geometry_1_1_mesh.html#a75519af4f04cd87eaea7bf091baaab07", null ], + [ "m_nIndexOffset", "structglimac_1_1_geometry_1_1_mesh.html#a896417ec0e07c46755564808948053eb", null ], + [ "m_nMaterialIndex", "structglimac_1_1_geometry_1_1_mesh.html#a5ca9239ca2a5af322a87c259824557e8", null ], + [ "m_sName", "structglimac_1_1_geometry_1_1_mesh.html#a46cc4ac1ecfdf763e2512c27a2155277", null ] +]; \ No newline at end of file diff --git a/doc/html/structglimac_1_1_geometry_1_1_vertex-members.html b/doc/html/structglimac_1_1_geometry_1_1_vertex-members.html new file mode 100644 index 0000000..d27ed00 --- /dev/null +++ b/doc/html/structglimac_1_1_geometry_1_1_vertex-members.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    glimac::Geometry::Vertex Member List
    +
    +
    + +

    This is the complete list of members for glimac::Geometry::Vertex, including all inherited members.

    + + + + +
    m_Normal (defined in glimac::Geometry::Vertex)glimac::Geometry::Vertex
    m_Position (defined in glimac::Geometry::Vertex)glimac::Geometry::Vertex
    m_TexCoords (defined in glimac::Geometry::Vertex)glimac::Geometry::Vertex
    +
    + + + + diff --git a/doc/html/structglimac_1_1_geometry_1_1_vertex.html b/doc/html/structglimac_1_1_geometry_1_1_vertex.html new file mode 100644 index 0000000..c865f8e --- /dev/null +++ b/doc/html/structglimac_1_1_geometry_1_1_vertex.html @@ -0,0 +1,117 @@ + + + + + + + +SpacImac Runner: glimac::Geometry::Vertex Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    glimac::Geometry::Vertex Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +glm::vec3 m_Position
     
    +glm::vec3 m_Normal
     
    +glm::vec2 m_TexCoords
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/doc/html/structglimac_1_1_geometry_1_1_vertex.js b/doc/html/structglimac_1_1_geometry_1_1_vertex.js new file mode 100644 index 0000000..bb22525 --- /dev/null +++ b/doc/html/structglimac_1_1_geometry_1_1_vertex.js @@ -0,0 +1,6 @@ +var structglimac_1_1_geometry_1_1_vertex = +[ + [ "m_Normal", "structglimac_1_1_geometry_1_1_vertex.html#aacc943d9b84fe33e7b22cc9d36f178f0", null ], + [ "m_Position", "structglimac_1_1_geometry_1_1_vertex.html#a94d0358d5cd9963f2565fdb7f28ee3b8", null ], + [ "m_TexCoords", "structglimac_1_1_geometry_1_1_vertex.html#ab5633b199c86e43426871f1dfc163af3", null ] +]; \ No newline at end of file diff --git a/doc/html/structglimac_1_1_shape_vertex-members.html b/doc/html/structglimac_1_1_shape_vertex-members.html new file mode 100644 index 0000000..e6579e6 --- /dev/null +++ b/doc/html/structglimac_1_1_shape_vertex-members.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    glimac::ShapeVertex Member List
    +
    +
    + +

    This is the complete list of members for glimac::ShapeVertex, including all inherited members.

    + + + + +
    normal (defined in glimac::ShapeVertex)glimac::ShapeVertex
    position (defined in glimac::ShapeVertex)glimac::ShapeVertex
    texCoords (defined in glimac::ShapeVertex)glimac::ShapeVertex
    +
    + + + + diff --git a/doc/html/structglimac_1_1_shape_vertex.html b/doc/html/structglimac_1_1_shape_vertex.html new file mode 100644 index 0000000..daf0299 --- /dev/null +++ b/doc/html/structglimac_1_1_shape_vertex.html @@ -0,0 +1,117 @@ + + + + + + + +SpacImac Runner: glimac::ShapeVertex Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    glimac::ShapeVertex Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +glm::vec3 position
     
    +glm::vec3 normal
     
    +glm::vec2 texCoords
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/doc/html/structglimac_1_1_shape_vertex.js b/doc/html/structglimac_1_1_shape_vertex.js new file mode 100644 index 0000000..3c9ef72 --- /dev/null +++ b/doc/html/structglimac_1_1_shape_vertex.js @@ -0,0 +1,6 @@ +var structglimac_1_1_shape_vertex = +[ + [ "normal", "structglimac_1_1_shape_vertex.html#af8ef5c93da6bc86b5dcfa3d8e2a8fc21", null ], + [ "position", "structglimac_1_1_shape_vertex.html#a727bc4adace4f00e47069ce7373e3b97", null ], + [ "texCoords", "structglimac_1_1_shape_vertex.html#ab694e76716c4cdc5e8636325b5fbeee2", null ] +]; \ No newline at end of file diff --git a/doc/html/structstbi__io__callbacks-members.html b/doc/html/structstbi__io__callbacks-members.html new file mode 100644 index 0000000..dd95f70 --- /dev/null +++ b/doc/html/structstbi__io__callbacks-members.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    stbi_io_callbacks Member List
    +
    +
    + +

    This is the complete list of members for stbi_io_callbacks, including all inherited members.

    + + + + +
    eof (defined in stbi_io_callbacks)stbi_io_callbacks
    read (defined in stbi_io_callbacks)stbi_io_callbacks
    skip (defined in stbi_io_callbacks)stbi_io_callbacks
    +
    + + + + diff --git a/doc/html/structstbi__io__callbacks.html b/doc/html/structstbi__io__callbacks.html new file mode 100644 index 0000000..d3cfac0 --- /dev/null +++ b/doc/html/structstbi__io__callbacks.html @@ -0,0 +1,117 @@ + + + + + + + +SpacImac Runner: stbi_io_callbacks Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    stbi_io_callbacks Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +int(* read )(void *user, char *data, int size)
     
    +void(* skip )(void *user, int n)
     
    +int(* eof )(void *user)
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/doc/html/structstbi__io__callbacks.js b/doc/html/structstbi__io__callbacks.js new file mode 100644 index 0000000..a6f7a5b --- /dev/null +++ b/doc/html/structstbi__io__callbacks.js @@ -0,0 +1,6 @@ +var structstbi__io__callbacks = +[ + [ "eof", "structstbi__io__callbacks.html#a319639db2f76e715eed7a7a974136832", null ], + [ "read", "structstbi__io__callbacks.html#a623e46b3a2a019611601409926283a88", null ], + [ "skip", "structstbi__io__callbacks.html#a257aac5480a90a6c4b8fbe86c1b01068", null ] +]; \ No newline at end of file diff --git a/doc/html/structstd_1_1hash_3_01glimac_1_1_file_path_01_4-members.html b/doc/html/structstd_1_1hash_3_01glimac_1_1_file_path_01_4-members.html new file mode 100644 index 0000000..590a4d8 --- /dev/null +++ b/doc/html/structstd_1_1hash_3_01glimac_1_1_file_path_01_4-members.html @@ -0,0 +1,101 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    std::hash< glimac::FilePath > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< glimac::FilePath >, including all inherited members.

    + + +
    operator()(const glimac::FilePath &k) const (defined in std::hash< glimac::FilePath >)std::hash< glimac::FilePath >inline
    +
    + + + + diff --git a/doc/html/structstd_1_1hash_3_01glimac_1_1_file_path_01_4.html b/doc/html/structstd_1_1hash_3_01glimac_1_1_file_path_01_4.html new file mode 100644 index 0000000..b379267 --- /dev/null +++ b/doc/html/structstd_1_1hash_3_01glimac_1_1_file_path_01_4.html @@ -0,0 +1,111 @@ + + + + + + + +SpacImac Runner: std::hash< glimac::FilePath > Struct Template Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    std::hash< glimac::FilePath > Struct Template Reference
    +
    +
    + + + + +

    +Public Member Functions

    +std::size_t operator() (const glimac::FilePath &k) const
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/doc/html/structstd_1_1hash_3_01glimac_1_1_file_path_01_4.js b/doc/html/structstd_1_1hash_3_01glimac_1_1_file_path_01_4.js new file mode 100644 index 0000000..a167090 --- /dev/null +++ b/doc/html/structstd_1_1hash_3_01glimac_1_1_file_path_01_4.js @@ -0,0 +1,4 @@ +var structstd_1_1hash_3_01glimac_1_1_file_path_01_4 = +[ + [ "operator()", "structstd_1_1hash_3_01glimac_1_1_file_path_01_4.html#aef106b8bc300f85d943f47f631965d37", null ] +]; \ No newline at end of file diff --git a/doc/html/structtinyobj_1_1material__t-members.html b/doc/html/structtinyobj_1_1material__t-members.html new file mode 100644 index 0000000..621d0ae --- /dev/null +++ b/doc/html/structtinyobj_1_1material__t-members.html @@ -0,0 +1,115 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tinyobj::material_t Member List
    +
    +
    + +

    This is the complete list of members for tinyobj::material_t, including all inherited members.

    + + + + + + + + + + + + + + + + +
    ambient (defined in tinyobj::material_t)tinyobj::material_t
    ambient_texname (defined in tinyobj::material_t)tinyobj::material_t
    diffuse (defined in tinyobj::material_t)tinyobj::material_t
    diffuse_texname (defined in tinyobj::material_t)tinyobj::material_t
    dissolve (defined in tinyobj::material_t)tinyobj::material_t
    emission (defined in tinyobj::material_t)tinyobj::material_t
    illum (defined in tinyobj::material_t)tinyobj::material_t
    ior (defined in tinyobj::material_t)tinyobj::material_t
    name (defined in tinyobj::material_t)tinyobj::material_t
    normal_texname (defined in tinyobj::material_t)tinyobj::material_t
    shininess (defined in tinyobj::material_t)tinyobj::material_t
    specular (defined in tinyobj::material_t)tinyobj::material_t
    specular_texname (defined in tinyobj::material_t)tinyobj::material_t
    transmittance (defined in tinyobj::material_t)tinyobj::material_t
    unknown_parameter (defined in tinyobj::material_t)tinyobj::material_t
    +
    + + + + diff --git a/doc/html/structtinyobj_1_1material__t.html b/doc/html/structtinyobj_1_1material__t.html new file mode 100644 index 0000000..2e107cb --- /dev/null +++ b/doc/html/structtinyobj_1_1material__t.html @@ -0,0 +1,153 @@ + + + + + + + +SpacImac Runner: tinyobj::material_t Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    tinyobj::material_t Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +std::string name
     
    +float ambient [3]
     
    +float diffuse [3]
     
    +float specular [3]
     
    +float transmittance [3]
     
    +float emission [3]
     
    +float shininess
     
    +float ior
     
    +float dissolve
     
    +int illum
     
    +std::string ambient_texname
     
    +std::string diffuse_texname
     
    +std::string specular_texname
     
    +std::string normal_texname
     
    +std::map< std::string, std::string > unknown_parameter
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/doc/html/structtinyobj_1_1material__t.js b/doc/html/structtinyobj_1_1material__t.js new file mode 100644 index 0000000..4ddd23f --- /dev/null +++ b/doc/html/structtinyobj_1_1material__t.js @@ -0,0 +1,18 @@ +var structtinyobj_1_1material__t = +[ + [ "ambient", "structtinyobj_1_1material__t.html#a43b73b4858f8901eea238e007c8719ce", null ], + [ "ambient_texname", "structtinyobj_1_1material__t.html#ae988eed637f368374becbb672798a45e", null ], + [ "diffuse", "structtinyobj_1_1material__t.html#a6ca52b575604328ad4d5674b2891a780", null ], + [ "diffuse_texname", "structtinyobj_1_1material__t.html#ad7f71a301a261fca07d2e50edccc792d", null ], + [ "dissolve", "structtinyobj_1_1material__t.html#ac7dfb767305c4225c5b3a964acb9498d", null ], + [ "emission", "structtinyobj_1_1material__t.html#ab84b63eb4a936b6fba7392cdcea6d6f6", null ], + [ "illum", "structtinyobj_1_1material__t.html#af846245315bd70c1a4f815dfdd6b80cc", null ], + [ "ior", "structtinyobj_1_1material__t.html#aaa7d5495ba26b249e2ea3c368b505b56", null ], + [ "name", "structtinyobj_1_1material__t.html#a41fde82dd0ec383b1d4ee258c4e4a1b9", null ], + [ "normal_texname", "structtinyobj_1_1material__t.html#a7512ccf46044357bea1739d583871578", null ], + [ "shininess", "structtinyobj_1_1material__t.html#a4f893e510fd30f63c687a8ad53000d15", null ], + [ "specular", "structtinyobj_1_1material__t.html#a7bbad62eae583d5c381909f1f4f76471", null ], + [ "specular_texname", "structtinyobj_1_1material__t.html#aed8c38d64472ba0db5186dba800b1b34", null ], + [ "transmittance", "structtinyobj_1_1material__t.html#a40e7cf9bc5c2cf9048152d39be6b82d7", null ], + [ "unknown_parameter", "structtinyobj_1_1material__t.html#a18b700227c94d410ed1aa550c7fa9226", null ] +]; \ No newline at end of file diff --git a/doc/html/structtinyobj_1_1mesh__t-members.html b/doc/html/structtinyobj_1_1mesh__t-members.html new file mode 100644 index 0000000..47d622e --- /dev/null +++ b/doc/html/structtinyobj_1_1mesh__t-members.html @@ -0,0 +1,105 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tinyobj::mesh_t Member List
    +
    +
    + +

    This is the complete list of members for tinyobj::mesh_t, including all inherited members.

    + + + + + + +
    indices (defined in tinyobj::mesh_t)tinyobj::mesh_t
    material_ids (defined in tinyobj::mesh_t)tinyobj::mesh_t
    normals (defined in tinyobj::mesh_t)tinyobj::mesh_t
    positions (defined in tinyobj::mesh_t)tinyobj::mesh_t
    texcoords (defined in tinyobj::mesh_t)tinyobj::mesh_t
    +
    + + + + diff --git a/doc/html/structtinyobj_1_1mesh__t.html b/doc/html/structtinyobj_1_1mesh__t.html new file mode 100644 index 0000000..4fa1620 --- /dev/null +++ b/doc/html/structtinyobj_1_1mesh__t.html @@ -0,0 +1,123 @@ + + + + + + + +SpacImac Runner: tinyobj::mesh_t Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    tinyobj::mesh_t Struct Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Attributes

    +std::vector< float > positions
     
    +std::vector< float > normals
     
    +std::vector< float > texcoords
     
    +std::vector< unsigned int > indices
     
    +std::vector< int > material_ids
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/doc/html/structtinyobj_1_1mesh__t.js b/doc/html/structtinyobj_1_1mesh__t.js new file mode 100644 index 0000000..71f9064 --- /dev/null +++ b/doc/html/structtinyobj_1_1mesh__t.js @@ -0,0 +1,8 @@ +var structtinyobj_1_1mesh__t = +[ + [ "indices", "structtinyobj_1_1mesh__t.html#aa0a07f40559a650e6917c506d78e298a", null ], + [ "material_ids", "structtinyobj_1_1mesh__t.html#a57b2f12dfa3fd620b25babcd3a09ec6b", null ], + [ "normals", "structtinyobj_1_1mesh__t.html#a28c2f7eb3114e6ed82a5b7326a4e7a1c", null ], + [ "positions", "structtinyobj_1_1mesh__t.html#a3014a27913256384aa283345b69ff2ec", null ], + [ "texcoords", "structtinyobj_1_1mesh__t.html#a0fc485afc76bcd7e147b22285d7d6575", null ] +]; \ No newline at end of file diff --git a/doc/html/structtinyobj_1_1obj__shape-members.html b/doc/html/structtinyobj_1_1obj__shape-members.html new file mode 100644 index 0000000..d267f55 --- /dev/null +++ b/doc/html/structtinyobj_1_1obj__shape-members.html @@ -0,0 +1,103 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tinyobj::obj_shape Member List
    +
    +
    + +

    This is the complete list of members for tinyobj::obj_shape, including all inherited members.

    + + + + +
    v (defined in tinyobj::obj_shape)tinyobj::obj_shape
    vn (defined in tinyobj::obj_shape)tinyobj::obj_shape
    vt (defined in tinyobj::obj_shape)tinyobj::obj_shape
    +
    + + + + diff --git a/doc/html/structtinyobj_1_1obj__shape.html b/doc/html/structtinyobj_1_1obj__shape.html new file mode 100644 index 0000000..64b6367 --- /dev/null +++ b/doc/html/structtinyobj_1_1obj__shape.html @@ -0,0 +1,117 @@ + + + + + + + +SpacImac Runner: tinyobj::obj_shape Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    tinyobj::obj_shape Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +std::vector< float > v
     
    +std::vector< float > vn
     
    +std::vector< float > vt
     
    +
    The documentation for this struct was generated from the following file:
      +
    • src/glimac/tiny_obj_loader.cpp
    • +
    +
    +
    + + + + diff --git a/doc/html/structtinyobj_1_1obj__shape.js b/doc/html/structtinyobj_1_1obj__shape.js new file mode 100644 index 0000000..1a327b4 --- /dev/null +++ b/doc/html/structtinyobj_1_1obj__shape.js @@ -0,0 +1,6 @@ +var structtinyobj_1_1obj__shape = +[ + [ "v", "structtinyobj_1_1obj__shape.html#ad088c2525809a91953fca51798f64b89", null ], + [ "vn", "structtinyobj_1_1obj__shape.html#ac87ced8cdff16da62a202bd390e77a8e", null ], + [ "vt", "structtinyobj_1_1obj__shape.html#a2d6dcc97e66ca2596dd50236c899b456", null ] +]; \ No newline at end of file diff --git a/doc/html/structtinyobj_1_1shape__t-members.html b/doc/html/structtinyobj_1_1shape__t-members.html new file mode 100644 index 0000000..8d63f29 --- /dev/null +++ b/doc/html/structtinyobj_1_1shape__t-members.html @@ -0,0 +1,102 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tinyobj::shape_t Member List
    +
    +
    + +

    This is the complete list of members for tinyobj::shape_t, including all inherited members.

    + + + +
    mesh (defined in tinyobj::shape_t)tinyobj::shape_t
    name (defined in tinyobj::shape_t)tinyobj::shape_t
    +
    + + + + diff --git a/doc/html/structtinyobj_1_1shape__t.html b/doc/html/structtinyobj_1_1shape__t.html new file mode 100644 index 0000000..190074c --- /dev/null +++ b/doc/html/structtinyobj_1_1shape__t.html @@ -0,0 +1,114 @@ + + + + + + + +SpacImac Runner: tinyobj::shape_t Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    tinyobj::shape_t Struct Reference
    +
    +
    + + + + + + +

    +Public Attributes

    +std::string name
     
    +mesh_t mesh
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/doc/html/structtinyobj_1_1shape__t.js b/doc/html/structtinyobj_1_1shape__t.js new file mode 100644 index 0000000..ec574ca --- /dev/null +++ b/doc/html/structtinyobj_1_1shape__t.js @@ -0,0 +1,5 @@ +var structtinyobj_1_1shape__t = +[ + [ "mesh", "structtinyobj_1_1shape__t.html#a3dacb06dfbfe9e245ff4bc7b5b3d9818", null ], + [ "name", "structtinyobj_1_1shape__t.html#a98650e2e66d00934f68de88eafb34630", null ] +]; \ No newline at end of file diff --git a/doc/html/structtinyobj_1_1vertex__index-members.html b/doc/html/structtinyobj_1_1vertex__index-members.html new file mode 100644 index 0000000..a2de179 --- /dev/null +++ b/doc/html/structtinyobj_1_1vertex__index-members.html @@ -0,0 +1,106 @@ + + + + + + + +SpacImac Runner: Member List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tinyobj::vertex_index Member List
    +
    +
    + +

    This is the complete list of members for tinyobj::vertex_index, including all inherited members.

    + + + + + + + +
    v_idx (defined in tinyobj::vertex_index)tinyobj::vertex_index
    vertex_index() (defined in tinyobj::vertex_index)tinyobj::vertex_indexinline
    vertex_index(int idx) (defined in tinyobj::vertex_index)tinyobj::vertex_indexinline
    vertex_index(int vidx, int vtidx, int vnidx) (defined in tinyobj::vertex_index)tinyobj::vertex_indexinline
    vn_idx (defined in tinyobj::vertex_index)tinyobj::vertex_index
    vt_idx (defined in tinyobj::vertex_index)tinyobj::vertex_index
    +
    + + + + diff --git a/doc/html/structtinyobj_1_1vertex__index.html b/doc/html/structtinyobj_1_1vertex__index.html new file mode 100644 index 0000000..5cbf5fb --- /dev/null +++ b/doc/html/structtinyobj_1_1vertex__index.html @@ -0,0 +1,127 @@ + + + + + + + +SpacImac Runner: tinyobj::vertex_index Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    tinyobj::vertex_index Struct Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    vertex_index (int idx)
     
    vertex_index (int vidx, int vtidx, int vnidx)
     
    + + + + + + + +

    +Public Attributes

    +int v_idx
     
    +int vt_idx
     
    +int vn_idx
     
    +
    The documentation for this struct was generated from the following file:
      +
    • src/glimac/tiny_obj_loader.cpp
    • +
    +
    +
    + + + + diff --git a/doc/html/structtinyobj_1_1vertex__index.js b/doc/html/structtinyobj_1_1vertex__index.js new file mode 100644 index 0000000..08ed538 --- /dev/null +++ b/doc/html/structtinyobj_1_1vertex__index.js @@ -0,0 +1,9 @@ +var structtinyobj_1_1vertex__index = +[ + [ "vertex_index", "structtinyobj_1_1vertex__index.html#a44cc515c3c58d087edc620bc90d0bea8", null ], + [ "vertex_index", "structtinyobj_1_1vertex__index.html#a894075fa64d32082219c138f111e4753", null ], + [ "vertex_index", "structtinyobj_1_1vertex__index.html#aa3c4d6bcba36c2abb06e25497a1376a1", null ], + [ "v_idx", "structtinyobj_1_1vertex__index.html#a91a2616fb97e0da915a40654edf9b558", null ], + [ "vn_idx", "structtinyobj_1_1vertex__index.html#a30f2a63a5ed20cc3ad64e340c4020da8", null ], + [ "vt_idx", "structtinyobj_1_1vertex__index.html#aae7e058d3aa0993aa05e95d82dd6b8bf", null ] +]; \ No newline at end of file diff --git a/doc/html/sync_off.png b/doc/html/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/doc/html/sync_off.png differ diff --git a/doc/html/sync_on.png b/doc/html/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/doc/html/sync_on.png differ diff --git a/doc/html/tab_a.png b/doc/html/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/doc/html/tab_a.png differ diff --git a/doc/html/tab_b.png b/doc/html/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/doc/html/tab_b.png differ diff --git a/doc/html/tab_h.png b/doc/html/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/doc/html/tab_h.png differ diff --git a/doc/html/tab_s.png b/doc/html/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/doc/html/tab_s.png differ diff --git a/doc/html/tabs.css b/doc/html/tabs.css new file mode 100644 index 0000000..bbde11e --- /dev/null +++ b/doc/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:transparent}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/doc/html/tiny__obj__loader_8h_source.html b/doc/html/tiny__obj__loader_8h_source.html new file mode 100644 index 0000000..e5b8a7d --- /dev/null +++ b/doc/html/tiny__obj__loader_8h_source.html @@ -0,0 +1,104 @@ + + + + + + + +SpacImac Runner: src/glimac/tiny_obj_loader.h Source File + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    SpacImac Runner +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    tiny_obj_loader.h
    +
    +
    +
    1 //
    2 // Copyright 2012-2013, Syoyo Fujita.
    3 //
    4 // Licensed under 2-clause BSD liecense.
    5 //
    6 #ifndef _TINY_OBJ_LOADER_H
    7 #define _TINY_OBJ_LOADER_H
    8 
    9 #include <string>
    10 #include <vector>
    11 #include <map>
    12 
    13 namespace tinyobj {
    14 
    15 typedef struct
    16 {
    17  std::string name;
    18 
    19  float ambient[3];
    20  float diffuse[3];
    21  float specular[3];
    22  float transmittance[3];
    23  float emission[3];
    24  float shininess;
    25  float ior; // index of refraction
    26  float dissolve; // 1 == opaque; 0 == fully transparent
    27  // illumination model (see http://www.fileformat.info/format/material/)
    28  int illum;
    29 
    30  std::string ambient_texname;
    31  std::string diffuse_texname;
    32  std::string specular_texname;
    33  std::string normal_texname;
    34  std::map<std::string, std::string> unknown_parameter;
    35 } material_t;
    36 
    37 typedef struct
    38 {
    39  std::vector<float> positions;
    40  std::vector<float> normals;
    41  std::vector<float> texcoords;
    42  std::vector<unsigned int> indices;
    43  std::vector<int> material_ids; // per-mesh material ID
    44 } mesh_t;
    45 
    46 typedef struct
    47 {
    48  std::string name;
    49  mesh_t mesh;
    50 } shape_t;
    51 
    53 {
    54 public:
    55  MaterialReader(){}
    56  virtual ~MaterialReader(){}
    57 
    58  virtual std::string operator() (
    59  const std::string& matId,
    60  std::vector<material_t>& materials,
    61  std::map<std::string, int>& matMap) = 0;
    62 };
    63 
    65  public MaterialReader
    66 {
    67  public:
    68  MaterialFileReader(const std::string& mtl_basepath): m_mtlBasePath(mtl_basepath) {}
    69  virtual ~MaterialFileReader() {}
    70  virtual std::string operator() (
    71  const std::string& matId,
    72  std::vector<material_t>& materials,
    73  std::map<std::string, int>& matMap);
    74 
    75  private:
    76  std::string m_mtlBasePath;
    77 };
    78 
    84 std::string LoadObj(
    85  std::vector<shape_t>& shapes, // [output]
    86  std::vector<material_t>& materials, // [output]
    87  const char* filename,
    88  const char* mtl_basepath = NULL);
    89 
    93 std::string LoadObj(
    94  std::vector<shape_t>& shapes, // [output]
    95  std::vector<material_t>& materials, // [output]
    96  std::istream& inStream,
    97  MaterialReader& readMatFn);
    98 
    101 std::string LoadMtl (
    102  std::map<std::string, int>& material_map,
    103  std::vector<material_t>& materials,
    104  std::istream& inStream);
    105 }
    106 
    107 #endif // _TINY_OBJ_LOADER_H
    Definition: tiny_obj_loader.cpp:33
    +
    Definition: tiny_obj_loader.h:15
    +
    Definition: tiny_obj_loader.h:46
    +
    Definition: tiny_obj_loader.h:64
    +
    Definition: tiny_obj_loader.h:37
    +
    Definition: tiny_obj_loader.h:52
    +
    +
    + + + + diff --git a/elt/Score b/elt/Score new file mode 100644 index 0000000..8a19925 --- /dev/null +++ b/elt/Score @@ -0,0 +1 @@ +72 Anonyme diff --git a/elt/Score.ttf b/elt/Score.ttf new file mode 100644 index 0000000..8a19925 --- /dev/null +++ b/elt/Score.ttf @@ -0,0 +1 @@ +72 Anonyme diff --git a/elt/ppm/final_01.ppm b/elt/ppm/final_01.ppm new file mode 100644 index 0000000..6839a62 --- /dev/null +++ b/elt/ppm/final_01.ppm @@ -0,0 +1,7504 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +50 50 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +100 +100 +100 +235 +150 +235 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +250 +250 +70 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +250 +250 +70 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +250 +250 +70 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +35 +185 +70 +35 +185 +70 +35 +185 +70 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +250 +250 +70 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +237 +169 +236 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +237 +169 +236 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +237 +169 +236 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 diff --git a/elt/ppm/level_01.xcf b/elt/ppm/level_01.xcf new file mode 100644 index 0000000..2650098 Binary files /dev/null and b/elt/ppm/level_01.xcf differ diff --git a/elt/ppm/level_01_ASCII.ppm b/elt/ppm/level_01_ASCII.ppm new file mode 100644 index 0000000..5ad12b1 --- /dev/null +++ b/elt/ppm/level_01_ASCII.ppm @@ -0,0 +1,7504 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +50 50 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +100 +100 +100 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +125 +65 +35 +125 +65 +35 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +35 +185 +70 +35 +185 +70 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +35 +185 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +255 +255 +255 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +35 +185 +70 +35 +185 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +95 +95 +225 +95 +95 +225 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +35 +185 +70 +35 +185 +70 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +35 +185 +70 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +35 +185 +70 +35 +185 +70 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +255 +255 +255 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +35 +185 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +35 +185 +70 +35 +185 +70 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +35 +185 +70 +35 +185 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +0 +0 +0 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 diff --git a/elt/ppm/level_01_Turns_ASCII.ppm b/elt/ppm/level_01_Turns_ASCII.ppm new file mode 100644 index 0000000..167e1c1 --- /dev/null +++ b/elt/ppm/level_01_Turns_ASCII.ppm @@ -0,0 +1,7504 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +50 50 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +100 +100 +100 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +213 +129 +212 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +213 +129 +212 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +125 +65 +35 +125 +65 +35 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +237 +169 +236 +237 +169 +236 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +237 +169 +236 +237 +169 +236 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +213 +129 +212 +213 +129 +212 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +213 +129 +212 +213 +129 +212 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +237 +169 +236 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +35 +185 +70 +35 +185 +70 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +237 +169 +236 +237 +169 +236 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +35 +185 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +255 +255 +255 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +35 +185 +70 +35 +185 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +95 +95 +225 +95 +95 +225 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +35 +185 +70 +35 +185 +70 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +35 +185 +70 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +35 +185 +70 +35 +185 +70 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +255 +255 +255 +255 +255 +255 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +255 +255 +255 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +213 +129 +212 +213 +129 +212 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +35 +185 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +213 +129 +212 +213 +129 +212 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +35 +185 +70 +35 +185 +70 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +35 +185 +70 +35 +185 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +95 +95 +225 +95 +95 +225 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +237 +169 +236 +237 +169 +236 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +95 +95 +225 +235 +150 +235 +237 +169 +236 +237 +169 +236 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +0 +0 +0 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 diff --git a/elt/ppm/level_01_coin_ASCII.ppm b/elt/ppm/level_01_coin_ASCII.ppm new file mode 100644 index 0000000..e865835 --- /dev/null +++ b/elt/ppm/level_01_coin_ASCII.ppm @@ -0,0 +1,7504 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +50 50 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +250 +250 +70 +250 +250 +70 +250 +250 +70 +250 +250 +70 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +251 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +251 +255 +255 +253 +255 +255 +248 +255 +255 +251 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +250 +250 +70 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +250 +250 +70 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 diff --git a/elt/ppm/test_01.ppm b/elt/ppm/test_01.ppm new file mode 100644 index 0000000..10ddf68 --- /dev/null +++ b/elt/ppm/test_01.ppm @@ -0,0 +1,7504 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +50 50 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +100 +100 +100 +235 +150 +235 +250 +250 +70 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +250 +250 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +0 +0 +0 +0 +0 +0 +0 +0 +0 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +237 +169 +236 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +237 +169 +236 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +237 +169 +236 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +35 +185 +70 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +237 +169 +236 +237 +169 +236 +237 +169 +236 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +235 +150 +235 +213 +129 +212 +213 +129 +212 +213 +129 +212 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +125 +65 +35 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +235 +150 +235 +235 +150 +235 +235 +150 +235 +125 +65 +35 +125 +65 +35 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 +255 diff --git a/elt/sound/SOUNDS_FILES.txt b/elt/sound/SOUNDS_FILES.txt deleted file mode 100644 index e69de29..0000000 diff --git a/elt/sound/nyancat.wav b/elt/sound/nyancat.wav new file mode 100644 index 0000000..dc564a5 Binary files /dev/null and b/elt/sound/nyancat.wav differ diff --git a/elt/texture/EarthMap.jpg b/elt/texture/EarthMap.jpg new file mode 100644 index 0000000..a3b62b0 Binary files /dev/null and b/elt/texture/EarthMap.jpg differ diff --git a/elt/texture/ecran_GAME_OVER.png b/elt/texture/ecran_GAME_OVER.png new file mode 100644 index 0000000..3db38a9 Binary files /dev/null and b/elt/texture/ecran_GAME_OVER.png differ diff --git a/elt/texture/ecran_debut_RUNNER_2.png b/elt/texture/ecran_debut_RUNNER_2.png new file mode 100644 index 0000000..6849965 Binary files /dev/null and b/elt/texture/ecran_debut_RUNNER_2.png differ diff --git a/elt/texture/ecran_menu_vide.png b/elt/texture/ecran_menu_vide.png new file mode 100644 index 0000000..eb92124 Binary files /dev/null and b/elt/texture/ecran_menu_vide.png differ diff --git a/elt/texture/ecran_pause_RUNNER_2.png b/elt/texture/ecran_pause_RUNNER_2.png new file mode 100644 index 0000000..2c0b792 Binary files /dev/null and b/elt/texture/ecran_pause_RUNNER_2.png differ diff --git a/elt/texture/ecran_score_RUNNER.png b/elt/texture/ecran_score_RUNNER.png new file mode 100644 index 0000000..7e25f9f Binary files /dev/null and b/elt/texture/ecran_score_RUNNER.png differ diff --git a/elt/texture/skybox/ancien/back.tga b/elt/texture/skybox/ancien/back.tga new file mode 100755 index 0000000..7c77770 Binary files /dev/null and b/elt/texture/skybox/ancien/back.tga differ diff --git a/elt/texture/skybox/ancien/bottom.tga b/elt/texture/skybox/ancien/bottom.tga new file mode 100755 index 0000000..d0ce9a4 Binary files /dev/null and b/elt/texture/skybox/ancien/bottom.tga differ diff --git a/elt/texture/skybox/ancien/front.tga b/elt/texture/skybox/ancien/front.tga new file mode 100755 index 0000000..2eb4c07 Binary files /dev/null and b/elt/texture/skybox/ancien/front.tga differ diff --git a/elt/texture/skybox/ancien/left.tga b/elt/texture/skybox/ancien/left.tga new file mode 100755 index 0000000..198a964 Binary files /dev/null and b/elt/texture/skybox/ancien/left.tga differ diff --git a/elt/texture/skybox/ancien/right.tga b/elt/texture/skybox/ancien/right.tga new file mode 100755 index 0000000..aa14a9a Binary files /dev/null and b/elt/texture/skybox/ancien/right.tga differ diff --git a/elt/texture/skybox/ancien/top.tga b/elt/texture/skybox/ancien/top.tga new file mode 100755 index 0000000..7e45464 Binary files /dev/null and b/elt/texture/skybox/ancien/top.tga differ diff --git a/elt/texture/skybox/back.tga b/elt/texture/skybox/back.tga new file mode 100644 index 0000000..7dc8c12 Binary files /dev/null and b/elt/texture/skybox/back.tga differ diff --git a/elt/texture/skybox/bottom.tga b/elt/texture/skybox/bottom.tga new file mode 100644 index 0000000..d080dd6 Binary files /dev/null and b/elt/texture/skybox/bottom.tga differ diff --git a/elt/texture/skybox/front.tga b/elt/texture/skybox/front.tga new file mode 100644 index 0000000..775d654 Binary files /dev/null and b/elt/texture/skybox/front.tga differ diff --git a/elt/texture/skybox/left.tga b/elt/texture/skybox/left.tga new file mode 100644 index 0000000..bd7534a Binary files /dev/null and b/elt/texture/skybox/left.tga differ diff --git a/elt/texture/skybox/right.tga b/elt/texture/skybox/right.tga new file mode 100644 index 0000000..c3122b6 Binary files /dev/null and b/elt/texture/skybox/right.tga differ diff --git a/elt/texture/skybox/top.tga b/elt/texture/skybox/top.tga new file mode 100644 index 0000000..19a0d1d Binary files /dev/null and b/elt/texture/skybox/top.tga differ diff --git a/elt/texture/spaceplayer.jpg b/elt/texture/spaceplayer.jpg new file mode 100644 index 0000000..d15f4f7 Binary files /dev/null and b/elt/texture/spaceplayer.jpg differ diff --git a/elt/ttf/starjedi.ttf b/elt/ttf/starjedi.ttf new file mode 100644 index 0000000..2ac5bb1 Binary files /dev/null and b/elt/ttf/starjedi.ttf differ diff --git a/include/AppManager.hpp b/include/AppManager.hpp new file mode 100644 index 0000000..a9d9a83 --- /dev/null +++ b/include/AppManager.hpp @@ -0,0 +1,42 @@ +#include +#include +#include +#include +#include + +/// AppManager Class manage all the Game +/// Create all the game elements +class AppManager +{ +public: + + /// Default Constructor of class AppManager + AppManager(); + + /// Getter for the window name + inline const std::string getWindowName() const { + return m_window_name; + } + + /// Getter for the window's width + inline const int getAppWidth() const { + return m_width; + } + + /// Getter for the window's height + inline const int getAppHeight() const { + return m_height; + } + + /// method which launch the application + int start(char** argv); + +public: + + std::string m_window_name; + + int m_width = 800; + int m_height = 600; + int m_score = 0; + +}; diff --git a/include/Menu.hpp b/include/Menu.hpp new file mode 100644 index 0000000..9f056b4 --- /dev/null +++ b/include/Menu.hpp @@ -0,0 +1,96 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "TrackballCamera.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma once + +/// Class Menu +class Menu +{ + + /// mrthod wich fill the vertices vector + void build(); + +public: + Menu() + { + build(); + } + + /// Brief Getter Menu visibility + inline + bool visibility() const + { + return isVisible; + } + + /// Brief Setter Menu visibility + inline + void setVisibility(bool inBool) + { + isVisible = inBool; + } + + /// Brief getter menu type + inline + int type() const + { + return m_type; + } + + /// Brief setter of menu type + inline + void type(const int inType) + { + m_type = inType; + } + + +/// method which set vao and vbo parameters + void initMenu(GLuint &vbo,GLuint &vao); + /// method which draw the menu + void displayMenu() const; + + /// method which give a pointer on the data + const ShapeVertex* getDataPointer() const { + return &m_Vertices[0]; + } + + /// Getter vertex number + GLsizei getVertexCount() const { + return m_nVertexCount; + } + +/// method who create vbo + void vboManager(GLuint &vbo); +/// method which create the vao from the vbo + void vaoManager(GLuint &vao,GLuint &vbo); + +/// method which handle sdl mouse cllick event + int onMouseEvent(glm::ivec2 position); + +private: + bool isVisible = true; + int m_type = 0; + + GLuint m_vbo,m_vao; + std::vector m_Vertices; + GLsizei m_nVertexCount = 6; + + +}; diff --git a/include/exception/ExceptIMAC.hpp b/include/exception/ExceptIMAC.hpp new file mode 100644 index 0000000..a9f62ad --- /dev/null +++ b/include/exception/ExceptIMAC.hpp @@ -0,0 +1,42 @@ +#ifndef ERREUR_HPP +#define ERREUR_HPP + +#pragma once + +#include +#include +#include +#include + +namespace cpp_IMAC{ + + class ExceptIMAC : public std::exception{ + public : + // CONSTRUCTOR AND DESTRUCTOR + ExceptIMAC( + const std::string &description, + const std::string &filename, + const unsigned int line + ) throw(); + ~ExceptIMAC() throw() = default; + + + const char* what() const throw(){ + return m_what.c_str(); + } + + private : + // ATTRIBUTE + std::string m_description; + std::string m_filename; + unsigned int m_line; + std::string m_what; + }; + +} + +//macro (cf TP) --> pour que le code soit recopié par le compilateur, +//pour avoir la bonne ligne et le bon fichier +#define THROW_EXCEPTION(str) throw cpp_IMAC::ExceptIMAC(str, __FILE__, __LINE__) + +#endif diff --git a/include/glimac/Cone.hpp b/include/glimac/Cone.hpp index 769b35a..2798026 100644 --- a/include/glimac/Cone.hpp +++ b/include/glimac/Cone.hpp @@ -2,18 +2,19 @@ #include #include "common.hpp" +#include "Object.hpp" namespace glimac { - + // Représente un cone ouvert discrétisé dont la base est centrée en (0, 0, 0) (dans son repère local) // Son axe vertical est (0, 1, 0) et ses axes transversaux sont (1, 0, 0) et (0, 0, 1) -class Cone { +class Cone :public Object { // Alloue et construit les données (implantation dans le .cpp) void build(GLfloat height, GLfloat radius, GLsizei discLat, GLsizei discHeight); public: // Constructeur: alloue le tableau de données et construit les attributs des vertex - Cone(GLfloat height, GLfloat radius, GLsizei discLat, GLsizei discHeight): + Cone(GLfloat height=1, GLfloat radius=1, GLsizei discLat=100, GLsizei discHeight=100): m_nVertexCount(0) { build(height, radius, discLat, discHeight); // Construction (voir le .cpp) } @@ -22,15 +23,33 @@ class Cone { const ShapeVertex* getDataPointer() const { return &m_Vertices[0]; } - + // Renvoit le nombre de vertex GLsizei getVertexCount() const { return m_nVertexCount; } + + void vboManager(GLuint &vbo); + void vaoManager(GLuint &vao,GLuint &vbo); + + inline + GLuint getVao() const + { + return m_vao; + } + + void draw(); + + void description() + { + std::cout<<"Je suis un Cone"< m_Vertices; GLsizei m_nVertexCount; // Nombre de sommets }; - + } diff --git a/include/glimac/Grid.hpp b/include/glimac/Grid.hpp new file mode 100644 index 0000000..9434d77 --- /dev/null +++ b/include/glimac/Grid.hpp @@ -0,0 +1,57 @@ +#pragma once + +#include +#include +#include "common.hpp" +#include "Object.hpp" + + +namespace glimac{ + +class Grid :public Object +{ + + void build(); + +public: + + Grid() + { + build(); // Construction (voir le .cpp) + } + + // Renvoit le pointeur vers les données + const ShapeVertex* getDataPointer() const { + return &m_Vertices[0]; + } + + // Renvoit le nombre de vertex + GLsizei getVertexCount() const { + return m_nVertexCount; + } + + void vboManager(GLuint &vbo); + void vaoManager(GLuint &vao,GLuint &vbo); + + inline + GLuint getVao() const + { + return m_vao; + } + + void draw(); + + void description() + { + std::cout<<"Je suis un Grid"< m_Vertices; + GLsizei m_nVertexCount = 0; // Nombre de sommets + +}; + +} diff --git a/include/glimac/Landmark.hpp b/include/glimac/Landmark.hpp new file mode 100644 index 0000000..61660b8 --- /dev/null +++ b/include/glimac/Landmark.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include +#include +#include "common.hpp" +#include "Object.hpp" + + +namespace glimac{ + +class Landmark :public Object +{ + + void build(); + +public: + + Landmark(): + m_nVertexCount(6) + { + build(); // Construction (voir le .cpp) + } + + // Renvoit le pointeur vers les données + inline + const ShapeVertex* getDataPointer() const { + return &m_Vertices[0]; + } + + // Renvoit le nombre de vertex + inline + GLsizei getVertexCount() const { + return m_nVertexCount; + } + + void vboManager(GLuint &vbo); + void vaoManager(GLuint &vao,GLuint &vbo); + + inline + GLuint getVao() const + { + return m_vao; + } + + void draw(); + + void description() + { + std::cout<<"Je suis un repere"< m_Vertices; + GLsizei m_nVertexCount; // Nombre de sommets + +}; + +} diff --git a/include/glimac/Object.hpp b/include/glimac/Object.hpp new file mode 100644 index 0000000..d03b404 --- /dev/null +++ b/include/glimac/Object.hpp @@ -0,0 +1,58 @@ +#pragma once + +#include +#include +#include "common.hpp" + +namespace glimac{ + + class Object + { + //virtual void build() = 0; + + public: + + Object() + {} + + // Renvoit le pointeur vers les données + inline + const ShapeVertex* getDataPointer() const { + return &m_Vertices[0]; + } + + // Renvoit le nombre de vertex + inline + GLsizei getVertexCount() const { + return m_nVertexCount; + } + + virtual void vboManager(GLuint &vbo); + virtual void vaoManager(GLuint &vao,GLuint &vbo); + + inline + GLuint getVao() const + { + return m_vao; + } + + virtual void draw() + {} + + + + +/********************************************TEST********/ + int x = 0; + int y = 0; +/********************************************************/ + private: + + GLuint m_vbo,m_vao; + std::vector m_Vertices; + GLsizei m_nVertexCount; // Nombre de sommets + + + + }; +} diff --git a/include/glimac/Shader.hpp b/include/glimac/Shader.hpp index de22e90..81cf16d 100644 --- a/include/glimac/Shader.hpp +++ b/include/glimac/Shader.hpp @@ -42,8 +42,8 @@ class Shader { private: Shader(const Shader&); Shader& operator =(const Shader&); - GLuint m_nGLId; + }; // Load a shader (but does not compile it) diff --git a/include/glimac/ShaderL.hpp b/include/glimac/ShaderL.hpp new file mode 100644 index 0000000..7b73b6a --- /dev/null +++ b/include/glimac/ShaderL.hpp @@ -0,0 +1,192 @@ +#ifndef SHADERL_H +#define SHADERL_H + +//#include +#include + +#include +#include +#include +#include + +class ShaderL +{ +public: + unsigned int ID; + // constructor generates the shader on the fly + // ------------------------------------------------------------------------ + ShaderL(const char* vertexPath, const char* fragmentPath, const char* geometryPath = nullptr) + { + // 1. retrieve the vertex/fragment source code from filePath + std::string vertexCode; + std::string fragmentCode; + std::string geometryCode; + std::ifstream vShaderFile; + std::ifstream fShaderFile; + std::ifstream gShaderFile; + // ensure ifstream objects can throw exceptions: + vShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit); + fShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit); + gShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit); + try + { + // open files + vShaderFile.open(vertexPath); + fShaderFile.open(fragmentPath); + std::stringstream vShaderStream, fShaderStream; + // read file's buffer contents into streams + vShaderStream << vShaderFile.rdbuf(); + fShaderStream << fShaderFile.rdbuf(); + // close file handlers + vShaderFile.close(); + fShaderFile.close(); + // convert stream into string + vertexCode = vShaderStream.str(); + fragmentCode = fShaderStream.str(); + // if geometry shader path is present, also load a geometry shader + if(geometryPath != nullptr) + { + gShaderFile.open(geometryPath); + std::stringstream gShaderStream; + gShaderStream << gShaderFile.rdbuf(); + gShaderFile.close(); + geometryCode = gShaderStream.str(); + } + } + catch (std::ifstream::failure e) + { + std::cout << "ERROR::SHADER::FILE_NOT_SUCCESFULLY_READ" << std::endl; + } + const char* vShaderCode = vertexCode.c_str(); + const char * fShaderCode = fragmentCode.c_str(); + // 2. compile shaders + unsigned int vertex, fragment; + // vertex shader + vertex = glCreateShader(GL_VERTEX_SHADER); + glShaderSource(vertex, 1, &vShaderCode, NULL); + glCompileShader(vertex); + checkCompileErrors(vertex, "VERTEX"); + // fragment Shader + fragment = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(fragment, 1, &fShaderCode, NULL); + glCompileShader(fragment); + checkCompileErrors(fragment, "FRAGMENT"); + // if geometry shader is given, compile geometry shader + unsigned int geometry; + if(geometryPath != nullptr) + { + const char * gShaderCode = geometryCode.c_str(); + geometry = glCreateShader(GL_GEOMETRY_SHADER); + glShaderSource(geometry, 1, &gShaderCode, NULL); + glCompileShader(geometry); + checkCompileErrors(geometry, "GEOMETRY"); + } + // shader Program + ID = glCreateProgram(); + glAttachShader(ID, vertex); + glAttachShader(ID, fragment); + if(geometryPath != nullptr) + glAttachShader(ID, geometry); + glLinkProgram(ID); + checkCompileErrors(ID, "PROGRAM"); + // delete the shaders as they're linked into our program now and no longer necessery + glDeleteShader(vertex); + glDeleteShader(fragment); + if(geometryPath != nullptr) + glDeleteShader(geometry); + + } + // activate the shader + // ------------------------------------------------------------------------ + void use() + { + glUseProgram(ID); + } + // utility uniform functions + // ------------------------------------------------------------------------ + void setBool(const std::string &name, bool value) const + { + glUniform1i(glGetUniformLocation(ID, name.c_str()), (int)value); + } + // ------------------------------------------------------------------------ + void setInt(const std::string &name, int value) const + { + glUniform1i(glGetUniformLocation(ID, name.c_str()), value); + } + // ------------------------------------------------------------------------ + void setFloat(const std::string &name, float value) const + { + glUniform1f(glGetUniformLocation(ID, name.c_str()), value); + } + // ------------------------------------------------------------------------ + void setVec2(const std::string &name, const glm::vec2 &value) const + { + glUniform2fv(glGetUniformLocation(ID, name.c_str()), 1, &value[0]); + } + void setVec2(const std::string &name, float x, float y) const + { + glUniform2f(glGetUniformLocation(ID, name.c_str()), x, y); + } + // ------------------------------------------------------------------------ + void setVec3(const std::string &name, const glm::vec3 &value) const + { + glUniform3fv(glGetUniformLocation(ID, name.c_str()), 1, &value[0]); + } + void setVec3(const std::string &name, float x, float y, float z) const + { + glUniform3f(glGetUniformLocation(ID, name.c_str()), x, y, z); + } + // ------------------------------------------------------------------------ + void setVec4(const std::string &name, const glm::vec4 &value) const + { + glUniform4fv(glGetUniformLocation(ID, name.c_str()), 1, &value[0]); + } + void setVec4(const std::string &name, float x, float y, float z, float w) + { + glUniform4f(glGetUniformLocation(ID, name.c_str()), x, y, z, w); + } + // ------------------------------------------------------------------------ + void setMat2(const std::string &name, const glm::mat2 &mat) const + { + glUniformMatrix2fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE, &mat[0][0]); + } + // ------------------------------------------------------------------------ + void setMat3(const std::string &name, const glm::mat3 &mat) const + { + glUniformMatrix3fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE, &mat[0][0]); + } + // ------------------------------------------------------------------------ + void setMat4(const std::string &name, const glm::mat4 &mat) const + { + glUniformMatrix4fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE, &mat[0][0]); + } + +private: + // utility function for checking shader compilation/linking errors. + // ------------------------------------------------------------------------ + void checkCompileErrors(GLuint shader, std::string type) + { + GLint success; + GLchar infoLog[1024]; + if(type != "PROGRAM") + { + glGetShaderiv(shader, GL_COMPILE_STATUS, &success); + if(!success) + { + glGetShaderInfoLog(shader, 1024, NULL, infoLog); + std::cout << "ERROR::SHADER_COMPILATION_ERROR of type: " << type << "\n" << infoLog << "\n -- --------------------------------------------------- -- " << std::endl; + } + } + else + { + glGetProgramiv(shader, GL_LINK_STATUS, &success); + if(!success) + { + glGetProgramInfoLog(shader, 1024, NULL, infoLog); + std::cout << "ERROR::PROGRAM_LINKING_ERROR of type: " << type << "\n" << infoLog << "\n -- --------------------------------------------------- -- " << std::endl; + } + } + } +}; +#endif + diff --git a/include/glimac/Sphere.hpp b/include/glimac/Sphere.hpp index 748bfc0..41c7f70 100644 --- a/include/glimac/Sphere.hpp +++ b/include/glimac/Sphere.hpp @@ -3,18 +3,19 @@ #include #include "common.hpp" +#include "Object.hpp" namespace glimac { // Représente une sphère discrétisée centrée en (0, 0, 0) (dans son repère local) // Son axe vertical est (0, 1, 0) et ses axes transversaux sont (1, 0, 0) et (0, 0, 1) -class Sphere { +class Sphere :public Object{ // Alloue et construit les données (implantation dans le .cpp) void build(GLfloat radius, GLsizei discLat, GLsizei discLong); public: // Constructeur: alloue le tableau de données et construit les attributs des vertex - Sphere(GLfloat radius, GLsizei discLat, GLsizei discLong): + Sphere(GLfloat radius=0.5, GLsizei discLat=100, GLsizei discLong=100): m_nVertexCount(0) { build(radius, discLat, discLong); // Construction (voir le .cpp) } @@ -23,15 +24,33 @@ class Sphere { const ShapeVertex* getDataPointer() const { return &m_Vertices[0]; } - + // Renvoit le nombre de vertex GLsizei getVertexCount() const { return m_nVertexCount; } + void vboManager(GLuint &vbo); + void vaoManager(GLuint &vao,GLuint &vbo); + + inline + GLuint getVao() const + { + return m_vao; + } + + void draw(); + + void description() + { + std::cout<<"Je suis une Sphere"< m_Vertices; GLsizei m_nVertexCount; // Nombre de sommets }; - -} \ No newline at end of file + +} diff --git a/include/glimac/TrackballCamera.hpp b/include/glimac/TrackballCamera.hpp deleted file mode 100644 index 76cf412..0000000 --- a/include/glimac/TrackballCamera.hpp +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once - -#include -#include - -namespace glimac { - - -class TrackballCamera -{ -public: - - TrackballCamera(); - TrackballCamera(const float fDistance,const float fAngleX,const float fAngleY) - :m_fDistance(fDistance),m_fAngleX(fAngleX),m_fAngleY(fAngleY) - {} - - void moveFront(float delta) - { - if(delta>0) - m_fDistance -= 0.1 ; - else - m_fDistance += 0.1; - } - - void rotateLeft(float degrees) - { - m_fAngleY +=degrees; - } - - void rotateUp(float degrees) - { - m_fAngleX+=degrees; - } - glm::mat4 getViewMatrix() const - { - glm::mat4 viewMatrix; - - viewMatrix = glm::rotate(viewMatrix,glm::radians(m_fAngleY),glm::vec3(0,0,1.0)); - viewMatrix *= glm::rotate(viewMatrix,glm::radians(m_fAngleX),glm::vec3(0.0,1.0,0)); - viewMatrix *= glm::translate(glm::mat4(1.0),glm::vec3(0,0,m_fDistance/5)); - - return viewMatrix; - } - - - -private: - float m_fDistance=5; - float m_fAngleX=0; - float m_fAngleY=0; - - -}; - -} - - diff --git a/include/glimac/cube.hpp b/include/glimac/cube.hpp index e8834a4..24de0e7 100644 --- a/include/glimac/cube.hpp +++ b/include/glimac/cube.hpp @@ -1,40 +1,66 @@ #pragma once +#include #include #include "common.hpp" +#include "Object.hpp" +#include "perspectiveShader.hpp" namespace glimac{ -class Cube + +class Cube :public Object { - void build(GLfloat m_edge); + void build(); public: - Cube(GLfloat m_edge): + Cube(): m_nVertexCount(36) { - build(m_edge); // Construction (voir le .cpp) + build(); } // Renvoit le pointeur vers les données - const ShapeVertex* getDataPointer() const { - return &m_Vertices[0]; - } + inline + const ShapeVertex* getDataPointer() const { + return &m_Vertices[0]; + } + + // Renvoit le nombre de vertex + inline + GLsizei getVertexCount() const { + return m_nVertexCount; + } + + void vboManager(GLuint &vbo); + void vaoManager(GLuint &vao,GLuint &vbo); + + inline + GLuint getVao() const + { + return m_vao; + } + + void draw(); + + void description() + { + std::cout<<"Je suis un Cube"< m_Vertices; GLsizei m_nVertexCount; // Nombre de sommets + }; } diff --git a/include/graphic_engine/Font.hpp b/include/graphic_engine/Font.hpp new file mode 100644 index 0000000..362d11b --- /dev/null +++ b/include/graphic_engine/Font.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include +#include "SDL/SDL.h" +#include "SDL/SDL_image.h" +#include "SDL/SDL_ttf.h" +//#include "AppManager.hpp" + +class Font +{ +public: + /// \brief default constructor + Font(); + + + /// constructor with parameters + /// param filePath to know which font and where to load it + Font(const std::string &fontPath); + + int puissance2sup(const int i); + + + /// setter for filePath + void setFontPath(const std::string &fontPath); + + inline std::string getFontPath() const{ + return m_fontPath; + } + + /// \brief default destructor + ~Font(); + + + // bool loadFont(AppManager *app); + void loadFont(); + + +private: + std::string m_fontPath; /*!< path and name of font to load */ +}; diff --git a/include/graphic_engine/Scene.hpp b/include/graphic_engine/Scene.hpp new file mode 100644 index 0000000..871a31e --- /dev/null +++ b/include/graphic_engine/Scene.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include +#include +#include +#include + +#include +#include + +#include "camera.hpp" +#include "Element.hpp" +#include "Map.hpp" +#include "Hero.hpp" +#include "perspectiveShader.hpp" + +class Scene +{ + +public: + + ///Constructor by default + + Scene(); + + /// Constructor with parameters + /// param inDataObject : vector of Object (Cube, Cone, Sphere) + + Scene( + std::vector> inDataObject, + std::shared_ptr inCamera); + + + Scene( + std::vector> inDataObject, + std::shared_ptr inCamera, + std::vector inTexture, + std::vector inShader); + + ///Destructor + ~Scene(); + + ///Methods which draw the scene with a speed translation by reading the map + void loadScene(motor_game::Map &inMap,float speed); + +private: + + + std::vector> m_dataObject; + std::shared_ptr m_camera; + std::vector m_texture; + std::vector m_shader; + +}; diff --git a/include/graphic_engine/Skybox.hpp b/include/graphic_engine/Skybox.hpp new file mode 100644 index 0000000..0fa15cb --- /dev/null +++ b/include/graphic_engine/Skybox.hpp @@ -0,0 +1,83 @@ +#pragma once + +#include +#include + +#include "common.hpp" +#include "TextureLoader.hpp" + + + +class Skybox +{ + +public: + + /// Default Skybox constructor + Skybox() + { + voManager(); + createTexture(); + } + +/// method which create the vbo and the vao for the skybox + void voManager(); + +/// method which create a texture by default + void createTexture(); +/// method wich create a custom Texture +/// param faces : vector which contains 6 filephaths for the 6 image of the skybox + void createTexture(std::vector faces); + + void displaySkybox(); + +private: + + GLuint m_vbo,m_vao; + GLuint m_cubemapTexture; + GLfloat m_skyboxVertices[108] = { + // Positions + -1.0f, 1.0f, -1.0f, + -1.0f, -1.0f, -1.0f, + 1.0f, -1.0f, -1.0f, + 1.0f, -1.0f, -1.0f, + 1.0f, 1.0f, -1.0f, + -1.0f, 1.0f, -1.0f, + + -1.0f, -1.0f, 1.0f, + -1.0f, -1.0f, -1.0f, + -1.0f, 1.0f, -1.0f, + -1.0f, 1.0f, -1.0f, + -1.0f, 1.0f, 1.0f, + -1.0f, -1.0f, 1.0f, + + 1.0f, -1.0f, -1.0f, + 1.0f, -1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, -1.0f, + 1.0f, -1.0f, -1.0f, + + -1.0f, -1.0f, 1.0f, + -1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f, -1.0f, 1.0f, + -1.0f, -1.0f, 1.0f, + + -1.0f, 1.0f, -1.0f, + 1.0f, 1.0f, -1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + -1.0f, 1.0f, 1.0f, + -1.0f, 1.0f, -1.0f, + + -1.0f, -1.0f, -1.0f, + -1.0f, -1.0f, 1.0f, + 1.0f, -1.0f, -1.0f, + 1.0f, -1.0f, -1.0f, + -1.0f, -1.0f, 1.0f, + 1.0f, -1.0f, 1.0f + }; + +}; diff --git a/include/graphic_engine/TextureLoader.hpp b/include/graphic_engine/TextureLoader.hpp new file mode 100644 index 0000000..25d1378 --- /dev/null +++ b/include/graphic_engine/TextureLoader.hpp @@ -0,0 +1,62 @@ +#pragma once + +#include +#include +#include +#include + +#include + +using namespace glimac; +class TextureLoader +{ +public: + + /// Load Texture method + /// param FilePath : contain filepath of the texture + static GLuint LoadTexture( const char* FilePath ) + { + + std::unique_ptr pImage; + pImage = loadImage(FilePath); + GLuint texture; + glGenTextures(1,&texture); + glBindTexture(GL_TEXTURE_2D,texture); + glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,pImage->getWidth(), + pImage->getHeight(),0,GL_RGBA,GL_FLOAT,pImage->getPixels()); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glBindTexture(GL_TEXTURE_2D,0); + + return texture; + } + + /// Load Texture for the skybox + /// param faces : vector which contains 6 filephaths for the 6 image of the skybox + static GLuint LoadCubeMap( std::vector faces ) + { + std::unique_ptr pImage; + GLuint texture; + + glGenTextures(1,&texture); + glBindTexture(GL_TEXTURE_CUBE_MAP,texture); + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + for (unsigned int i = 0; i < faces.size(); i++) + { + + + pImage = loadImage(faces[i]); + glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,0,GL_RGBA,pImage->getWidth(), + pImage->getHeight(),0,GL_RGBA,GL_FLOAT,pImage->getPixels()); + pImage.reset(nullptr); + } + + glBindTexture(GL_TEXTURE_CUBE_MAP,0); + + return texture; + } + + +}; diff --git a/include/graphic_engine/TrackballCamera.hpp b/include/graphic_engine/TrackballCamera.hpp new file mode 100644 index 0000000..3dc7f6e --- /dev/null +++ b/include/graphic_engine/TrackballCamera.hpp @@ -0,0 +1,85 @@ +#pragma once + +#include +#include +#include "camera.hpp" + +using namespace glimac; + +/// Class TrackballCamera derived from camera +class TrackballCamera :public Camera +{ +public: + + /// Default constructor TrackballCameracamera + TrackballCamera(): + m_fDistance(0),m_fAngleX(0),m_fAngleY(0) + {} + + /// Constructor with parameters + TrackballCamera(const float fDistance,const float fAngleX,const float fAngleY) + :m_fDistance(fDistance),m_fAngleX(fAngleX),m_fAngleY(fAngleY) + {} + + /// method which handle sdl keyboard event + void onKeyboardEvent(const SDL_Event &event) + { + if ((event.type == SDL_KEYDOWN) && (event.key.keysym.sym == SDLK_r)) + { + m_fAngleX = 0; + m_fAngleY = 0; + } + } + +/// method which handle sdl mouse wheel event + void onMouseWheelEvent(const SDL_Event &e) + { + if (e.button.button == SDL_BUTTON_WHEELUP) + { + // Move BACK + m_fDistance+=0.1; + } + + if (e.button.button == SDL_BUTTON_WHEELDOWN) + { + // Move FRONT + m_fDistance-=0.1; + } + } + +/// method which handle sdl mouse position event + void onMouseEvent(const SDL_Event &e) + { + // Rotate UP + m_fAngleY += e.motion.yrel; + // Rotate LEFT + m_fAngleX += e.motion.xrel; + } + +/// Method wich return a view Matrix set up with camera parameters + glm::mat4 getViewMatrix() const + { + + glm::mat4 viewMatrix(1.0f); + + + viewMatrix = glm::translate(glm::mat4(1.0),glm::vec3(0,0,m_fDistance)); + viewMatrix *= glm::rotate(viewMatrix,glm::radians(m_fAngleY),glm::vec3(1.0,0.0,0.0)); + + viewMatrix *= glm::rotate(viewMatrix,glm::radians(m_fAngleX),glm::vec3(0.0,1.0,0.0)); + + return viewMatrix; + } + + + + + + +private: + float m_fDistance; + float m_fAngleX; + float m_fAngleY; + + +}; diff --git a/include/graphic_engine/camera.hpp b/include/graphic_engine/camera.hpp new file mode 100644 index 0000000..996443a --- /dev/null +++ b/include/graphic_engine/camera.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include + +/// Mother Class Camera +class Camera +{ +public: + virtual glm::mat4 getViewMatrix() const = 0; +}; diff --git a/include/graphic_engine/eyeCamera.hpp b/include/graphic_engine/eyeCamera.hpp new file mode 100644 index 0000000..1329134 --- /dev/null +++ b/include/graphic_engine/eyeCamera.hpp @@ -0,0 +1,102 @@ +#pragma once + +#include +#include +#include "camera.hpp" + +using namespace glimac; + +/// Class EyeCamera +/// Camera which allow to see by the eyes of the player +class EyeCamera :public Camera +{ +public: + + /// Default constructor + EyeCamera(): + m_fDistance(2),m_fAngleX(0),m_fAngleY(0) + {} + + /// constructor with parameters + EyeCamera(const float fDistance,const float fAngleX,const float fAngleY) + :m_fDistance(fDistance),m_fAngleX(fAngleX),m_fAngleY(fAngleY) + {} + + /// method handling SDL keyboard event + void onKeyboardEvent(const SDL_Event &event) + { + if ((event.type == SDL_KEYDOWN) && (event.key.keysym.sym == SDLK_r)) + { + m_fAngleX = 0; + m_fAngleY = 0; + } + } + + + /// method handling SDL mouse wheel event + void onMouseWheelEvent(const SDL_Event &e) + { + if (e.button.button == SDL_BUTTON_WHEELUP) + { + // Move BACK + + m_fDistance+=0.1; + + + + } + + if (e.button.button == SDL_BUTTON_WHEELDOWN) + { + // Move FRONT + if (m_fDistance>2) + { + m_fDistance-=0.1; + } + + } + } + + /// method handling mouse movement event + void onMouseEvent(const SDL_Event &e) + { + // Rotate UP + m_fAngleY += e.motion.yrel; + if (m_fAngleY>0) + m_fAngleY = 0; + if (m_fAngleY<5) + m_fAngleY = 5; + // Rotate LEFT + m_fAngleX += e.motion.xrel; + if (m_fAngleX>80) + m_fAngleX = 80; + if (m_fAngleX<-80) + m_fAngleX = -80; + } + + /// method which return a viewMatrix create with camera set up + glm::mat4 getViewMatrix() const + { + + glm::mat4 viewMatrix(1.0f); + + viewMatrix = glm::translate(glm::mat4(1.0),glm::vec3(0,0,m_fDistance)); + viewMatrix *= glm::rotate(viewMatrix,glm::radians(m_fAngleY),glm::vec3(1.0,0.0,0.0)); + + viewMatrix *= glm::rotate(viewMatrix,glm::radians(m_fAngleX),glm::vec3(0.0,1.0,0.0)); + + return viewMatrix; + } + + + + + + +private: + float m_fDistance; + float m_fAngleX; + float m_fAngleY; + + +}; diff --git a/include/graphic_engine/lightShader.hpp b/include/graphic_engine/lightShader.hpp new file mode 100644 index 0000000..8caad4c --- /dev/null +++ b/include/graphic_engine/lightShader.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include +#include +#include +#include + +class LightShader +{ +public: + + /// constructor with parameters + + LightShader( + const char* filepathFragmentShader = "./shaders/directionallight.fs.glsl"); + + LightShader( + const char* filepathVertexShader, + const char* filepathFragmentShader + ); + + /// destructor + ~LightShader() {}; + + /// method which set uniform Matrix for the shaders + void setUniformMatrix() const; + void setUniformMatrix2() const; + + /// method which set projection and view matrix + void setViewMatrix(const glm::mat4 &sceneModel,const glm::mat4 &projection); + + /// method which launch the shader programm + void use(); + +private: + + glimac::Program m_program; + + const char* m_filepathVertexShader; + const char* m_filepathFragmentShader; + + glm::mat4 m_modelviewMatrix; + glm::mat4 m_modelprojMatrix; + + const char* uniformMVPName = "uMVPMatrix"; + const char* uniformMVName = "uMVMatrix"; + const char* uniformNormName = "uNormalMatrix"; + + GLuint m_uniformModelViewMatrix; + GLuint m_uniformNormalMatrix; + GLuint m_uniformModelViewProjectionMatrix; + + GLuint m_uniformColor; + GLuint m_uniformKd; + GLuint m_uniformKs; + GLuint m_uniformShininess; + GLuint m_uniformLightDir_vs; + GLuint m_uniformLightIntensity; + +}; diff --git a/include/graphic_engine/perspectiveShader.hpp b/include/graphic_engine/perspectiveShader.hpp new file mode 100644 index 0000000..9d408a2 --- /dev/null +++ b/include/graphic_engine/perspectiveShader.hpp @@ -0,0 +1,56 @@ +#pragma once + +#include +#include +#include +#include + +/// Shader program class +class PerspectiveShader +{ +public: + + /// constructor + PerspectiveShader( + const char* filepathFragmentShader = "./shaders/normals.fs.glsl"); + +/// constructor with parameters + PerspectiveShader( + const char* filepathVertexShader, + const char* filepathFragmentShader + ); + + /// destructor by default + ~PerspectiveShader() {}; + +/// method which set uniform matrix for the shader + void setUniformMatrix() const; + void setUniformMatrix2() const; + + /// method which set projection and view matrix + void setViewMatrix(const glm::mat4 &sceneModel,const glm::mat4 &projection); + + +/// method which launch the shader program + void use(); + +private: + + glimac::Program m_program; + + const char* m_filepathFragmentShader; + const char* m_filepathVertexShader; + + glm::mat4 m_modelviewMatrix; + glm::mat4 m_modelprojMatrix; + + const char* uniformMVPName = "uMVPMatrix"; + const char* uniformMVName = "uMVMatrix"; + const char* uniformNormName = "uNormalMatrix"; + + GLuint m_uniformModelViewMatrix; + GLuint m_uniformNormalMatrix; + GLuint m_uniformModelViewProjectionMatrix; + GLuint m_uniformModelTexture; + +}; diff --git a/include/motor_game/Character.hpp b/include/motor_game/Character.hpp new file mode 100644 index 0000000..ac1af73 --- /dev/null +++ b/include/motor_game/Character.hpp @@ -0,0 +1,87 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +// héritage de class printableElement +#include "PrintableElement.hpp" +class Element; + +class Character : public PrintableElement +{ + public: + /// default constructor of class character + /// our class character is only abstract + /// contrary to other elements, a character isn't a cube of 1*1*1: it's a pavement with an height of 2 + Character(); + + /// constructor with parameters + /// param type : a string which will allow us to know what kind of character we're dealing with + /// param speed : the speed in which our character will run, can be changed with bonus elements + Character(const glm::vec3 &position, const float &speed, const std::string &type); + + /// method allowing the character to move forward on the z axis + void run(); + void run(const int &axe); + + /// method allowing the character to jump up the y axis + void up(); + + /// method allowing the character to crawl under obstacles: their height is then 1 instead of 2 + void down(); + + /// method allowing the character to move left along the x axis + void moveLeft(); + void moveLeft(const int &axe); + + /// method allowing the character to move right along the x axis + void moveRight(); + void moveRight(const int &axe); + + inline void setSpeed(float const &inSpeed){ + m_speed = inSpeed; + } + + inline float getSpeed() const { + return m_speed; + } + + void translate(const float &x, const float &z); + + + + /// method checking the collision between a character instance and a printableElement instance which is passed as a parameter + bool checkCollision(const PrintableElement &b); + + + /// method checking the collision between a character instance and a printableElement instance which is passed as a parameter + /// this method is activated when the player wants to move and checks if the position is available. the direction of the movement (determined by the pressed touch) is passed as a second parameter. + // bool checkCollisionMovement(const PrintableElement &b, const char &movement); + + /// method scanning a list of Element objects until a collision is detected (using our checkCollision methods) + /// this method is activated when the player wants to move and checks if the position is available. the direction of the movement (determined by the pressed touch) is passed as a second parameter. + // void scanList(std::list &list, const char &movement); + + + + //void scanVec(std::vector>> &vecList, const char &movement); + + //const Element* scanList(const std::list &list, const char &movement); + + /// brief method to display the value of our Element's attributes: TO ERASE ???? + virtual void printElement() const; + + //////////////////////////// TO ADD : speed changer with bonus !!!! VOIR SI ON PEUT FAIRE UNE SCANLIST SANS PARAMETRE DE MOUVEMENT + + /// default destructor of class character + ~Character(); + + + protected: + float m_speed; + +}; diff --git a/include/motor_game/Coin.hpp b/include/motor_game/Coin.hpp new file mode 100644 index 0000000..73eaa00 --- /dev/null +++ b/include/motor_game/Coin.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include +#include +#include +#include +#include "Element.hpp" +#include "Hero.hpp" + +class Coin : public Element +{ + public: + /// default constructor of class Coin + Coin(); + + /// constructor with parameters + /// param value to give each Coin a number to increment the hero's score + Coin(const glm::vec3 &position, const unsigned int &value, const std::string &type="Coin"); + + /// brief method to retrieve the value of the Coin + inline const int value() const { + return m_value; + } + + /// default destructor of our Coin + ~Coin(); + + /// brief method to display the value of Coin's attributes + void printElement() const; + + /// method to check the specific behavior if the player collides with a Coin + /// takes an Hero instance as parameter and increments their score with the value of the Coin + void collide(Hero &hero); + + private: + unsigned int m_value ; /*!< value of the Coin */ + +}; diff --git a/include/motor_game/Element.hpp b/include/motor_game/Element.hpp new file mode 100644 index 0000000..2093355 --- /dev/null +++ b/include/motor_game/Element.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include +#include +#include +#include + +#include "PrintableElement.hpp" +class Hero; + +class Element : public PrintableElement +{ + public: + /// default constructor of class Element + /// our class Element is only abstract + Element(); + + /// constructor with parameters + /// param type : a string which will allow us to know what kind of Element we're dealing with + Element(const glm::vec3 &position, const std::string &type); + + /// brief method to display the value of Element's attributes + virtual void printElement() const; + + /// method to determine the behavior of an End when the player is colliding with it + virtual void collide(Hero &hero); + + /// brief method to implement the polymorphism of the collide method for different inherited Element classes + inline void collision(Hero &hero) + { + this->collide(hero); + } + + /// default destructor of our Element + ~Element(); + +}; diff --git a/include/motor_game/End.hpp b/include/motor_game/End.hpp new file mode 100644 index 0000000..c4c7ef8 --- /dev/null +++ b/include/motor_game/End.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "Element.hpp" +#include "Hero.hpp" + +namespace motor_game{ + /// class End + /// end of the level + class End : public Element + { + public : + /// default constructor of class End + End() = default; + + /// brief constructor with parameters + /// param position, and type of the PrintableElement + inline End(const glm::vec3 &position, const std::string &type = "End") + : Element(position, type) {} + + /// method to determine the behavior of an End when the player is colliding with it + void collide(Hero &hero); + + /// brief method to display the value of End's attributes + void printElement() const; + + /// default destructor of our End + ~End() = default; + + }; +} diff --git a/include/motor_game/Enemy.hpp b/include/motor_game/Enemy.hpp new file mode 100644 index 0000000..099cb73 --- /dev/null +++ b/include/motor_game/Enemy.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include +#include +#include +#include + + #include "Character.hpp" +#include "Hero.hpp" + +class Enemy : public Character +{ + public: + /// default constructor of class Enemy + Enemy(); + + /// constructor with parameters + /// param type : enemy by default + Enemy(const glm::vec3 &position, const float &speed, const std::string &type="Enemy"); /// constructor with parameters + + // A VOIR SI ON GARDE : fonction appelée dans la fonction collide ??? + void killHero(); + + /// method to determine the behavior of an Enemy when the player is colliding with it + void collide(Hero &hero); + + /// brief method to display the value of Enemy's attributes + void printElement() const; + + /// default destructor of our Enemy + ~Enemy(); + + + protected: + + +}; diff --git a/include/motor_game/Floor.hpp b/include/motor_game/Floor.hpp new file mode 100644 index 0000000..4c19846 --- /dev/null +++ b/include/motor_game/Floor.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include +#include +#include "Element.hpp" + + +// TO ERASE ???? we don't have to check floor collision +class Floor : public Element +{ + public: + /// default constructor of class Floor + Floor(); + + + Floor(const glm::vec3 &position, const std::string &type = "Floor"); + + /// brief method to display the value of Floor's attributes + void printElement() const; + + /// default destructor of our Floor + ~Floor(); + +// TO ADD : collide ?? + +}; diff --git a/include/motor_game/Gap.hpp b/include/motor_game/Gap.hpp new file mode 100644 index 0000000..8c4128a --- /dev/null +++ b/include/motor_game/Gap.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include +#include +#include +#include +#include "Element.hpp" +class Hero; + +namespace motor_game{ + + class Gap : public Element + { + public: + Gap(); + /// brief constructor + /// param position, and type + /*Gap(const glm::vec3 &position = glm::vec3(0), const std::string &type = "Gap") + : m_position(position), m_type(type) {}*/ + Gap(const glm::vec3 &position, const std::string &type="Gap"); + + /// brief default destructor + ~Gap() = default; + + /// method determining the behavior of a Gap when the player is colliding with it + void collide(Hero &hero); + + /// brief method to display the value of Gap's attributes + void printElement() const; + }; +} diff --git a/include/motor_game/HEADERS.txt b/include/motor_game/HEADERS.txt deleted file mode 100644 index e69de29..0000000 diff --git a/include/motor_game/Hero.hpp b/include/motor_game/Hero.hpp new file mode 100644 index 0000000..8514631 --- /dev/null +++ b/include/motor_game/Hero.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include +#include +#include +#include +#include "Character.hpp" + +#include "Element.hpp" +#include "Map.hpp" + +class Hero : public Character +{ + public: + /// default constructor of class Hero + Hero(); + + /// constructor with parameters + Hero(const glm::vec3 &position, const float &speed, const std::string &type = "Hero"); + + /// brief method to display the value of Hero's attributes + void printElement() const; + + /// default destructor of our Hero + ~Hero(); + + /// brief method to increment the score of Hero + /// takes a parameter to pass the vaormMatrix2(); + + inline void setScore(float &inScore){ + m_score += inScore; + } + + /// brief method to retrieve the score of Hero + inline int getScore() const{ + return m_score; + } + + /// method called when the hero tries to move + /// this method checks if there is an element where the Hero wants to move + /// then uses the collide methods to do something according to what type of element we're dealing with + bool scanArray(Element* (*list)[50][50], const char &movement); + + //bool checkCollide(Map map, const char &movement); + + bool checkCollision(const PrintableElement &b); + + + private: + unsigned int m_score; /*!< score of Hero */ + +}; diff --git a/include/motor_game/Map.hpp b/include/motor_game/Map.hpp new file mode 100644 index 0000000..9f6cfb3 --- /dev/null +++ b/include/motor_game/Map.hpp @@ -0,0 +1,108 @@ +#ifndef MAP_HPP +#define MAP_HPP +#pragma once + +#include + +#include "Element.hpp" +#include "negative_vector.hpp" + +namespace motor_game{ + /// \class Map + /// \brief contains the level elements, and the dimensions' level + class Map{ + public : + Map() = delete; + Map(const int &x, const int &y, const int &z); + + /// \brief getter of an Element + /// \param coordinates of this Element + Element *element(const int &x, const int &y, const int &z) const; + + inline const unsigned int size(){ + return m_elements.size(); + } + + inline const negative_vector getVector(){ + return m_elements; + } + + Element* getElementi(const int i) const; + /// \brief setter of an Element + /// \param coordinates of this Element, and the Element + void element( + const int &x, const int &y, const int &z, + Element *element + ); + + + /// \brief getter of x-coordiconst unsigned int &x, const unsigned int &y, const unsigned int &znate + inline const int &x() const{ + return m_x; + } + + /// \brief getter of y-coordinate + inline const int &y() const{ + return m_y; + } + + + /// \brief getter of z-coordinate + inline const int &z() const{ + return m_z; + } + + /// \brief getter of projection on X + inline int projectionX() const{ + return m_projectionX; + } + + /// \brief getter of projection on Y + inline int projectionY() const{ + return m_projectionY; + } + + /// \brief getter of projection on Z + inline int projectionZ() const{ + return m_projectionZ; + } + + /// \brief setter of projection on X + inline void projectionX(const int x){ + m_projectionX = x; + } + + /// \brief getter of projection on Y + inline void projectionY(const int y){ + m_projectionY = y; + } + + /// \brief getter of projection on Z + inline void projectionZ(const int z){ + m_projectionZ = z; + } + + void printElement(); + void translateMap(const float &x, const float &z); + void rotateRight(); + void rotateLeft(); + void eraseElement(const int &x, const int &y, const int &z); + + + + private : + negative_vector m_elements; + + int m_x=0; + int m_y=2; + int m_z=0; + + int m_projectionX = -2; + int m_projectionY = -3; + int m_projectionZ = -3; + + + }; + +} +#endif diff --git a/include/motor_game/Obstacle.hpp b/include/motor_game/Obstacle.hpp new file mode 100644 index 0000000..8c885f3 --- /dev/null +++ b/include/motor_game/Obstacle.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include +#include +#include "Element.hpp" +class Hero; + +class Obstacle : public Element +{ + public: + /// default constructor of class Obstacle + Obstacle(); + /// constructor with parameters + /// param type : obstacle by default + Obstacle(const glm::vec3 &position, const std::string &type = "Obstacle"); + + /// default destructor of our Floor + ~Obstacle(); + + /// \brief method to display the value of Obstacle's attributes + void printElement() const; + + /// method to determine the behavior of an Obstacle when the player is colliding with it + void collide(Hero &hero); + + +}; diff --git a/include/motor_game/PPM.hpp b/include/motor_game/PPM.hpp new file mode 100644 index 0000000..3deacd4 --- /dev/null +++ b/include/motor_game/PPM.hpp @@ -0,0 +1,88 @@ +#ifndef RUNNER_PPM_HPP +#define RUNNER_PPM_HPP + +#pragma once + +#include +#include +#include +#include + +#include "Hero.hpp" +#include "Enemy.hpp" +#include "Map.hpp" + +namespace motor_game{ + + + class PPM{ + public : + PPM() = delete; + + ///\brief constructor + /// \param dimensions of the map + inline PPM(int x,int y,int z) + : m_map(Map(x, y, z)) {} + + ~PPM() = default; + + /// \brief getter : Element vector of the level + inline const Map map() const{ + return m_map; + } + + /// \brief setter : Element vector of the level + inline Map &map(){ + return m_map; + } + + /// \brief getter : returns the hero + inline const Hero &hero() const{ + return m_hero; + } + + /// \brief setter : the hero + inline Hero &hero(){ + return m_hero; + } + + /// \brief getter : returns the enemy + inline const Enemy &enemy() const{ + return m_enemy; + } + + /// \brief setter : the enemy + inline Enemy &enemy(){ + return m_enemy; + } + + /// \brief getter : returns the dimensions of the map + inline const glm::vec3 dimensions() const{ + return glm::vec3(m_map.x(), m_map.y(), m_map.z()); + } + + /// \brief setter : the x-dimension of the map + inline int x(){ + return m_map.x(); + } + + /// \brief setter : y-dimension of the map + inline int y(){ + return m_map.y(); + } + + /// \brief setter : the z-dimension of the map + inline int z(){ + return m_map.z(); + } + + + private: + Map m_map; + Hero m_hero; + Enemy m_enemy; + }; + +} + +#endif diff --git a/include/motor_game/PPMreader.hpp b/include/motor_game/PPMreader.hpp new file mode 100644 index 0000000..14445e8 --- /dev/null +++ b/include/motor_game/PPMreader.hpp @@ -0,0 +1,59 @@ +#ifndef RUNNER_PPM_READER_HPP +#define RUNNER_PPM_READER_HPP + +#pragma once + +#include +#include +#include +#include +#include + +#include "PPM.hpp" +#include "Element.hpp" +#include "End.hpp" +#include "Floor.hpp" +#include "Coin.hpp" +#include "Wall.hpp" +#include "Gap.hpp" +#include "Obstacle.hpp" +#include "Turn.hpp" + +namespace motor_game{ + class PPMreader{ + public: + /// \brief constructor : open the setting file + /// \param string of the file name + PPMreader(const std::string &filename); + + PPMreader() = delete; + + ///\brief destructor + ~PPMreader(); + + /// \brief read the file and set the ppm + const PPM readFile(); + + /// \brief read the file and add coins to the ppm + /// \param ppm : the ppm to add coins to + void readFile(PPM &ppm); + + private : + // return the next valid string in the file (ie not a comment) + // don't manage end of file + const std::string nextString(); + // verify the validity of the file, and set m_x and m_y + const bool validPPM(); + std::string m_currentStr; + std::string m_r; + std::string m_g; + std::string m_b; + std::ifstream m_ppm_1; + int m_x=0; + int m_y=3; + int m_z=0; + }; + +} + +#endif diff --git a/include/motor_game/PrintableElement.hpp b/include/motor_game/PrintableElement.hpp new file mode 100644 index 0000000..3ee4522 --- /dev/null +++ b/include/motor_game/PrintableElement.hpp @@ -0,0 +1,72 @@ +#pragma once + +#include +#include +#include +#include +#include "common.hpp" + + +//class Element; +class PrintableElement +{ + public: + + /// \brief default constructor of class PrintableElement + /// \brief our class PrintableElement is only abstract + PrintableElement(); + + /// \brief constructor with parameters + /// \param type : a string which will allow us to know what kind of PrintableElement we're dealing with + PrintableElement(const glm::vec3 &position, const std::string &type); + + /// \brief method allowing us to know the x, y and z coordinates of our object + inline glm::vec3 getPosition() const { + return m_position; + } + + /// \brief setter of position + inline void setPosition(glm::vec3 pos){ + m_position=pos; + } + + /// \brief method allowing us to know the x coordinate of PrintableElement + inline float getX() const { + return m_position.x; + } + + /// \brief method allowing us to know the y coordinate of PrintableElement + inline float getY() const { + return m_position.y; + } + + /// \brief method allowing us to know the z coordinate of PrintableElement + inline float getZ() const { + return m_position.z; + } + + /// \brief method allowing us to know the type of PrintableElement + inline std::string getType() const { + return m_type; + } + + + /// \brief method to display the value of PrintableElement's attributes + virtual void printElement() const; + + /// brief method to implement the polymorphism of the printElement method for different inherited PrintableElement classes + inline void description() + { + this->printElement(); + } + + + /// \brief default destructor of our PrintableElement + ~PrintableElement(); + + + protected: + glm::vec3 m_position; /*!< coordinates of the PrintableElement */ + std::string m_type; /*!< type of the PrintableElement */ + +}; diff --git a/include/motor_game/Scores.hpp b/include/motor_game/Scores.hpp new file mode 100644 index 0000000..ce1df34 --- /dev/null +++ b/include/motor_game/Scores.hpp @@ -0,0 +1,45 @@ +#ifndef SCORES_HPP +#define SCORES_HPP + +#pragma once + +#include "ExceptIMAC.hpp" + +#include +#include +#include +#include + +namespace motor_game{ + class Scores{ + public : + /// \brief constructor + /// \param maxSize : max number of scores stored + Scores(const size_t &maxSize=7); + + + /// \param filename : constructor reads scores from this file + void read(const std::string &filename); + + /// \brief getter : returns the multimap which contains the scores + const std::multimap> &multimap() const; + + /// \brief save scores into a file - can throw an exception + void save(const std::string &filename); + + /// \brief add the score, if it is high enough. A name is present only one time. + void add(const std::pair &score); + + /// \brief empty the Scores data + void clear(); + + ~Scores() = default; + + private : + std::multimap> m_scores; // scores + size_t m_maxSize; // max number of scores stored + size_t m_size=0; // cuurent number of scores stored + }; +} + +#endif diff --git a/include/motor_game/Turn.hpp b/include/motor_game/Turn.hpp new file mode 100644 index 0000000..7d9a319 --- /dev/null +++ b/include/motor_game/Turn.hpp @@ -0,0 +1,29 @@ +#ifndef TURN_HPP +#define TURN_HPP + +#pragma once + +#include "Floor.hpp" + +namespace motor_game{ + + /// \class floor in which the player can turn + class Turn final : public Floor{ + public : + Turn() = delete; + + /// \class constructor + /// \param position of the Turn, and type (left or right) + Turn(const glm::vec3 &position, const std::string &type); + + /// \brief method to display the value of Turn's attributes + void printElement() const; + + /// \brief method to call when the Character is on the Turn + void collide(Hero *hero) const; + + /// \brief destructor + ~Turn() = default; + }; +} +#endif diff --git a/include/motor_game/User.hpp b/include/motor_game/User.hpp index 062308d..d4b9400 100644 --- a/include/motor_game/User.hpp +++ b/include/motor_game/User.hpp @@ -1,58 +1,38 @@ +#pragma once + #include #include -#pragma once class User { -public: - //methode - User() - :m_name("Unknown"),m_score(0) - {} - - User(std::string inName) - :m_name(inName),m_score(0) - {} - - ~User(); - - inline - std::string getName() const - { - return m_name; - } + public: + //methode + User(); - inline - void setName(std::string const &inName) - { - m_name = inName; - } + /// \default constructor of class User + User(std::string &inName); - inline - int getScore() const - { - return m_score; + /// \brief method to retrieve the value of User's attributes + inline std::string getName() const { + return m_name; } - inline - void setScore(int const &inScore) - { - m_score = inScore; + /// \brief method to set the value of User's name + inline void setName(std::string const &inName) { + m_name = inName; } - - inline - void printPlayer() - { - std::cout<<"Name :"< +#include +#include "Element.hpp" +#include "Hero.hpp" + +class Wall : public Element +{ + public: + /// \default constructor of class Wall + Wall(); + + /// \constructor with parameters + Wall(const glm::vec3 &position, const std::string &type = "Wall"); + + /// default destructor of our Wall + ~Wall(); + + /// \brief method to test the value of Wall's attributes + void printElement() const; + + /// \method to check the specific behavior if the player collides with a Coin + /// \takes an Hero instance as parameter. the hero doesn't die if they touches a wall, it just prevents them from moving where the wall is. + void collide(Hero &hero); + + +}; diff --git a/include/motor_game/negative_vector.hpp b/include/motor_game/negative_vector.hpp new file mode 100644 index 0000000..bfaaadd --- /dev/null +++ b/include/motor_game/negative_vector.hpp @@ -0,0 +1,45 @@ +template + +class negative_vector +{ + +public: + + negative_vector(int min, int max) + : _zero_index(min) + , _storage((max - min)) + { + // assert min - max + } + + T& operator[](int index) + { + assert(index >= lower_limit()); + assert(index <= upper_limit()); + return _storage[index - _zero_index]; + } + + T operator[](int index) const + { + assert(index >= lower_limit()); + assert(index <= upper_limit()); + return _storage[index - _zero_index]; + } + + int upper_limit() const { + return _zero_index + int(_storage.size()); + } + + int lower_limit() const { + return _zero_index; + } + + unsigned int size() const { + return upper_limit() - lower_limit(); + } + +private: + + int _zero_index = 0; + std::vector _storage {}; +}; diff --git a/obj/OBJECT_FILES.txt b/obj/OBJECT_FILES.txt deleted file mode 100644 index e69de29..0000000 diff --git a/obj/User.o b/obj/User.o deleted file mode 100644 index d687dff..0000000 Binary files a/obj/User.o and /dev/null differ diff --git a/obj/glimac/Cone.o b/obj/glimac/Cone.o deleted file mode 100644 index fe9cb5d..0000000 Binary files a/obj/glimac/Cone.o and /dev/null differ diff --git a/obj/glimac/Geometry.o b/obj/glimac/Geometry.o deleted file mode 100644 index 80cc2d2..0000000 Binary files a/obj/glimac/Geometry.o and /dev/null differ diff --git a/obj/glimac/Image.o b/obj/glimac/Image.o deleted file mode 100644 index db3090a..0000000 Binary files a/obj/glimac/Image.o and /dev/null differ diff --git a/obj/glimac/Program.o b/obj/glimac/Program.o deleted file mode 100644 index 175c595..0000000 Binary files a/obj/glimac/Program.o and /dev/null differ diff --git a/obj/glimac/SDLWindowManager.o b/obj/glimac/SDLWindowManager.o deleted file mode 100644 index 47ea3e4..0000000 Binary files a/obj/glimac/SDLWindowManager.o and /dev/null differ diff --git a/obj/glimac/Shader.o b/obj/glimac/Shader.o deleted file mode 100644 index fc5505e..0000000 Binary files a/obj/glimac/Shader.o and /dev/null differ diff --git a/obj/glimac/Sphere.o b/obj/glimac/Sphere.o deleted file mode 100644 index 1b03bfd..0000000 Binary files a/obj/glimac/Sphere.o and /dev/null differ diff --git a/obj/glimac/cube.o b/obj/glimac/cube.o deleted file mode 100644 index 2cae762..0000000 Binary files a/obj/glimac/cube.o and /dev/null differ diff --git a/obj/glimac/tiny_obj_loader.o b/obj/glimac/tiny_obj_loader.o deleted file mode 100644 index 2bab888..0000000 Binary files a/obj/glimac/tiny_obj_loader.o and /dev/null differ diff --git a/obj/main.o b/obj/main.o deleted file mode 100644 index b374b77..0000000 Binary files a/obj/main.o and /dev/null differ diff --git a/obj/motor_game/User.o b/obj/motor_game/User.o deleted file mode 100644 index 85eb546..0000000 Binary files a/obj/motor_game/User.o and /dev/null differ diff --git a/shaders/3d.vs.glsl b/shaders/3d.vs.glsl new file mode 100644 index 0000000..b836d61 --- /dev/null +++ b/shaders/3d.vs.glsl @@ -0,0 +1,35 @@ + +#version 130 + +/* +layout(location = 0) in vec3 aVertexPosition; +layout(location = 1) in vec3 aNormCord; +layout(location = 2) in vec2 aTexCoord; +*/ + +in vec3 aVertexPosition; +in vec3 aNormCord; +in vec2 aTexCoord; + +uniform mat4 uMVPMatrix; +uniform mat4 uMVMatrix; +uniform mat4 uNormalMatrix; + + +out vec3 vPosition; +out vec3 vNormal; +out vec2 vCoordTexture; + + +void main() { + + vec4 vertexPosition = vec4(aVertexPosition, 1); + vec4 vertexNormale = vec4(aNormCord, 0); + + vPosition= vec3(uMVMatrix * vertexPosition); + vNormal = vec3(uMVMatrix * vertexNormale); + vCoordTexture = aTexCoord; + + gl_Position = uMVPMatrix * vertexPosition; + +} diff --git a/shaders/Tex3D.fs.glsl b/shaders/Tex3D.fs.glsl new file mode 100644 index 0000000..5186609 --- /dev/null +++ b/shaders/Tex3D.fs.glsl @@ -0,0 +1,19 @@ +#version 130 + +in vec2 vCoordTexture; +in vec3 vPosition; +in vec3 vNormal; + + +out vec3 fFragColor; + + +uniform vec3 uColor; +uniform sampler2D uTexture; + +void main() { + + vec3 dataColor = texture(uTexture, vCoordTexture).xyz; + fFragColor = dataColor; + +} diff --git a/shaders/blue.fs.glsl b/shaders/blue.fs.glsl new file mode 100644 index 0000000..fc888a2 --- /dev/null +++ b/shaders/blue.fs.glsl @@ -0,0 +1,22 @@ +#version 130 + +in vec2 vCoordTexture; +in vec3 vPosition; +in vec3 vNormal; + + +out vec3 fFragColor; + + +//uniform vec3 uColor; +//uniform sampler2D uTexture; + +void main() { + + + //fFragColor = normalize(vNormal); + + + fFragColor = vec3(0.06,0.18,0.29); + +} diff --git a/shaders/directionallight.fs.glsl b/shaders/directionallight.fs.glsl new file mode 100644 index 0000000..6500ff3 --- /dev/null +++ b/shaders/directionallight.fs.glsl @@ -0,0 +1,31 @@ +#version 130 + +in vec3 vPosition; +in vec3 vNormal; + + +out vec3 fFragColor; + + +uniform vec3 uColor; + +uniform vec3 uKd; +uniform vec3 uKs; +uniform float uShininess; + +uniform vec3 uLightDir_vs; +uniform vec3 uLightIntensity; + +vec3 blinnPhong() +{ + vec3 color; + color = (uLightIntensity * (uKd*(dot(uLightDir_vs,vNormal))+ + uKs*(pow(dot(normalize((-vPosition)+uLightDir_vs)/2,vNormal),uShininess)))) ; + + return color; +} + +void main() { + + fFragColor = vec3(0.65,0.50,1.0)* blinnPhong(); +} diff --git a/shaders/normals.fs.glsl b/shaders/normals.fs.glsl new file mode 100644 index 0000000..ee919d1 --- /dev/null +++ b/shaders/normals.fs.glsl @@ -0,0 +1,22 @@ +#version 130 + +in vec2 vCoordTexture; +in vec3 vPosition; +in vec3 vNormal; + + +out vec3 fFragColor; + + +//uniform vec3 uColor; +//uniform sampler2D uTexture; + +void main() { + + + fFragColor = normalize(vNormal)-vec3(0.8,0.7,0.1); + + + //fFragColor = vec3(1.0,0.0,0.0); + +} diff --git a/shaders/pointlight.fs.glsl b/shaders/pointlight.fs.glsl new file mode 100644 index 0000000..2c76068 --- /dev/null +++ b/shaders/pointlight.fs.glsl @@ -0,0 +1,34 @@ +#version 130 + +in vec3 vPosition; +in vec3 vNormal; + + +out vec3 fFragColor; + + +uniform vec3 uColor; + +uniform vec3 uKd; +uniform vec3 uKs; +uniform float uShininess; + +uniform vec3 uLightPos_vs; +uniform vec3 uLightIntensity; + +vec3 blinnPhong() +{ + vec3 color; + + color = ( + (uLightIntensity / (distance(uLightPos_vs,vPosition) * distance(LightPos_vs,vPosition))) + *(uKd*(dot((normalize(uLightPos_vs - vPosition)),vNormal))+ + uKs*(pow(dot(normalize((-vPosition)+(normalize(uLightPos_vs - vPosition)))/2,vNormal),uShininess)))); + + return color; +} + +void main() { + + fFragColor = blinnPhong(); +}; diff --git a/shaders/red.fs.glsl b/shaders/red.fs.glsl new file mode 100644 index 0000000..ddc81b0 --- /dev/null +++ b/shaders/red.fs.glsl @@ -0,0 +1,22 @@ +#version 130 + +in vec2 vCoordTexture; +in vec3 vPosition; +in vec3 vNormal; + + +out vec3 fFragColor; + + +//uniform vec3 uColor; +//uniform sampler2D uTexture; + +void main() { + + + //fFragColor = normalize(vNormal); + + + fFragColor = vec3(1.0,0.0,0.0); + +} diff --git a/shaders/skybox.fs.glsl b/shaders/skybox.fs.glsl new file mode 100644 index 0000000..723564d --- /dev/null +++ b/shaders/skybox.fs.glsl @@ -0,0 +1,15 @@ +#version 130 + +in vec3 vCoordTexture; +out vec3 fFragColor; + + + +uniform samplerCube skybox; + +void main() { + + vec3 dataColor = texture(skybox, vCoordTexture).xyz; + fFragColor = dataColor; + +} diff --git a/shaders/skybox.vs.glsl b/shaders/skybox.vs.glsl new file mode 100644 index 0000000..2e0907b --- /dev/null +++ b/shaders/skybox.vs.glsl @@ -0,0 +1,18 @@ + +#version 130 + +in vec3 aVertexPosition; + + +uniform mat4 uMVPMatrix; +uniform mat4 uNormalMatrix; + +out vec3 vCoordTexture; + + +void main() { + + vec4 vertexPosition = uMVPMatrix *vec4(aVertexPosition, 1); + gl_Position = vertexPosition.xyww; + vCoordTexture = aVertexPosition; +} diff --git a/shaders/tex2D.fs.glsl b/shaders/tex2D.fs.glsl new file mode 100644 index 0000000..8f59da7 --- /dev/null +++ b/shaders/tex2D.fs.glsl @@ -0,0 +1,13 @@ +#version 130 + +in vec2 vCoordTexture; + +uniform vec3 uColor; +uniform sampler2D uTexture; + +void main() { + + vec4 dataColor = texture(uTexture, vCoordTexture); + fFragColor = dataColor; + +} diff --git a/shaders/tex2D.vs.glsl b/shaders/tex2D.vs.glsl new file mode 100644 index 0000000..2d58598 --- /dev/null +++ b/shaders/tex2D.vs.glsl @@ -0,0 +1,25 @@ +#version 130 + + +/* +layout(location = 0) in vec2 aVertexPosition; +layout(location = 1) in vec2 aTexCoord; +*/ + +in vec3 aVertexPosition; +in vec2 aTexCoord; + +out vec2 vCoordTexture; +out vec2 vPosition; + +uniform mat3 uModelMatrix; + + + +void main() { + + vPosition = aVertexPosition; + gl_Position = vec4((uModelMatrix*vec3(aVertexPosition, 1)).xy, 0, 1); + vCoordTexture = aTexCoord; + +} diff --git a/shaders/violet.fs.glsl b/shaders/violet.fs.glsl new file mode 100644 index 0000000..d6142b5 --- /dev/null +++ b/shaders/violet.fs.glsl @@ -0,0 +1,20 @@ +#version 130 + +in vec2 vCoordTexture; +in vec3 vPosition; +in vec3 vNormal; + + +out vec3 fFragColor; + + +//uniform vec3 uColor; +//uniform sampler2D uTexture; + +void main() { + + fFragColor = vec3(0.34,0.25,0.66); + + + +} diff --git a/src/AppManager-bug.txt b/src/AppManager-bug.txt new file mode 100644 index 0000000..1421a74 --- /dev/null +++ b/src/AppManager-bug.txt @@ -0,0 +1,582 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "TrackballCamera.hpp" +#include +#include +#include +#include +#include +#include +//#include +#include +#include "AppManager.hpp" +#include "Menu.hpp" +#include "perspectiveShader.hpp" +#include "Grid.hpp" +#include "Scene.hpp" +#include "TrackballCamera.hpp" +#include "Map.hpp" +#include "Element.hpp" +#include "User.hpp" +#include "PrintableElement.hpp" +#include "Element.hpp" +#include "Character.hpp" +//#include "Coin.hpp" +#include "Hero.hpp" +#include "Enemy.hpp" +#include "Wall.hpp" +#include "Floor.hpp" +#include "Obstacle.hpp" +#include "Gap.hpp" +#include "Map.hpp" +#include "PPM.hpp" +#include "PPMreader.hpp" +#include "eyeCamera.hpp" +#include "Character.hpp" +#include "checkRotation.hpp" +#include "TextureLoader.hpp" +#include "Skybox.hpp" + +#include + +AppManager::AppManager() +{} + +int AppManager::start(char** argv) +{ + +/** PLUS PROPRE A TROUVER **/ + + bool MENU = true; + bool GAME = false; + bool TEST = false; + +/********************************/ + +// Initialize and Open Window + SDLWindowManager windowManager(m_width,m_height, "GLImac"); + + +// Initialize glew for OpenGL3+ support + GLenum glewInitError = glewInit(); + if(GLEW_OK != glewInitError) { + std::cerr << glewGetErrorString(glewInitError) << std::endl; + return EXIT_FAILURE; + } + +// SHADER + PerspectiveShader shader3D; + PerspectiveShader shaderRed("./shaders/red.fs.glsl"); + PerspectiveShader shader3DTex("./shaders/Tex3D.fs.glsl"); + PerspectiveShader shaderSkybox("./shaders/skybox.vs.glsl","./shaders/skybox.fs.glsl"); + +// CAMERA + std::shared_ptr camera(new TrackballCamera); + +// MOTOR GAME + glEnable(GL_DEPTH_TEST); + + motor_game::PPMreader theReader("test_01.ppm"); + motor_game::PPM ppmCool=theReader.readFile(); + + Hero hero = ppmCool.hero(); + hero.setSpeed(0.05); + + +/*** A changer ***/ + std::unique_ptr cube(new Cube); + std::unique_ptr cone(new Cone); + std::vector> vectorObject; + vectorObject.emplace_back(std::move(cube)); + vectorObject.emplace_back(std::move(cone)); + + + // Menu + Menu menu; + menu.setVisibility(MENU); + Cube player; + + Scene game(std::move(vectorObject),camera); + float speed = 0.05; + float begin = 0; + + int startTicksRight=0; + int startTicksLeft=0; + + bool has_jump = false; + int jump = 0; + + GLuint texture = TextureLoader::LoadTexture("./elt/texture/ecran_debut_RUNNER_2.png"); + Skybox skybox; + + int has_turned = 0; + + + + // Application loop: + + bool done = false; + while(!done) { + + + if (TEST) + { + SDL_Event e; + while(windowManager.pollEvent(e)) { + if(e.type == SDL_QUIT) { + done = true; // Leave the loop after this iteration + } + } + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + } + + if ( has_jump == true ) + { + jump ++; + if (jump == 40) + { + has_jump = false; + jump = 0; + hero.down(); + } + } + + + if (menu.visibility() == true) + { + // Event loop: + SDL_Event e; + while(windowManager.pollEvent(e)) { + + if(e.type == SDL_MOUSEBUTTONDOWN && e.button.button == SDL_BUTTON_LEFT) + { + if (menu.onMouseEvent(windowManager.getMousePosition()) == 1) + { + GAME = 1; + glUseProgram(0); + } + } + + if(e.type == SDL_QUIT) { + done = true; // Leave the loop after this iteration + } + } + + //Render loop: + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + shader3DTex.use(); + glActiveTexture(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D,texture); + shader3DTex.setViewMatrix(camera->getViewMatrix(),glm::mat4(1.0)); + shader3DTex.setUniformMatrix(); + menu.displayMenu(); + glBindTexture(GL_TEXTURE_2D,0); + + } + + + if (GAME) + { + + // Event loop: + SDL_Event e; + float z; + while(windowManager.pollEvent(e)) { + + if (e.type == SDL_KEYDOWN){ + camera->onKeyboardEvent(e); + if (e.key.keysym.sym == SDLK_ESCAPE) + { + menu.setVisibility(true); + GAME = false; //A changer pour faie un mode popUp + glUseProgram(0); + } + + + if (e.key.keysym.sym == SDLK_z) + { + if (has_jump == false) + { + hero.up(); + has_jump = true; + } + } + if (e.key.keysym.sym == SDLK_q) + { + + if (startTicksLeft != 0 && (SDL_GetTicks()-startTicksLeft)<300) + { + /* if (has_turned == 0) + has_turned = 1;*/ + + if (ppmCool.map().element(hero.getX(),0,hero.getZ())!=nullptr) + { + if (ppmCool.map().element(hero.getX(),0,hero.getZ())->getType() == "left") + { + + z = 0; + z = setRotationZ(ppmCool.map(),hero.getX(),hero.getZ()); + std::cout << " z = " << z << " Hero Z = " << hero.getZ() <getPosition().x) - fabs((round( ppmCool.map().getElementi(5)->getPosition().x)))<0) + { + if (ppmCool.map().getElementi(5)->getPosition().x > 0) + { + + ppmCool.map().translateMap((fabs(ppmCool.map().getElementi(5)->getPosition().x) - fabs((round( ppmCool.map().getElementi(5)->getPosition().x)))),hero.getZ()); + } + else + { + + ppmCool.map().translateMap(-(fabs(ppmCool.map().getElementi(5)->getPosition().x) - fabs((round(ppmCool.map().getElementi(5)->getPosition().x)))),hero.getZ()); + } + } + if (fabs(ppmCool.map().getElementi(5)->getPosition().x) - fabs((round( ppmCool.map().getElementi(5)->getPosition().x)))>0) + { + if (ppmCool.map().getElementi(5)->getPosition().x > 0) + { + + ppmCool.map().translateMap((fabs(ppmCool.map().getElementi(5)->getPosition().x) - fabs((round( ppmCool.map().getElementi(5)->getPosition().x)))),hero.getZ()); + } + else + { + + ppmCool.map().translateMap(-(fabs(ppmCool.map().getElementi(5)->getPosition().x) - fabs((round( ppmCool.map().getElementi(5)->getPosition().x)))),hero.getZ()); + } + } + + startTicksRight = 0; + begin = 0; + std::cout<<"FIN DE LA ROTATION"<getType()=="Gap") + { + std::cout<<"GAP !"<getType() == "right") + { + /* if (has_turned == 0) + has_turned = 1; */ + + z = 0; + z = setRotationZ(ppmCool.map(),hero.getX(),hero.getZ()); + + + if (hero.getX() == 1) + { + std::cout<<"CAS 1"<getPosition()<getPosition().x) - fabs((round( ppmCool.map().getElementi(8)->getPosition().x))))>0.005) + { + std::cout<<"C1 = "<< fabs(ppmCool.map().getElementi(8)->getPosition().x) - fabs((round( ppmCool.map().getElementi(8)->getPosition().x)))<getPosition().x > 0) + { + std::cout<<" ok 1"<getPosition().x) - fabs((round( ppmCool.map().getElementi(8)->getPosition().x)))),0); + } + else + { + std::cout<<" ok 2 "<getPosition().x) - fabs((round(ppmCool.map().getElementi(8)->getPosition().x)))),0); + } + } + } + + + startTicksRight = 0; + begin = 0; + + } + } + + + } + else + { + startTicksRight = SDL_GetTicks(); + if(ppmCool.map().element(hero.getX()+1,hero.getY(),hero.getZ())!=nullptr) + { + if (ppmCool.map().element(hero.getX()+1,hero.getY(),hero.getZ())->getType()=="Gap") + { + std::cout<<"GAP !"<onMouseWheelEvent(e); + + if (windowManager.isMouseButtonPressed(SDL_BUTTON_LEFT)) + { + camera->onMouseEvent(e); + } + + if(e.type == SDL_QUIT) { + done = true; // Leave the loop after this iteration + } + } + + // Render loop: + if (ppmCool.map().element(hero.getX(),hero.getY(),hero.getZ()+0.05)==nullptr) + { + begin -=speed; + hero.run(); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + game.loadScene(ppmCool.map(),begin); + + glm::mat4 projection = glm::scale(glm::mat4(1),glm::vec3(1,1,-1)); + + projection *=glm::translate(glm::mat4(1),glm::vec3(ppmCool.map().projectionX(),ppmCool.map().projectionY(),ppmCool.map().projectionZ())); + projection *=glm::translate(glm::mat4(1),glm::vec3(hero.getX()+has_turned,hero.getY(),0)); + + shader3DTex.use(); + glActiveTexture(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D,texture); + shader3DTex.setViewMatrix(camera->getViewMatrix(),projection); + shader3DTex.setUniformMatrix2(); + player.draw(); + glBindTexture(GL_TEXTURE_2D,0); + + // Draw skybox as last + projection = glm::perspective( (float) - 50, ( float )800/( float )600, 0.1f, 1000.0f ); + glDepthFunc( GL_LEQUAL ); // Change depth function so depth test passes when values are equal to depth buffer's content + shaderSkybox.use( ); + shaderSkybox.setViewMatrix(camera->getViewMatrix(),projection); + shaderSkybox.setUniformMatrix2(); + + skybox.displaySkybox(); + + + } + if (ppmCool.map().element(hero.getX(),hero.getY(),hero.getZ()+0.05)!=nullptr) + { + if (ppmCool.map().element(hero.getX(),hero.getY(),hero.getZ()+0.05)->getType() == "Obstacle") + { + std::cout<< " GAME OVER "<getType() == "Gap") + { + std::cout<< " GAP ! "<getType() == "End") + { + std::cout<< " YOU WIN ! "<getType()<getPosition()< +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "TrackballCamera.hpp" +#include +#include +#include +#include +#include +#include +#include + +#include +#include "AppManager.hpp" +#include "Menu.hpp" +#include "perspectiveShader.hpp" +#include "Grid.hpp" +#include "Scene.hpp" +#include "TrackballCamera.hpp" +#include "Map.hpp" +#include "Element.hpp" +#include "User.hpp" +#include "PrintableElement.hpp" +#include "Element.hpp" +#include "Character.hpp" +#include "Hero.hpp" +#include "Enemy.hpp" +#include "Wall.hpp" +#include "Floor.hpp" +#include "Obstacle.hpp" +#include "Gap.hpp" +#include "Map.hpp" +#include "PPM.hpp" +#include "PPMreader.hpp" +#include "eyeCamera.hpp" +#include "Character.hpp" +#include "Scores.hpp" +#include "TextureLoader.hpp" +#include "Skybox.hpp" +#include "Coin.hpp" +#include "Font.hpp" +#include "SDL/SDL_mixer.h" +#include "lightShader.hpp" + + + +#include + +static const char *NYAN = "elt/sound/nyancat.wav"; + +AppManager::AppManager() +{} + +int AppManager::start(char** argv) +{ + + bool MENU = true; + bool SCORE = false; + bool GAME = false; + bool TEST = false; + +// Initialize and Open Window + SDLWindowManager windowManager(m_width,m_height,"SpacIMAC RUN"); + Mix_OpenAudio(22050, AUDIO_S16SYS, 2, 640); + Mix_Music *nyancat = Mix_LoadMUS(NYAN); + Mix_PlayMusic(nyancat, 1); + +// test debug audio +int flags = MIX_INIT_OGG; +int result = 0; +if (flags != (result = Mix_Init(flags))) { + printf("Could not initialize mixer (result: %d).\n", result); + printf("Mix_Init: %s\n", Mix_GetError()); + exit(1); +} + + +// Initialize glew for OpenGL3+ support + GLenum glewInitError = glewInit(); + if(GLEW_OK != glewInitError) { + std::cerr << glewGetErrorString(glewInitError) << std::endl; + return EXIT_FAILURE; + } + +// SHADER + PerspectiveShader shader3D; + PerspectiveShader shaderBlue("./shaders/blue.fs.glsl"); + PerspectiveShader shader3DTex("./shaders/Tex3D.fs.glsl"); + PerspectiveShader shaderSkybox("./shaders/skybox.vs.glsl","./shaders/skybox.fs.glsl"); + + std::vector shaderVector; + shaderVector.push_back(&shader3D); + shaderVector.push_back(&shaderBlue); + shaderVector.push_back(&shader3DTex); + + +// CAMERA + std::shared_ptr camera(new TrackballCamera); + +// MOTOR GAME + glEnable(GL_DEPTH_TEST); + + motor_game::PPMreader theReader("test_01.ppm"); + motor_game::PPM ppmCool=theReader.readFile(); + + + motor_game::Map map = ppmCool.map(); + motor_game::Scores scoreTable; + Hero hero = ppmCool.hero(); + hero.setSpeed(0.05); + + float begin = 0; + + int startTicksRight=0; + int startTicksLeft=0; + + bool has_jump = false; + int jump = 0; + int zTranslation = 0; + int has_turned = 0; + + + std::unique_ptr cube(new Cube); + std::unique_ptr sphere(new Sphere); + std::vector> vectorObject; + vectorObject.emplace_back(std::move(cube)); + vectorObject.emplace_back(std::move(sphere)); + +// TEXTURE + + GLuint textureMenu; + GLuint textureMenu1 = TextureLoader::LoadTexture("./elt/texture/ecran_debut_RUNNER_2.png"); + GLuint textureMenu2 = TextureLoader::LoadTexture("./elt/texture/ecran_pause_RUNNER_2.png"); + GLuint texturePlayer = TextureLoader::LoadTexture("./elt/texture/spaceplayer.jpg"); + GLuint textureScore = TextureLoader::LoadTexture("./elt/texture/ecran_score_RUNNER.png"); + GLuint textureGameOver = TextureLoader::LoadTexture("./elt/texture/ecran_GAME_OVER.png"); + std::vector textureVector; + textureVector.push_back(&texturePlayer); + + + Skybox skybox; + Menu menu; + menu.setVisibility(MENU); + Menu score; + score.setVisibility(SCORE); + Cube player; + Scene game(std::move(vectorObject),camera,textureVector,shaderVector); + + + // font + Font font("elt/ttf/starjedi.ttf"); + + + // Application loop: + + bool done = false; + while(!done) { + + if (TEST) + { + SDL_Event e; + while(windowManager.pollEvent(e)) { + if(e.type == SDL_QUIT) { + done = true; // Leave the loop after this iteration + } + } + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + } + + + if (menu.visibility() == true) + { + // Event loop: + + + if (menu.type() == 2) + { + textureMenu = textureMenu2; + + } + else if(menu.type() == 3) + { + textureMenu = textureGameOver; + + } + + else + { + textureMenu = textureMenu1; + } + + SDL_Event e; + while(windowManager.pollEvent(e)) { + if (menu.type() == 2) + { + if (e.type == SDL_KEYDOWN){ + + if (e.key.keysym.sym == SDLK_ESCAPE) + { + + menu.setVisibility(false); + GAME = true; + glUseProgram(0); + + } + } + + if(e.type == SDL_MOUSEBUTTONDOWN && e.button.button == SDL_BUTTON_LEFT) + { + if (menu.onMouseEvent(windowManager.getMousePosition()) == 1) + { + motor_game::PPMreader theReader2("test_01.ppm"); + motor_game::PPM ppm = theReader2.readFile(); + map = ppm.map(); + hero = ppm.hero(); + hero.setSpeed(0.05); + + begin = 0; + + startTicksRight=0; + startTicksLeft=0; + + has_jump = false; + jump = 0; + zTranslation = 0; + has_turned = 0; + GAME = 1; + glUseProgram(0); + + } + + } + + + if(e.type == SDL_QUIT) { + done = true; // Leave the loop after this iteration + } + + + } + + + if(e.type == SDL_MOUSEBUTTONDOWN && e.button.button == SDL_BUTTON_LEFT) + { + if (menu.onMouseEvent(windowManager.getMousePosition()) == 1) + { + GAME = 1; + glUseProgram(0); + } + if (menu.onMouseEvent(windowManager.getMousePosition()) == 2) + { + SCORE = 1; + glUseProgram(0); + } + } + + if(e.type == SDL_QUIT) { + done = true; // Leave the loop after this iteration + } + } + + //Render loop: + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + shader3DTex.use(); + glActiveTexture(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D,textureMenu); + shader3DTex.setViewMatrix(glm::mat4(1.0),glm::mat4(1.0)); + shader3DTex.setUniformMatrix(); + menu.displayMenu(); + glBindTexture(GL_TEXTURE_2D,0); + + + } + + if (SCORE) + { + // Event loop: + SDL_Event e; + // test score + std::multimap::const_iterator it; + for(it=scoreTable.multimap().begin(); it!=scoreTable.multimap().end(); it++) + std::cout << it->second << " : " << it->first << std::endl; + while(windowManager.pollEvent(e)) { + + if(e.type == SDL_MOUSEBUTTONDOWN && e.button.button == SDL_BUTTON_LEFT){ + + if (score.onMouseEvent(windowManager.getMousePosition()) == 1) + { + SCORE = 0; + menu.setVisibility(true); + std::cout << "test menu " << std::endl; + GAME = 1; + glUseProgram(0); + } + if (score.onMouseEvent(windowManager.getMousePosition()) == 2) + { + + SCORE = 0; + menu.setVisibility(true); + glUseProgram(0); + } + } + + if(e.type == SDL_QUIT) { + done = true; // Leave the loop after this iteration + } + } + + //Render loop: + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + shader3DTex.use(); + glActiveTexture(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D,textureScore); + shader3DTex.setViewMatrix(glm::mat4(1.0),glm::mat4(1.0)); + shader3DTex.setUniformMatrix(); + score.displayMenu(); + glBindTexture(GL_TEXTURE_2D,0); + + + } + if (menu.type() == 3) + { + //save score + //print the scores + scoreTable.add(std::pair(m_score, "Anonyme")); + scoreTable.save("Score.ttf"); + // Event loop: + SDL_Event e; + while(windowManager.pollEvent(e)) { + + if(e.type == SDL_QUIT) { + done = true; // Leave the loop after this iteration + Mix_FreeMusic(nyancat); + Mix_Quit(); + + return 0; + } + } + + //Render loop: + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + shader3DTex.use(); + glActiveTexture(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D,textureGameOver); + shader3DTex.setViewMatrix(glm::mat4(1.0),glm::mat4(1.0)); + shader3DTex.setUniformMatrix(); + menu.displayMenu(); + glBindTexture(GL_TEXTURE_2D,0); + + + } + + + if (GAME) + { + //font.loadFont(); + // Event loop: + SDL_Event e; + + while(windowManager.pollEvent(e)) { + + if (e.type == SDL_KEYDOWN){ + camera->onKeyboardEvent(e); + if (e.key.keysym.sym == SDLK_ESCAPE) + { + + menu.setVisibility(true); + menu.type(2); + GAME = false; + glUseProgram(0); + } + + + if (e.key.keysym.sym == SDLK_z) + { + if (has_jump == false) + { + hero.up(); + has_jump = true; + } + } + if (e.key.keysym.sym == SDLK_q) + { + + if (startTicksLeft != 0 && (SDL_GetTicks()-startTicksLeft)<300) + { + + if (map.element(hero.getX(),0,hero.getZ())!=nullptr) + { + if (map.element(hero.getX(),0,hero.getZ())->getType() == "left") + { + + if (zTranslation == 1) + { + zTranslation = 0; + } + + map.translateMap(hero.getX(),hero.getZ()); + hero.translate(hero.getX(),hero.getZ()); + map.rotateLeft(); + map.translateMap(-3,-1); + hero.translate(-3,-1); + + startTicksRight = 0; + begin = 0; + + } + } + + } + else + { + startTicksLeft = SDL_GetTicks(); + if(map.element(hero.getX()-1,hero.getY(),hero.getZ())!=nullptr) + { + if (map.element(hero.getX()-1,hero.getY(),hero.getZ())->getType()=="Gap") + { + std::cout<<"GAP !"<getType()=="Coin") + { + hero.moveLeft(); + map.eraseElement(hero.getX(),hero.getY(),hero.getZ()+0.05); + m_score ++; + } + + } + if(map.element(hero.getX()-1,hero.getY(),hero.getZ())==nullptr) + { + hero.moveLeft(); + } + + + } + + + + + + } + if (e.key.keysym.sym == SDLK_d) + { + + if (startTicksRight != 0 && (SDL_GetTicks()-startTicksRight)<300) + { + + if (map.element(hero.getX(),0,hero.getZ())!=nullptr) + { + if (map.element(hero.getX(),0,hero.getZ())->getType() == "right") + { + has_turned ++; + if (has_turned > 1) + { + zTranslation = 1; + } + + map.translateMap(hero.getX(),hero.getZ()); + hero.translate(hero.getX(),hero.getZ()); + map.rotateRight(); + map.translateMap(-1,-1); + hero.translate(-1,-1); + + startTicksRight = 0; + begin = 0; + + } + } + + + } + else + { + startTicksRight = SDL_GetTicks(); + if(map.element(hero.getX()+1,hero.getY(),hero.getZ())!=nullptr) + { + if (map.element(hero.getX()+1,hero.getY(),hero.getZ())->getType()=="Gap") + { + std::cout<<"GAP !"<getType()=="Coin") + { + hero.moveRight(); + m_score += 1; + map.eraseElement(hero.getX(),hero.getY(),hero.getZ()+0.05); + + } + } + if(map.element(hero.getX()+1,hero.getY(),hero.getZ()+0.05)==nullptr) + { + hero.moveRight(); + } + + } + } + } + + + if (e.button.button == SDL_BUTTON_WHEELUP || e.button.button == SDL_BUTTON_WHEELDOWN ) + camera->onMouseWheelEvent(e); + + if (windowManager.isMouseButtonPressed(SDL_BUTTON_LEFT)) + { + camera->onMouseEvent(e); + } + + if(e.type == SDL_QUIT) { + done = true; // Leave the loop after this iteration + } + } + + + if ( has_jump == true ) + { + jump ++; + if (jump == 40) + { + has_jump = false; + jump = 0; + hero.down(); + } + } + + // Render loop: + if (map.element(hero.getX(),hero.getY(),hero.getZ()+0.05)==nullptr) + { + begin -=hero.getSpeed(); + hero.run(); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + game.loadScene(map,begin); + + glm::mat4 projection = glm::scale(glm::mat4(1),glm::vec3(1,1,-1)); + + projection *=glm::translate(glm::mat4(1),glm::vec3(map.projectionX(),map.projectionY(),map.projectionZ())); + projection *=glm::translate(glm::mat4(1),glm::vec3(hero.getX()+zTranslation,hero.getY(),0)); + + shader3DTex.use(); + glActiveTexture(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D,texturePlayer); + shader3DTex.setViewMatrix(camera->getViewMatrix(),projection); + shader3DTex.setUniformMatrix2(); + player.draw(); + glBindTexture(GL_TEXTURE_2D,0); + + // Draw skybox as last + projection = glm::perspective( (float) - 50, ( float )800/( float )600, 0.1f, 1000.0f ); + glDepthFunc( GL_LEQUAL ); // Change depth function so depth test passes when values are equal to depth buffer's content + shaderSkybox.use( ); + shaderSkybox.setViewMatrix(camera->getViewMatrix(),projection); + shaderSkybox.setUniformMatrix2(); + skybox.displaySkybox(); + + + } + if (map.element(hero.getX(),hero.getY(),hero.getZ()+0.05)!=nullptr) + { + + if (map.element(hero.getX(),hero.getY(),hero.getZ()+0.05)->getType() == "Coin") + { + map.eraseElement(hero.getX(),hero.getY(),hero.getZ()+0.05); + m_score ++; + } + + else if (map.element(hero.getX(),hero.getY(),hero.getZ()+0.05)->getType() == "Obstacle") + { + std::cout<< " GAME OVER "<getType() == "Gap") + { + std::cout<< " GAME OVER "<getType() == "End") + { + std::cout<< " YOU WIN ! "<getVertexCount()*sizeof(ShapeVertex),this->getDataPointer(), GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); +} + +void Menu::vaoManager(GLuint &vao,GLuint &vbo) +{ + + glGenVertexArrays(1,&vao); + glBindVertexArray(vao); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glEnableVertexAttribArray(2); + + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,position)); + glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,normal)); + glVertexAttribPointer(2,2,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,texCoords)); + glBindBuffer(GL_ARRAY_BUFFER,0); + glBindVertexArray(0); +} + +int Menu::onMouseEvent(glm::ivec2 position) +{ + /*ancien carré rouge + if ((position.x>185 && position.x<610) && (position.y>200 && position.y<400)) + { + isVisible = false; + return 1; + }*/ + //std::cout << "x : " << position.x << " y : " <338 && position.x<455) && (position.y>269 && position.y<328)) + { + isVisible = false; + return 1; + } + + // bouton score + if ((position.x>275 && position.x<530) && (position.y>370 && position.y<415)) + { + isVisible = false; + + return 2; + } + + return 0; +} diff --git a/src/glimac/Cone.cpp b/src/glimac/Cone.cpp index 93164be..daf11c7 100644 --- a/src/glimac/Cone.cpp +++ b/src/glimac/Cone.cpp @@ -73,8 +73,43 @@ void Cone::build(GLfloat height, GLfloat r, GLsizei discLat, GLsizei discHeight) } } - // Attention ! dans cette implantation on duplique beaucoup de sommets. Une meilleur stratégie est de passer - // par un Index Buffer Object, que nous verrons dans les prochains TDs + vboManager(m_vbo); + vaoManager(m_vao,m_vbo); + + +} + +void Cone::draw() +{ + glBindVertexArray(m_vao); + glDrawArrays(GL_TRIANGLES,0,m_nVertexCount); + glBindVertexArray(0); + +} + +void Cone::vboManager(GLuint &vbo) +{ + glGenBuffers(1,&vbo); + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glBufferData(GL_ARRAY_BUFFER,this->getVertexCount()*sizeof(ShapeVertex),this->getDataPointer(), GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); +} + +void Cone::vaoManager(GLuint &vao,GLuint &vbo) +{ + + glGenVertexArrays(1,&vao); + glBindVertexArray(vao); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glEnableVertexAttribArray(2); + + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,position)); + glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,normal)); + glVertexAttribPointer(2,2,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,texCoords)); + glBindBuffer(GL_ARRAY_BUFFER,0); + glBindVertexArray(0); } } diff --git a/src/glimac/Grid.cpp b/src/glimac/Grid.cpp new file mode 100644 index 0000000..947abb3 --- /dev/null +++ b/src/glimac/Grid.cpp @@ -0,0 +1,83 @@ +#include +#include "common.hpp" +#include "Grid.hpp" + +namespace glimac { + + void Grid::draw() + { + glBindVertexArray(m_vao); + glDrawArrays(GL_LINES,0,m_nVertexCount); + glBindVertexArray(0); + } + + void Grid::build() + { + ShapeVertex vertex; + int sizeCube = 1; + int sizeGrid = 10; + m_nVertexCount = 0; + + // Horizontal + for (int i =0; i<=sizeGrid; i = i + sizeCube) + { + vertex.texCoords = glm::vec2(0,0); + vertex.normal = glm::vec3(-sizeGrid/2+i,0,-sizeGrid/2); + vertex.position = vertex.normal; + m_Vertices.push_back(vertex); + + vertex.texCoords = glm::vec2(0,0); + vertex.normal = glm::vec3(-sizeGrid/2+i,0,sizeGrid/2); + vertex.position = vertex.normal; + m_Vertices.push_back(vertex); + + m_nVertexCount += 2; + } + + // Vertical + + for (int i=0; i<=sizeGrid; i=i+sizeCube) + { + vertex.texCoords = glm::vec2(0,0); + vertex.normal = glm::vec3(-sizeGrid/2,0,-sizeGrid/2+i); + vertex.position = vertex.normal; + m_Vertices.push_back(vertex); + + vertex.texCoords = glm::vec2(0,0); + vertex.normal = glm::vec3(sizeGrid/2,0,-sizeGrid/2+i); + vertex.position = vertex.normal; + m_Vertices.push_back(vertex); + + m_nVertexCount += 2; + } + + vboManager(m_vbo); + vaoManager(m_vao,m_vbo); + } + + void Grid::vboManager(GLuint &vbo) + { + glGenBuffers(1,&vbo); + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glBufferData(GL_ARRAY_BUFFER,this->getVertexCount()*sizeof(ShapeVertex),this->getDataPointer(), GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + } + + void Grid::vaoManager(GLuint &vao,GLuint &vbo) + { + + glGenVertexArrays(1,&vao); + glBindVertexArray(vao); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glEnableVertexAttribArray(2); + + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,position)); + glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,normal)); + glVertexAttribPointer(2,2,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,texCoords)); + glBindBuffer(GL_ARRAY_BUFFER,0); + glBindVertexArray(0); + } + +} diff --git a/src/glimac/Landmark.cpp b/src/glimac/Landmark.cpp new file mode 100644 index 0000000..90e651f --- /dev/null +++ b/src/glimac/Landmark.cpp @@ -0,0 +1,79 @@ +#include +#include "common.hpp" +#include "Landmark.hpp" + +namespace glimac { + void Landmark::draw() + { + glBindVertexArray(m_vao); + glDrawArrays(GL_LINES,0,m_nVertexCount); + glBindVertexArray(0); + } + void Landmark::build() + { + ShapeVertex vertex; + + //Axe Z + vertex.texCoords = glm::vec2(0,0); + vertex.normal = glm::vec3(0,0,0); + vertex.position = vertex.normal; + m_Vertices.push_back(vertex); + + vertex.texCoords = glm::vec2(0,0); + vertex.normal = glm::vec3(0,0,1); + vertex.position = vertex.normal; + m_Vertices.push_back(vertex); + + //Axe Y + vertex.texCoords = glm::vec2(0,0); + vertex.normal = glm::vec3(0,0,0); + vertex.position = vertex.normal; + m_Vertices.push_back(vertex); + + vertex.texCoords = glm::vec2(0,0); + vertex.normal = glm::vec3(0,1,0); + vertex.position = vertex.normal; + m_Vertices.push_back(vertex); + + //Axe X + vertex.texCoords = glm::vec2(0,0); + vertex.normal = glm::vec3(0,0,0); + vertex.position = vertex.normal; + m_Vertices.push_back(vertex); + + vertex.texCoords = glm::vec2(0,0); + vertex.normal = glm::vec3(1,0,0); + vertex.position = vertex.normal; + m_Vertices.push_back(vertex); + + vboManager(m_vbo); + vaoManager(m_vao,m_vbo); + + } + + void Landmark::vboManager(GLuint &vbo) + { + glGenBuffers(1,&vbo); + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glBufferData(GL_ARRAY_BUFFER,this->getVertexCount()*sizeof(ShapeVertex),this->getDataPointer(), GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + } + + void Landmark::vaoManager(GLuint &vao,GLuint &vbo) + { + + glGenVertexArrays(1,&vao); + glBindVertexArray(vao); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glEnableVertexAttribArray(2); + + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,position)); + glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,normal)); + glVertexAttribPointer(2,2,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,texCoords)); + glBindBuffer(GL_ARRAY_BUFFER,0); + glBindVertexArray(0); + } + +} diff --git a/src/glimac/Object.cpp b/src/glimac/Object.cpp new file mode 100644 index 0000000..13b4124 --- /dev/null +++ b/src/glimac/Object.cpp @@ -0,0 +1,31 @@ +#include +#include "Object.hpp" + +namespace glimac +{ + void Object::vboManager(GLuint &vbo) + { + glGenBuffers(1,&vbo); + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glBufferData(GL_ARRAY_BUFFER,this->getVertexCount()*sizeof(ShapeVertex),this->getDataPointer(), GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + } + + void Object::vaoManager(GLuint &vao,GLuint &vbo) + { + + glGenVertexArrays(1,&vao); + glBindVertexArray(vao); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glEnableVertexAttribArray(2); + + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,position)); + glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,normal)); + glVertexAttribPointer(2,2,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,texCoords)); + glBindBuffer(GL_ARRAY_BUFFER,0); + glBindVertexArray(0); + + } +} diff --git a/src/glimac/Sphere.cpp b/src/glimac/Sphere.cpp index 0a55d9a..a1374ad 100644 --- a/src/glimac/Sphere.cpp +++ b/src/glimac/Sphere.cpp @@ -66,8 +66,43 @@ void Sphere::build(GLfloat r, GLsizei discLat, GLsizei discLong) { } } - // Attention ! dans cette implantation on duplique beaucoup de sommets. Une meilleur stratégie est de passer - // par un Index Buffer Object, que nous verrons dans les prochains TDs -} + vboManager(m_vbo); + vaoManager(m_vao,m_vbo); + + } + + void Sphere::vboManager(GLuint &vbo) + { + glGenBuffers(1,&vbo); + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glBufferData(GL_ARRAY_BUFFER,this->getVertexCount()*sizeof(ShapeVertex),this->getDataPointer(), GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + } + + void Sphere::vaoManager(GLuint &vao,GLuint &vbo) + { + + glGenVertexArrays(1,&vao); + glBindVertexArray(vao); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glEnableVertexAttribArray(2); + + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,position)); + glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,normal)); + glVertexAttribPointer(2,2,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,texCoords)); + glBindBuffer(GL_ARRAY_BUFFER,0); + glBindVertexArray(0); + } + + void Sphere::draw() + { + glBindVertexArray(m_vao); + glDrawArrays(GL_TRIANGLES,0,m_nVertexCount); + glBindVertexArray(0); + + } + } diff --git a/src/glimac/cube.cpp b/src/glimac/cube.cpp index 12cd5aa..1385a56 100644 --- a/src/glimac/cube.cpp +++ b/src/glimac/cube.cpp @@ -6,159 +6,165 @@ namespace glimac { - void Cube::build(GLfloat m_edge) + + void Cube::draw() + { + glBindVertexArray(m_vao); + glDrawArrays(GL_TRIANGLES,0,m_nVertexCount); + glBindVertexArray(0); + + } + + void Cube::build() { ShapeVertex vertex; // face 1 vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,1,1); + vertex.normal = glm::vec3(0,1,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); + vertex.texCoords = glm::vec2(1,1); vertex.normal = glm::vec3(1,1,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,-1,1); + vertex.texCoords = glm::vec2(0,1); + vertex.normal = glm::vec3(1,0,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,1,1); + vertex.normal = glm::vec3(0,1,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,-1,1); + vertex.texCoords = glm::vec2(1,0); + vertex.normal = glm::vec3(0,0,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,-1,1); + vertex.texCoords = glm::vec2(0,1); + vertex.normal = glm::vec3(1,0,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); // face 2 vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,1,-1); + vertex.normal = glm::vec3(0,1,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,1,-1); + vertex.texCoords = glm::vec2(1,1); + vertex.normal = glm::vec3(1,1,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,-1,-1); + vertex.texCoords = glm::vec2(0,1); + vertex.normal = glm::vec3(1,0,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,1,-1); + vertex.normal = glm::vec3(0,1,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,-1,-1); + vertex.texCoords = glm::vec2(1,0); + vertex.normal = glm::vec3(0,0,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,-1,-1); + vertex.texCoords = glm::vec2(0,1); + vertex.normal = glm::vec3(1,0,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); // face 3 vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,1,1); + vertex.normal = glm::vec3(0,1,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); + vertex.texCoords = glm::vec2(1,1); vertex.normal = glm::vec3(1,1,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,1,-1); + vertex.texCoords = glm::vec2(0,1); + vertex.normal = glm::vec3(0,1,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); + vertex.texCoords = glm::vec2(1,1); vertex.normal = glm::vec3(1,1,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,1,-1); + vertex.texCoords = glm::vec2(0,1); + vertex.normal = glm::vec3(0,1,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,1,-1); + vertex.texCoords = glm::vec2(1,0); + vertex.normal = glm::vec3(1,1,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); //face4 vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,-1,1); + vertex.normal = glm::vec3(0,0,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,-1,1); + vertex.normal = glm::vec3(1,0,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,-1,-1); + vertex.normal = glm::vec3(0,0,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,-1,1); + vertex.normal = glm::vec3(1,0,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); -#include -#include "common.hpp" - vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,-1,-1); + vertex.normal = glm::vec3(0,0,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,-1,-1); + vertex.normal = glm::vec3(1,0,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); //face5 vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,1,-1); + vertex.normal = glm::vec3(1,1,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,-1,-1); + vertex.normal = glm::vec3(1,0,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,-1,1); + vertex.normal = glm::vec3(1,0,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,1,-1); + vertex.normal = glm::vec3(1,1,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); @@ -168,45 +174,69 @@ namespace glimac { m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(1,-1,1); + vertex.normal = glm::vec3(1,0,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); //face5 vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,1,-1); + vertex.normal = glm::vec3(0,1,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,-1,-1); + vertex.normal = glm::vec3(0,0,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,-1,1); + vertex.normal = glm::vec3(0,0,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,1,-1); + vertex.normal = glm::vec3(0,1,0); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,1,1); + vertex.normal = glm::vec3(0,1,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); vertex.texCoords = glm::vec2(0,0); - vertex.normal = glm::vec3(-1,-1,1); + vertex.normal = glm::vec3(0,0,1); vertex.position = vertex.normal; m_Vertices.push_back(vertex); + vboManager(m_vbo); + vaoManager(m_vao,m_vbo); + } - - + void Cube::vboManager(GLuint &vbo) + { + glGenBuffers(1,&vbo); + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glBufferData(GL_ARRAY_BUFFER,this->getVertexCount()*sizeof(ShapeVertex),this->getDataPointer(), GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); } + + void Cube::vaoManager(GLuint &vao,GLuint &vbo) + { + + glGenVertexArrays(1,&vao); + glBindVertexArray(vao); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glEnableVertexAttribArray(2); + + glBindBuffer(GL_ARRAY_BUFFER,vbo); + glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,position)); + glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,normal)); + glVertexAttribPointer(2,2,GL_FLOAT,GL_FALSE,sizeof(ShapeVertex),(void *) offsetof(ShapeVertex,texCoords)); + glBindBuffer(GL_ARRAY_BUFFER,0); + glBindVertexArray(0); + } } diff --git a/src/graphic_engine/Font.cpp b/src/graphic_engine/Font.cpp new file mode 100644 index 0000000..65c8a75 --- /dev/null +++ b/src/graphic_engine/Font.cpp @@ -0,0 +1,117 @@ + +#include +#include "Font.hpp" +#include + +Font::Font() +{} + +Font::Font(const std::string &fontPath) + :m_fontPath(fontPath) +{} + + +void Font::setFontPath(const std::string &fontPath) { + m_fontPath = fontPath; +} + +Font::~Font(){} + +int Font::puissance2sup(const int i) +{ + double logbase2 = log(i) / log(2); + return (int)round(pow(2.0, ceil(logbase2))); +} + + +//bool Font::loadFont(AppManager *app) { +void Font::loadFont() { + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + + //gluOrtho2D(0, app->getAppWidth(), 0, app->getAppHeight()); + gluOrtho2D(0, 800, 0, 800); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + + glDisable(GL_DEPTH_TEST); + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + GLuint texture; + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + + //to add as font attribute + std::string message = "hello"; + SDL_Color color = {255, 0, 0, 1}; + int x = 100; + int y = 200; + TTF_Init(); + + + if(TTF_Init()==-1) { + std::cout << "TTF_Init: " << TTF_GetError() << std::endl; + return; + } + + TTF_Font * font = nullptr; + font = TTF_OpenFont(this->getFontPath().c_str(), 200); + //font = TTF_OpenFont("elt/ttf/starjedi.ttf", 20); + SDL_Surface * sFont = TTF_RenderText_Blended(font, "message.c_str()", color); + + if(!font) { + std::cout << "TTF_OpenFont:" << TTF_GetError() << std::endl; + return; + } + + GLenum codagePixel; + if (sFont->format->Rmask == 0x000000ff) + { + codagePixel = GL_RGBA; + } + else + { + #ifndef GL_BGRA + #define GL_BGRA 0x80E1 + #endif + codagePixel = GL_BGRA; + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, sFont->w, sFont->h, 0, GL_BGRA, GL_UNSIGNED_BYTE, sFont->pixels); + + glTexImage2D(GL_TEXTURE_2D, 0, 4, puissance2sup(sFont->w), puissance2sup(sFont->h), 0, codagePixel, GL_UNSIGNED_BYTE, NULL); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, sFont->w, sFont->h, codagePixel, GL_UNSIGNED_BYTE, sFont->pixels); + + + glBegin(GL_QUADS); + { + glTexCoord2f(0,0); glVertex2f(x, y); + glTexCoord2f(1,0); glVertex2f(x + sFont->w, y); + glTexCoord2f(1,1); glVertex2f(x + sFont->w, y + sFont->h); + glTexCoord2f(0,1); glVertex2f(x, y + sFont->h); + } + glEnd(); + + glDisable(GL_BLEND); + glDisable(GL_TEXTURE_2D); + glEnable(GL_DEPTH_TEST); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + std::cout << "TEST FONT" << std::endl; + + + glDeleteTextures(1, &texture); + TTF_CloseFont(font); + TTF_Quit(); + SDL_FreeSurface(sFont); + return; +} diff --git a/src/graphic_engine/Scene.cpp b/src/graphic_engine/Scene.cpp new file mode 100644 index 0000000..276ab9e --- /dev/null +++ b/src/graphic_engine/Scene.cpp @@ -0,0 +1,124 @@ +#include +#include +#include +#include +#include +#include + +#include "Scene.hpp" +#include "camera.hpp" +#include "perspectiveShader.hpp" +#include "lightShader.hpp" +#include "Hero.hpp" + + +Scene::Scene() +{} + +Scene::Scene( + std::vector> inDataObject, + std::shared_ptr inCamera): + m_dataObject(std::move(inDataObject)), + m_camera(inCamera) +{} + +Scene::Scene( + std::vector> inDataObject, + std::shared_ptr inCamera, + std::vector inTexture, + std::vector inShader): + m_dataObject(std::move(inDataObject)), + m_camera(inCamera) , + m_texture(inTexture), + m_shader(inShader) +{} + + + + +void Scene::loadScene(motor_game::Map &inMap,float speed) +{ + + LightShader shaderlight("./shaders/directionallight.fs.glsl"); + + + negative_vector vector = inMap.getVector(); + for (int i = vector.lower_limit(); i< vector.upper_limit(); i++) + { + glm::mat4 projection = glm::scale(glm::mat4(1),glm::vec3(1,1,-1)); + projection *= glm::translate(glm::mat4(1),glm::vec3(inMap.projectionX(),inMap.projectionY(),inMap.projectionZ())); + if (vector[i]!=nullptr) + { + if (vector[i]->getType() == "Wall") + { + projection *=glm::translate(glm::mat4(1),glm::vec3(vector[i]->getX(),vector[i]->getY(),vector[i]->getZ()+speed)); + + m_shader[0]->use(); + m_shader[0]->setViewMatrix(m_camera->getViewMatrix(),projection); + m_shader[0]->setUniformMatrix2(); + + m_dataObject[0]->draw(); + } + if (vector[i]->getType()=="Floor") + { + projection *=glm::translate(glm::mat4(1),glm::vec3(vector[i]->getX(),vector[i]->getY(),vector[i]->getZ()+speed)); + + m_shader[1]->use(); + m_shader[1]->setViewMatrix(m_camera->getViewMatrix(),projection); + m_shader[1]->setUniformMatrix2(); + + m_dataObject[0]->draw(); + } + + if (vector[i]->getType()=="right" || vector[i]->getType()=="left") + { + projection *=glm::translate(glm::mat4(1),glm::vec3(vector[i]->getX(),vector[i]->getY(),vector[i]->getZ()+speed)); + + m_shader[1]->use(); + m_shader[1]->setViewMatrix(m_camera->getViewMatrix(),projection); + m_shader[1]->setUniformMatrix2(); + + m_dataObject[0]->draw(); + } + + if (vector[i]->getType()=="Obstacle") + { + projection *=glm::translate(glm::mat4(1),glm::vec3(vector[i]->getX(),vector[i]->getY(),vector[i]->getZ()+speed)); + + m_shader[0]->use(); + m_shader[0]->setViewMatrix(m_camera->getViewMatrix(),projection); + m_shader[0]->setUniformMatrix2(); + + m_dataObject[0]->draw(); + } + + if (vector[i]->getType()=="End") + { + projection *=glm::translate(glm::mat4(1),glm::vec3(vector[i]->getX(),vector[i]->getY(),vector[i]->getZ()+speed)); + + m_shader[1]->use(); + m_shader[1]->setViewMatrix(m_camera->getViewMatrix(),projection); + m_shader[1]->setUniformMatrix2(); + + m_dataObject[0]->draw(); + } + + if (vector[i]->getType()=="Coin") + { + projection *=glm::translate(glm::mat4(1),glm::vec3(vector[i]->getX()+0.5,vector[i]->getY()+0.5,vector[i]->getZ()+speed)); + projection *=glm::scale(glm::mat4(1),glm::vec3(0.5,0.5,0.5)); + shaderlight.use(); + shaderlight.setViewMatrix(m_camera->getViewMatrix(),projection); + shaderlight.setUniformMatrix2(); + + m_dataObject[1]->draw(); + } + + } + + } +} + + +Scene::~Scene() +{} diff --git a/src/graphic_engine/Skybox.cpp b/src/graphic_engine/Skybox.cpp new file mode 100644 index 0000000..74d0e32 --- /dev/null +++ b/src/graphic_engine/Skybox.cpp @@ -0,0 +1,44 @@ + +#include +#include + +#include "Skybox.hpp" +#include "common.hpp" +#include "TextureLoader.hpp" + + +using namespace glimac; + +void Skybox::voManager() +{ + glGenVertexArrays( 1, &m_vao ); + glGenBuffers( 1, &m_vbo ); + glBindVertexArray( m_vao ); + glBindBuffer( GL_ARRAY_BUFFER, m_vbo ); + glBufferData( GL_ARRAY_BUFFER, sizeof( m_skyboxVertices ), &m_skyboxVertices, GL_STATIC_DRAW ); + glEnableVertexAttribArray( 0 ); + glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof( GLfloat ), ( GLvoid * ) 0 ); + glBindVertexArray(0); +} + +void Skybox::createTexture() +{ + std::vector faces; + faces.push_back( "./elt/texture/skybox/right.tga" ); + faces.push_back( "./elt/texture/skybox/left.tga" ); + faces.push_back( "./elt/texture/skybox/top.tga" ); + faces.push_back( "./elt/texture/skybox/bottom.tga" ); + faces.push_back( "./elt/texture/skybox/back.tga" ); + faces.push_back( "./elt/texture/skybox/front.tga" ); + m_cubemapTexture = TextureLoader::LoadCubeMap( faces ); +} + +void Skybox::displaySkybox() +{ + // skybox cube + glBindVertexArray( m_vao); + glBindTexture( GL_TEXTURE_CUBE_MAP, m_cubemapTexture ); + glDrawArrays( GL_TRIANGLES, 0, 36 ); + glBindVertexArray( 0 ); + glDepthFunc( GL_LESS ); // Set depth function back to default +} diff --git a/src/graphic_engine/perspectiveShader.cpp b/src/graphic_engine/perspectiveShader.cpp new file mode 100644 index 0000000..0371a37 --- /dev/null +++ b/src/graphic_engine/perspectiveShader.cpp @@ -0,0 +1,85 @@ +#include +#include +#include +#include +#include "perspectiveShader.hpp" + +PerspectiveShader::PerspectiveShader( + const char* filepathFragmentShader): + + + m_program(glimac::loadProgram("./shaders/3d.vs.glsl", + filepathFragmentShader)), + m_filepathFragmentShader(filepathFragmentShader), + m_modelviewMatrix(glm::mat4(1.0f)), + m_uniformModelViewMatrix(glGetUniformLocation(m_program.getGLId(),uniformMVName)), + m_uniformNormalMatrix(glGetUniformLocation(m_program.getGLId(),uniformNormName)), + m_uniformModelViewProjectionMatrix(glGetUniformLocation(m_program.getGLId(),uniformMVPName)), + m_uniformModelTexture(glGetUniformLocation(m_program.getGLId(),"uTexture")) + +{} + +PerspectiveShader::PerspectiveShader( + const char* filepathVertexShader, + const char* filepathFragmentShader): + + + m_program(glimac::loadProgram(filepathVertexShader, + filepathFragmentShader)), + m_filepathVertexShader(filepathVertexShader), + m_filepathFragmentShader(filepathFragmentShader), + m_modelviewMatrix(glm::mat4(1.0f)), + m_uniformModelViewMatrix(glGetUniformLocation(m_program.getGLId(),uniformMVName)), + m_uniformNormalMatrix(glGetUniformLocation(m_program.getGLId(),uniformNormName)), + m_uniformModelViewProjectionMatrix(glGetUniformLocation(m_program.getGLId(),uniformMVPName)), + m_uniformModelTexture(glGetUniformLocation(m_program.getGLId(),"uTexture")) + +{} + + + +void PerspectiveShader::use() +{ + m_program.use(); +} +void PerspectiveShader::setViewMatrix(const glm::mat4 &sceneModel, const glm::mat4 &projection) +{ +// m_projectionMatrix = projection; + m_modelviewMatrix = sceneModel; + m_modelprojMatrix = projection; +} + +void PerspectiveShader::setUniformMatrix() const +{ + + glm::mat4 projMatrix,MVMatrix,NormalMatrix; + float a = 800.0/600.0; + projMatrix = glm::perspective(glm::radians(70.f),a,0.1f,100.f); + MVMatrix = glm::translate(glm::mat4(1.0),glm::vec3(0.0,0.0,-5.0))*m_modelprojMatrix; + NormalMatrix = glm::transpose(glm::inverse(MVMatrix)); + + glm::mat4 modelViewProjection = projMatrix * MVMatrix* m_modelviewMatrix; + glUniform1i(m_uniformModelTexture,0); + glUniformMatrix4fv(m_uniformModelViewProjectionMatrix,1,GL_FALSE,glm::value_ptr(modelViewProjection)); + glUniformMatrix4fv(m_uniformModelViewMatrix,1,GL_FALSE,glm::value_ptr(MVMatrix)); + glUniformMatrix4fv(m_uniformNormalMatrix,1,GL_FALSE,glm::value_ptr(NormalMatrix)); + + +} + + + +void PerspectiveShader::setUniformMatrix2() const +{ + + glm::mat4 projMatrix,MVMatrix,NormalMatrix; + float a = 800.0/600.0; + projMatrix = glm::perspective(glm::radians(70.f),a,0.1f,100.f)* m_modelviewMatrix; + MVMatrix = glm::translate(glm::mat4(1.0),glm::vec3(0.0,0.0,-5.0))*m_modelprojMatrix; + NormalMatrix = glm::transpose(glm::inverse(MVMatrix)); + + glm::mat4 modelViewProjection = projMatrix * MVMatrix; + glUniformMatrix4fv(m_uniformModelViewProjectionMatrix,1,GL_FALSE,glm::value_ptr(modelViewProjection)); + glUniformMatrix4fv(m_uniformModelViewMatrix,1,GL_FALSE,glm::value_ptr(MVMatrix)); + glUniformMatrix4fv(m_uniformNormalMatrix,1,GL_FALSE,glm::value_ptr(NormalMatrix)); +} diff --git a/src/lightShader.cpp b/src/lightShader.cpp new file mode 100644 index 0000000..839d83c --- /dev/null +++ b/src/lightShader.cpp @@ -0,0 +1,122 @@ +#include +#include +#include +#include + +#include "lightShader.hpp" + +LightShader::LightShader( + const char* filepathFragmentShader): + + + m_program(glimac::loadProgram("./shaders/3d.vs.glsl", + filepathFragmentShader)), + m_filepathFragmentShader(filepathFragmentShader), + m_modelviewMatrix(glm::mat4(1.0f)), + m_uniformModelViewMatrix(glGetUniformLocation(m_program.getGLId(),uniformMVName)), + m_uniformNormalMatrix(glGetUniformLocation(m_program.getGLId(),uniformNormName)), + m_uniformModelViewProjectionMatrix(glGetUniformLocation(m_program.getGLId(),uniformMVPName)), + m_uniformColor(glGetUniformLocation(m_program.getGLId(),"uColor")), + m_uniformKd(glGetUniformLocation(m_program.getGLId(),"uKd")), + m_uniformKs(glGetUniformLocation(m_program.getGLId(),"uKs")), + m_uniformShininess(glGetUniformLocation(m_program.getGLId(),"uShininess")), + m_uniformLightDir_vs(glGetUniformLocation(m_program.getGLId(),"uLightDir_vs")), + m_uniformLightIntensity(glGetUniformLocation(m_program.getGLId(),"uLightIntensity")) + +{} + +LightShader::LightShader( + + const char* filepathVertexShader, + const char* filepathFragmentShader): + + + m_program(glimac::loadProgram(filepathVertexShader, + filepathFragmentShader)), + m_filepathVertexShader(filepathVertexShader), + m_filepathFragmentShader(filepathFragmentShader), + m_modelviewMatrix(glm::mat4(1.0f)), + m_uniformModelViewMatrix(glGetUniformLocation(m_program.getGLId(),uniformMVName)), + m_uniformNormalMatrix(glGetUniformLocation(m_program.getGLId(),uniformNormName)), + m_uniformModelViewProjectionMatrix(glGetUniformLocation(m_program.getGLId(),uniformMVPName)), + m_uniformColor(glGetUniformLocation(m_program.getGLId(),"uColor")), + m_uniformKd(glGetUniformLocation(m_program.getGLId(),"uKd")), + m_uniformKs(glGetUniformLocation(m_program.getGLId(),"uKs")), + m_uniformShininess(glGetUniformLocation(m_program.getGLId(),"uShininess")), + m_uniformLightDir_vs(glGetUniformLocation(m_program.getGLId(),"uLightDir_vs")), + m_uniformLightIntensity(glGetUniformLocation(m_program.getGLId(),"uLightIntensity")) + + +{} + +void LightShader::use() +{ + m_program.use(); +} + +void LightShader::setViewMatrix(const glm::mat4 &sceneModel, const glm::mat4 &projection) +{ +// m_projectionMatrix = projection; + m_modelviewMatrix = sceneModel; + m_modelprojMatrix = projection; +} + +void LightShader::setUniformMatrix() const +{ + + glm::mat4 projMatrix,MVMatrix,NormalMatrix; + float a = 800.0/600.0; + projMatrix = glm::perspective(glm::radians(70.f),a,0.1f,100.f); + MVMatrix = glm::translate(glm::mat4(1.0),glm::vec3(0.0,0.0,-5.0))*m_modelprojMatrix; + NormalMatrix = glm::transpose(glm::inverse(MVMatrix)); + glm::mat4 rotation(1.0f); + //rotation = glm::rotate(rotation,windowManager.getTime(),glm::vec3(0,1,0)); + glm::vec3 K = glm::vec3(0.2,0.2,0.2); + glm::vec4 _lightDir = rotation*glm::vec4(1,1,1,1)*m_modelprojMatrix; + glm::vec3 lightDir = glm::vec3(_lightDir[0],_lightDir[1],_lightDir[2]); + glm::vec3 lightIntensity = glm::vec3(1,1,1); + //glm::vec4 _lightPos = glm::vec4(1,1,1,1)*camera.getViewMatrix(); + //glm::vec3 LightPos= glm::vec3(_lightPos[0],_lightPos[1],_lightPos[2]); + + glm::mat4 modelViewProjection = projMatrix * MVMatrix* m_modelviewMatrix; + glUniformMatrix4fv(m_uniformModelViewProjectionMatrix,1,GL_FALSE,glm::value_ptr(modelViewProjection)); + glUniformMatrix4fv(m_uniformModelViewMatrix,1,GL_FALSE,glm::value_ptr(MVMatrix)); + glUniformMatrix4fv(m_uniformNormalMatrix,1,GL_FALSE,glm::value_ptr(NormalMatrix)); + glUniform1f(m_uniformShininess,0.5); + glUniform3fv(m_uniformKs,1,glm::value_ptr(K)); + glUniform3fv(m_uniformKd,1,glm::value_ptr(K)); + glUniform3fv(m_uniformLightDir_vs,1,glm::value_ptr(lightDir)); + glUniform3fv(m_uniformLightIntensity,1,glm::value_ptr(lightIntensity)); + //glUniform3fv(uLightPos_vs,1,glm::value_ptr(LightPos)); + +} + +void LightShader::setUniformMatrix2() const +{ + + glm::mat4 projMatrix,MVMatrix,NormalMatrix; + float a = 800.0/600.0; + projMatrix = glm::perspective(glm::radians(70.f),a,0.1f,100.f)* m_modelviewMatrix; + MVMatrix = glm::translate(glm::mat4(1.0),glm::vec3(0.0,0.0,-5.0))*m_modelprojMatrix; + NormalMatrix = glm::transpose(glm::inverse(MVMatrix)); + glm::mat4 rotation(1.0f); + //rotation = glm::rotate(rotation,windowManager.getTime(),glm::vec3(0,1,0)); + glm::vec3 K = glm::vec3(0.5,0.5,0.5); + glm::vec4 _lightDir = rotation*glm::vec4(1,1,1,1)*m_modelprojMatrix; + glm::vec3 lightDir = glm::vec3(_lightDir[0],_lightDir[1],_lightDir[2]); + glm::vec3 lightIntensity = glm::vec3(10,10,10); + //glm::vec4 _lightPos = glm::vec4(1,1,1,1)*camera.getViewMatrix(); + //glm::vec3 LightPos= glm::vec3(_lightPos[0],_lightPos[1],_lightPos[2]); + + glm::mat4 modelViewProjection = projMatrix * MVMatrix* m_modelviewMatrix; + glUniformMatrix4fv(m_uniformModelViewProjectionMatrix,1,GL_FALSE,glm::value_ptr(modelViewProjection)); + glUniformMatrix4fv(m_uniformModelViewMatrix,1,GL_FALSE,glm::value_ptr(MVMatrix)); + glUniformMatrix4fv(m_uniformNormalMatrix,1,GL_FALSE,glm::value_ptr(NormalMatrix)); + glUniform1f(m_uniformShininess,0.5); + glUniform3fv(m_uniformKs,1,glm::value_ptr(K)); + glUniform3fv(m_uniformKd,1,glm::value_ptr(K)); + glUniform3fv(m_uniformLightDir_vs,1,glm::value_ptr(lightDir)); + glUniform3fv(m_uniformLightIntensity,1,glm::value_ptr(lightIntensity)); + //glUniform3fv(uLightPos_vs,1,glm::value_ptr(LightPos)); + +} diff --git a/src/main.cpp b/src/main.cpp index 32cae4c..91700fe 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,10 +1,142 @@ - +#include +#include #include -#include "User.hpp" +#include +#include +#include +#include +#include +#include "TrackballCamera.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include + +#include "AppManager.hpp" + +#include "ExceptIMAC.hpp" +#include "Hero.hpp" +#include "PrintableElement.hpp" +#include "Character.hpp" +#include "End.hpp" +#include "Gap.hpp" +#include "PPM.hpp" +#include "PPMreader.hpp" +#include "Map.hpp" +#include "Wall.hpp" +#include "Coin.hpp" +#include "Element.hpp" +#include "Font.hpp" + +#include +//#include + + +using namespace glimac; + +std::string readFile(const char *filePath) { + std::string content; + std::ifstream fileStream(filePath, std::ios::in); + + if(!fileStream.is_open()) { + std::cerr << "Could not read file " << filePath << ". File does not exist." << std::endl; + return ""; + } + + std::string line = ""; + while(!fileStream.eof()) { + std::getline(fileStream, line); + content.append(line + "\n"); + } + + fileStream.close(); + return content; +} + +GLuint LoadShader(const char *vertex_path, const char *fragment_path) { + GLuint vertShader = glCreateShader(GL_VERTEX_SHADER); + GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER); + + // Read shaders + std::string vertShaderStr = readFile(vertex_path); + std::string fragShaderStr = readFile(fragment_path); + const char *vertShaderSrc = vertShaderStr.c_str(); + const char *fragShaderSrc = fragShaderStr.c_str(); + + GLint result = GL_FALSE; + int logLength; + + + // Compile vertex shader + std::cout << "Compiling vertex shader." << std::endl; + glShaderSource(vertShader, 1, &vertShaderSrc, NULL); + glCompileShader(vertShader); + + // Check vertex shader + glGetShaderiv(vertShader, GL_COMPILE_STATUS, &result); + glGetShaderiv(vertShader, GL_INFO_LOG_LENGTH, &logLength); + std::vector vertShaderError((logLength > 1) ? logLength : 1); + glGetShaderInfoLog(vertShader, logLength, NULL, &vertShaderError[0]); + std::cout << &vertShaderError[0] << std::endl; + + // Compile fragment shader + std::cout << "Compiling fragment shader." << std::endl; + glShaderSource(fragShader, 1, &fragShaderSrc, NULL); + glCompileShader(fragShader); + + // Check fragment shader + glGetShaderiv(fragShader, GL_COMPILE_STATUS, &result); + glGetShaderiv(fragShader, GL_INFO_LOG_LENGTH, &logLength); + std::vector fragShaderError((logLength > 1) ? logLength : 1); + glGetShaderInfoLog(fragShader, logLength, NULL, &fragShaderError[0]); + std::cout << &fragShaderError[0] << std::endl; + + std::cout << "Linking program" << std::endl; + GLuint program = glCreateProgram(); + glAttachShader(program, vertShader); + glAttachShader(program, fragShader); + + glBindAttribLocation(program, 3, "aVertexPosition"); + glBindAttribLocation(program, 8, "aVertexColor"); + + glLinkProgram(program); + + glGetProgramiv(program, GL_LINK_STATUS, &result); + glGetProgramiv(program, GL_INFO_LOG_LENGTH, &logLength); + std::vector programError( (logLength > 1) ? logLength : 1 ); + glGetProgramInfoLog(program, logLength, NULL, &programError[0]); + std::cout << &programError[0] << std::endl; + + glDeleteShader(vertShader); + glDeleteShader(fragShader); + + return program; +} +/******************************** +END - IF YOU'RE USING GLSL VERSION 130 +********************************/ + +int main(int argc, char** argv) { + + //motor_game::PPMreader theReader("level_01_ASCII.ppm"); + //motor_game::PPM ppmCool=theReader.readFile(); + + //ppmCool.map().translateMap(-5,-5); +// ppmCool.map().rotateRight(); + + //ppmCool.map().rotateLeft(); +// ppmCool.map().printElement(); + //std::cout<getType()< + + + +Character::Character() + :PrintableElement(glm::vec3(0), "Character"), m_speed(0) +{} + +Character::Character(const glm::vec3 &position, const float &speed, const std::string &type) +:PrintableElement(position, type), m_speed(speed) +{} + +Character::~Character() +{} + +void Character::printElement() const +{ + PrintableElement::printElement(); + std::cout << "Speed : " << m_speed << std::endl; +} + +void Character::run() +{ + //std::cout << m_type << " ran." << std::endl; + m_position.z += m_speed; +} + +void Character::run(const int &axe) +{ + + if (axe == 0) + { + m_position.x += m_speed; + } + if (axe == 1) + { + std::cout<<"ON NE PEUT PAS COURIR AU PLAFOND"<getX()- b.getX()) < 1) + if(abs(this->getY()- b.getY()) < 2) /// \our character's heighth is two + if(abs((this->getZ())- b.getZ()) < 1) + return true; + return false; + +} + + +// gauche/droite : x, haut : y, profondeur : z diff --git a/src/motor_game/Coin.cpp b/src/motor_game/Coin.cpp new file mode 100644 index 0000000..cf1e039 --- /dev/null +++ b/src/motor_game/Coin.cpp @@ -0,0 +1,27 @@ +#include "../../include/motor_game/Coin.hpp" +#include +#include + +Coin::Coin() + :Element(glm::vec3(0), "Coin"), m_value(0) +{} + +Coin::Coin(const glm::vec3 &position, const unsigned int &value, const std::string &type) +:Element(position, type), m_value(value) +{} + +Coin::~Coin() +{} + +void Coin::collide(Hero &hero){ +// hero.setScore(this->getValue()); + std::cout << "\nTEST COLLIDE DE MON SUPER COIIIIIIN HELLO " << std::endl; + // delete coin ????? +} + +void Coin::printElement() const +{ + std::cout << "\nCOIN INFORMATION :" << std::endl; + PrintableElement::printElement(); + std::cout << "Value : " << m_value << std::endl; +} diff --git a/src/motor_game/Element.cpp b/src/motor_game/Element.cpp new file mode 100644 index 0000000..8781962 --- /dev/null +++ b/src/motor_game/Element.cpp @@ -0,0 +1,24 @@ +#include "Element.hpp" +#include + +Element::Element() + :PrintableElement() +{} + +Element::Element(const glm::vec3 &position, const std::string &type) +:PrintableElement(position, type) +{} + + +Element::~Element() +{} + +void Element::printElement() const { + std::cout << "\nELEMENT INFORMATION :" << std::endl; + PrintableElement::printElement(); + +} + +void Element::collide(Hero &hero){ + std::cout << "\nTEST COLLIDE HELLO element :(" << std::endl; +} diff --git a/src/motor_game/End.cpp b/src/motor_game/End.cpp new file mode 100644 index 0000000..b6e8613 --- /dev/null +++ b/src/motor_game/End.cpp @@ -0,0 +1,15 @@ +#include "End.hpp" + +namespace motor_game{ + + void End::collide(Hero &hero){ + std::cout << "Fin du niveau atteinte" << std::endl; + } + + void End::printElement() const{ + std::cout << "\nEND INFORMATION :" << std::endl; + PrintableElement::printElement(); + + } + +} diff --git a/src/motor_game/Enemy.cpp b/src/motor_game/Enemy.cpp new file mode 100644 index 0000000..3d4b0df --- /dev/null +++ b/src/motor_game/Enemy.cpp @@ -0,0 +1,21 @@ +#include "../../include/motor_game/Enemy.hpp" +#include +#include + +Enemy::Enemy() + :Character(glm::vec3(0), 0, "Enemy") +{} + +Enemy::Enemy(const glm::vec3 &position, const float &speed, const std::string &type) +:Character(position, speed, type) +{} + +Enemy::~Enemy() +{} + +void Enemy::printElement() const { + std::cout << "\nENEMY INFORMATION :" << std::endl; + Character::printElement(); +} + +void Enemy::killHero(){} diff --git a/src/motor_game/Floor.cpp b/src/motor_game/Floor.cpp new file mode 100644 index 0000000..1e38544 --- /dev/null +++ b/src/motor_game/Floor.cpp @@ -0,0 +1,23 @@ +#include "../../include/motor_game/Floor.hpp" +#include +#include + +Floor::Floor() + :Element(glm::vec3(0), "Floor") +{} + +Floor::Floor(const glm::vec3 &position, const std::string &type) +:Element(position, type) +{} + +Floor::~Floor() +{} + +void Floor::printElement() const +{ + std::cout << "\nFLOOR INFORMATION :" << std::endl; + PrintableElement::printElement(); +} + + + diff --git a/src/motor_game/Gap.cpp b/src/motor_game/Gap.cpp new file mode 100644 index 0000000..cc66834 --- /dev/null +++ b/src/motor_game/Gap.cpp @@ -0,0 +1,21 @@ +#include "../../include/motor_game/Gap.hpp" + +namespace motor_game{ + + Gap::Gap() + :Element(glm::vec3(0), "Gap") + {} + Gap::Gap(const glm::vec3 &position = glm::vec3(0), const std::string &type) + :Element(position, type) + {} + + void Gap::collide(Hero &hero) { + std::cout << "Game over : vous etes tombé dans un TROU :o" << std::endl; + } + + void Gap::printElement() const{ + std::cout << "\nGAP INFORMATION :" << std::endl; + PrintableElement::printElement(); + } + +} diff --git a/src/motor_game/Hero.cpp b/src/motor_game/Hero.cpp new file mode 100644 index 0000000..dd818dd --- /dev/null +++ b/src/motor_game/Hero.cpp @@ -0,0 +1,235 @@ +#include "../../include/motor_game/Hero.hpp" +#include + +Hero::Hero() + :Character(glm::vec3(0), 0, "Hero"), m_score(0) +{} + +Hero::Hero(const glm::vec3 &position, const float &speed, const std::string &type) +:Character(position, speed, type), m_score(0) +{} + +Hero::~Hero() +{} + +void Hero::printElement() const +{ + std::cout << "\nHERO INFORMATION :" << std::endl; + Character::printElement(); + std::cout << "Score :" << getScore() << std::endl; +} + +bool Hero::checkCollision(const PrintableElement &b) +{ + if(abs(this->getX()- b.getX()) < 1) + if(abs(this->getY()- b.getY()) < 2) /// \our character's heighth is two + if(abs((this->getZ())- b.getZ()) < 1) + return true; + return false; + +} + +/*bool Hero::scanArray(Element* (*list)[50][50], const char &movement) { + + + int x=this->getX(); + int y=this->getY(); + int z=(this->getZ()+1); + Element* tmpElt; + Element* tmpElt2; // second obj to test when the hero jumps (from above) + Hero tmpChar = *this; + + switch(movement) { + + case 'q' : + x-=1; + tmpElt = list[x][y][z]; + if(tmpElt != NULL) { + if(abs((this->getX()-1) - tmpElt->getX()) < 1) { + if(abs(this->getY()- tmpElt->getY()) < 2) + { + if(abs((this->getZ()+1)- tmpElt->getZ()) < 1) + { + std::cout << "HALLELUJAH LEFT" << std::endl; + //list[x][y][z]->collision(tmpChar); + return true; + } + } + } + } + tmpElt2 = list[x][y+1][z]; + if(tmpElt2 != NULL) { + if(abs((this->getX()-1) - tmpElt2->getX()) < 1) { + if(abs(this->getY()- tmpElt2->getY()) < 2) + { + if(abs((this->getZ()+1)- tmpElt2->getZ()) < 1) + { + std::cout << "COLLIDE LEFT" << std::endl; + list[x][y+1][z]->collision(tmpChar); + return true; + } + } + } + } + std::cout << "Can move" << std::endl; + return false; + break; + + case 'd' : + x+=1; + tmpElt = list[x][y][z]; + if(tmpElt != NULL) { + if(abs((this->getX()+1) - tmpElt->getX()) < 1) { + if(abs(this->getY()- tmpElt->getY()) < 2) + { + if(abs((this->getZ()+1)- tmpElt->getZ()) < 1) + { + std::cout << "HALLELUJAH BELOW" << std::endl; + list[x][y][z]->collision(tmpChar); + return true; + } + } + } + } + tmpElt2 = list[x][y+1][z]; + if(tmpElt2 != NULL) { + if(abs((this->getX()+1) - tmpElt2->getX()) < 1) { + if(abs(this->getY()- tmpElt2->getY()) < 2) + { + if(abs((this->getZ()+1)- tmpElt2->getZ()) < 1) + { + std::cout << "COLLIDE FROM ABOVE" << std::endl; + list[x][y+1][z]->collision(tmpChar); + return true; + } + } + } + } + std::cout << "Can move" << std::endl; + return false; + break; + + case 'z' : + tmpElt = list[x][y+1][z]; + tmpElt2 = list[x][y+2][z]; + + // check collision from 'below' + if(tmpElt != NULL) { + if(abs((this->getX()) - tmpElt->getX()) < 1) { + if((abs((this->getY()+1) - tmpElt->getY()) < 2))/// \our character's heighth is two + { + if(abs((this->getZ()+1)- tmpElt->getZ()) < 1) + { + std::cout << "Can't jump" << std::endl; + //list[x][y][z]->collision(tmpChar); + return true; + + } + } + } + } + // check ollision from 'above' + if(tmpElt2 != NULL) { + if(abs((this->getX()) - tmpElt2->getX()) < 1) { + if((abs((this->getY()+1) - tmpElt2->getY()) < 2)) + { + if(abs((this->getZ()+1)- tmpElt2->getZ()) < 1) + { + std::cout << "Can't jump" << std::endl; + return true; + + } + } + } + } + + std::cout << "Can jump" << std::endl; + return false; + break; + + case 's' : + tmpElt = list[x][y][z]; + if(tmpElt != NULL) + { + //std::cout << " x : " << tmpElt->getX() << std::endl; + //std::cout << " y : " << tmpElt->getY() << std::endl; + //std::cout << " z : " << tmpElt->getZ() << std::endl; + + //list[x+1][y][z]->collision(tmpChar); + //tmpElt->description(); + /* + if(abs((this->getX()) - tmpElt->getX()) < 1) { + if(abs(this->getY()- tmpElt->getY()) < 2) + { + if(abs((this->getZ()+1)- tmpElt->getZ()) < 1) + { + std::cout << "Can't crawl" << std::endl; + //list[x][y][z]->description(); + //list[x][y][z]->collision(tmpChar); + return true; + } + } + } + + return true; + } + std::cout << "Can crawl" << std::endl; + return false; + break; + + } + return false; + }*/ +/* + +bool Hero::scanArray(Map list, const char &movement) { + + int x=this->getX(); + int y=this->getY(); + int z=(this->getZ()+1); + Element* tmpElt; + Element* tmpElt2; // second obj to test when the hero jumps (from above) + Hero tmpChar = *this; + + switch(movement) { + + case 'd' : + x+=1; + tmpElt = list(x, y, z); + if(tmpElt != NULL) { + if(abs((this->getX()+1) - tmpElt->getX()) < 1) { + if(abs(this->getY()- tmpElt->getY()) < 2) + { + if(abs((this->getZ()+1)- tmpElt->getZ()) < 1) + { + std::cout << "HALLELUJAH BELOW" << std::endl; + list(x, y, z)->collision(tmpChar); + return true; + } + } + } + } + tmpElt2 = list(x, y+1, z); + if(tmpElt2 != NULL) { + if(abs((this->getX()+1) - tmpElt2->getX()) < 1) { + if(abs(this->getY()- tmpElt2->getY()) < 2) + { + if(abs((this->getZ()+1)- tmpElt2->getZ()) < 1) + { + std::cout << "COLLIDE FROM ABOVE" << std::endl; + list[x][y+1][z]->collision(tmpChar); + return true; + } + } + } + } + std::cout << "Can move" << std::endl; + return false; + break; + + } + return false; + } + + +*/ diff --git a/src/motor_game/MAIN.txt b/src/motor_game/MAIN.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/motor_game/Map.cpp b/src/motor_game/Map.cpp new file mode 100644 index 0000000..df6c732 --- /dev/null +++ b/src/motor_game/Map.cpp @@ -0,0 +1,142 @@ +#include "Map.hpp" + +namespace motor_game{ + + Map::Map(const int &x, const int &y, const int &z) + : m_elements(negative_vector(-(x*y*z),x*y*z)), m_x(x), m_y(y), m_z(z) + {} + + + + + Element *Map::element(const int &x, const int &y, const int &z) const{ + return m_elements[x + m_x*y + (m_x*m_y)*z]; + } + + void Map::eraseElement(const int &x, const int &y, const int &z) + { + m_elements[x + m_x*y + (m_x*m_y)*z] = nullptr; + } + + void Map::printElement() + { + for (int i = m_elements.lower_limit(); igetPosition()<<" "<getType()< vectorTemp(-(m_x*m_y*m_z),(m_x*m_y*m_z)); + glm::mat4 translationMatrix = glm::translate(glm::mat4(1),glm::vec3(-x,0,-z)); + + for (int i = m_elements.lower_limit(); igetPosition(), 1); + m_elements[i]->setPosition(glm::vec3(newPosition)); + + + vectorTemp[m_elements[i]->getX() + m_x*m_elements[i]->getY() + (m_x*m_y)*m_elements[i]->getZ()] = m_elements[i]; + + m_elements[i] = nullptr; + } + } + for (int i = m_elements.lower_limit(); igetPosition(), 1); + m_elements[i]->setPosition(glm::vec3(newPosition)); + } + } + + int i = 0; + while(m_elements[i] == nullptr) + { + i++; + } + + std::cout<getPosition()<getPosition().x) - fabs((round( m_elements[i]->getPosition().x))))>0.0005) + { + if (m_elements[i]->getPosition().x > 0) + { + translateMap((fabs(m_elements[i]->getPosition().x) - fabs((round(m_elements[i]->getPosition().x)))),0); + } + else + { + std::cout<getPosition().x) - fabs((round(m_elements[i]->getPosition().x)))<getPosition().x) - fabs((round(m_elements[i]->getPosition().x)))),0); + } + } + + + } + + void Map::rotateLeft() + { + + float m_angle = 90; + glm::mat4 rotationMatrix = glm::rotate(glm::mat4(1),glm::radians(m_angle),glm::vec3(0,1,0)); + for (int i = m_elements.lower_limit(); igetPosition(), 1); + m_elements[i]->setPosition(glm::vec3(newPosition)); + + } + } + + int i = 0; + while(m_elements[i] == nullptr) + { + i++; + } + + std::cout<getPosition()<getPosition().x) - fabs((round( m_elements[i]->getPosition().x))))>0.0005) + { + if (m_elements[i]->getPosition().x > 0) + { + translateMap((fabs(m_elements[i]->getPosition().x) - fabs((round(m_elements[i]->getPosition().x)))),0); + } + else + { + std::cout<getPosition().x) - fabs((round(m_elements[i]->getPosition().x)))<getPosition().x) - fabs((round(m_elements[i]->getPosition().x)))),0); + } + } + } + + void Map::element( + const int &x, const int &y, const int &z, + Element *element + ){ + m_elements[x + m_x*y + (m_x*m_y)*z] = element; + } +} diff --git a/src/motor_game/Obstacle.cpp b/src/motor_game/Obstacle.cpp new file mode 100644 index 0000000..138806c --- /dev/null +++ b/src/motor_game/Obstacle.cpp @@ -0,0 +1,29 @@ +#include "../../include/motor_game/Obstacle.hpp" +#include +#include + +Obstacle::Obstacle() + :Element(glm::vec3(0), "Ostacle") +{} + +Obstacle::Obstacle(const glm::vec3 &position, const std::string &type) +:Element(position, type) +{} + +Obstacle::~Obstacle() +{} + +void Obstacle::printElement() const +{ + std::cout << "\nOBSTACLE INFORMATION :" << std::endl; + PrintableElement::printElement(); +} + +void Obstacle::collide(Hero &hero){ + std::cout << "Can't walk through obstacle, you're DEAD" << std::endl; +} + + + + + diff --git a/src/motor_game/PPM.cpp b/src/motor_game/PPM.cpp new file mode 100644 index 0000000..adf5616 --- /dev/null +++ b/src/motor_game/PPM.cpp @@ -0,0 +1,111 @@ +/*#include "motor_game/PPM.hpp" +#include "exception/ExceptIMAC.hpp" +#include "motor_game/Floor.hpp" +#include + +namespace motor_game{ + /* + PPMreader::PPMreader(const std::string &filename) + { + //open the file + std::ifstream m_ppm_1("elt/ppm/" + filename.c_str(), ios::in); + std::abort(m_ppm_1.is_open()); + } + + const std::string PPM::nextString() const{ + std::string readElt << m_ppm_1; + bool loop=1; + while(loop){ + readElt << m_ppm_1; + if(readElt.c_str[0] == '#') ppm_1.ignore('\n'); + else loop=0; + } + } + + PPM &PPMreader::readFile(){ + PPM ppm; + if(m_ppm_1.nextString() != "P3"){ + THROW_EXCEPTION("The ppm file is not valid"); + return ppm; + } + + // map's dimensions + if(m_ppm_1.eof() == true){ + THROW_EXCEPTION("The ppm file is not valid"); + return ppm; + } + else ppm.x()=std::stoul(m_currentStr); + + if(m_ppm_1.eof() == true){ + THROW_EXCEPTION("The ppm file is not valid"); + return ppm; + } + else ppm.z()=std::stoul(m_currentStr); + + // the ppm file is supposed valid + + // read colors, and create elements + for(unsigned int x=0; x + + +PrintableElement::PrintableElement() + :m_position(glm::vec3(0)), m_type("Unknown") +{} + +PrintableElement::PrintableElement(const glm::vec3 &position, const std::string &type) +:m_position(position), m_type(type) +{} + +PrintableElement::~PrintableElement() +{} + +void PrintableElement::printElement() const + { + std::cout << "Position : " << getPosition() <> m_maxSize; + std::string currentName; + long currentValue; + for(size_t i=0; i> currentValue >> currentName; + std::cout << "Hello " << std::endl; + m_scores.insert(std::pair(currentValue, currentName)); + m_size ++; + } + inStream.close(); + } + else //THROW_EXCEPTION("Fails to open " + filename); + std::cout << "Fails to open " << filename << std::endl; + } + + Scores::Scores(const size_t &maxSize) + : m_maxSize(maxSize) + {} + + void Scores::add(const std::pair &score){ + std::multimap>::const_iterator it; + for(it=m_scores.begin(); it!=m_scores.end() ; it++){ + if(it->second == score.second){ + if(score.first > it->first){ + m_scores.insert(score); + m_scores.erase(it); + } + return; + } + } + // the user has no entry + m_scores.insert(score); + m_size++; + if(m_maxSize < m_size) + m_scores.erase(--m_scores.end()); + } + + void Scores::clear(){ + m_scores.clear(); + } + + const std::multimap> &Scores::multimap() const{ + return m_scores; + } + + // can throw an exception + void Scores::save(const std::string &filename){ + // open the file + std::ofstream writeStream = std::ofstream("elt/" + filename, std::ios::out); + if(writeStream.is_open()==false) + //THROW_EXCEPTION("Fails to open " + filename); + std::cout << "Fails to open " << filename << std::endl; + writeStream << m_maxSize; + std::multimap>::const_iterator it; + for(it=m_scores.begin(); it!=m_scores.end(); it++) + writeStream << it->first << " " << it->second << "\n"; + + // close filestream + writeStream.close(); + } +} diff --git a/src/motor_game/Turn.cpp b/src/motor_game/Turn.cpp new file mode 100644 index 0000000..04dc225 --- /dev/null +++ b/src/motor_game/Turn.cpp @@ -0,0 +1,22 @@ +#include "Turn.hpp" + +namespace motor_game{ + + Turn::Turn(const glm::vec3 &position, const std::string &type) + : Floor(position, type) {} + + void Turn::printElement() const{ + std::cout << "\nFLOOR INFORMATION : it's a " << m_type << " turn" << std::endl; + PrintableElement::printElement(); + } + + void Turn::collide(Hero *hero) const{ + // modifie la caméra + // modifie l'axe d'avancée du personnage + if(m_type=="left") + std::cout << "The Hero turns left !" << std::endl; + else if(m_type=="right") + std::cout << "The Hero turns right !" << std::endl; + else assert(false); + } +} diff --git a/src/motor_game/User.cpp b/src/motor_game/User.cpp index f019923..172f4ea 100644 --- a/src/motor_game/User.cpp +++ b/src/motor_game/User.cpp @@ -1,4 +1,13 @@ #include "User.hpp" +User::User() + :m_name("Unknown") +{} + +User::User(std::string &inName) + :m_name(inName) +{} + User::~User() {} + diff --git a/src/motor_game/Wall.cpp b/src/motor_game/Wall.cpp new file mode 100644 index 0000000..46acef0 --- /dev/null +++ b/src/motor_game/Wall.cpp @@ -0,0 +1,27 @@ +#include "../../include/motor_game/Wall.hpp" +#include +#include + +Wall::Wall() + :Element(glm::vec3(0), "Wall") +{} + +Wall::Wall(const glm::vec3 &position, const std::string &type) +:Element(position, type) +{} + + +Wall::~Wall() +{} + +void Wall::printElement() const +{ + std::cout << "\nWALL INFORMATION :" << std::endl; + PrintableElement::printElement(); +} + +void Wall::collide(Hero &hero) { + std::cout << "Can't walk through walls" << std::endl; +} + +