Aller à la documentation de ce fichier.00001 #include <iostream>
00002 #include "cce/ImageManager.hpp"
00003 #include "cce/Tile.hpp"
00004
00005 namespace cce {
00006
00007 const float Tile::hauteurSurLargeur = (float) Tile::hauteurTile / Tile::largeurTile;
00008
00009 Tile::Tile() : Sprite()
00010 {
00011 }
00012
00013 void Tile::init(int _id, int x, int y)
00014 {
00015 setImage(_id);
00016 calculCoordonnes(x,y);
00017 }
00018
00019
00020 Tile::~Tile(void)
00021 {
00022
00023 }
00024
00025 int Tile::getID() const
00026 {
00027 return id;
00028 }
00029
00030 void Tile::setImage(const int _id)
00031 {
00032 id=_id;
00033 SetTexture(ImageManager::getInstance()->get_asset(id));
00034 }
00035
00036 void Tile::unsetImage()
00037 {
00038 id= -1;
00039
00040 }
00041
00042 void Tile::calculCoordonnes(const int x, const int y)
00043 {
00044
00045 int xOnScreen, yOnScreen;
00046 int ligne = y/2;
00047
00048 xOnScreen = x*largeurTile;
00049 yOnScreen = ligne*hauteurTile;
00050
00051
00052 decalage_hauteur_image = (GetTexture()->GetHeight() - hauteurTile);
00053 yOnScreen -= decalage_hauteur_image;
00054
00055
00056 if (y % 2 ==0)
00057 SetPosition(xOnScreen, yOnScreen);
00058 else {
00059
00060 xOnScreen += demiLargeurTile;
00061 yOnScreen += demiHauteurTile;
00062
00063 SetPosition(xOnScreen, yOnScreen);
00064 }
00065
00066
00067 #ifndef NDEBUG
00068
00069
00070 #endif
00071
00072 }
00073
00074 bool Tile::contientPoint(const unsigned int x_vue, const unsigned int y_vue ) const
00075 {
00076 unsigned int x0 = GetPosition().x;
00077 unsigned int y0 = GetPosition().y + decalage_hauteur_image;
00078
00079
00080 if (x_vue < x0 || x_vue > x0 + largeurTile || y_vue < y0 || y_vue > y0 + hauteurTile)
00081 return false;
00082 else
00083 if (y_vue <= y0 + demiHauteurTile )
00084 if (x_vue <= x0 + demiLargeurTile )
00085
00086 return ((y0 + demiHauteurTile) - y_vue) <= (float)(hauteurSurLargeur*(x_vue-x0));
00087 else
00088
00089 return (int)(y0 - y_vue) <= - (float)( hauteurSurLargeur*(x_vue - x0 -demiLargeurTile) ) ;
00090 else
00091 if (x_vue <= x0 + demiLargeurTile )
00092
00093 return ((int)(y0 + demiHauteurTile - y_vue)) >= (- (float)(hauteurSurLargeur * (x_vue-x0)) );
00094 else
00095
00096 return (y0 + hauteurTile - y_vue) >= (float)(hauteurSurLargeur *(x_vue-demiLargeurTile-x0));
00097
00098
00099
00100
00101
00102 }
00103
00104 }