#include "Engine/VideoUpdate.h"\r
#include "SchemeReader.h"\r
\r
-#if WIN32\r
-LPD3DXSPRITE d3dspt;\r
-LPD3DXFONT font;\r
-\r
-#endif\r
-\r
-Playground::Playground(CKernel* kernel) {\r
- this->kernel = kernel;\r
-}\r
+Playground::Playground(CKernel* kernel) : ITask(kernel) { }\r
\r
bool Playground::Start()\r
{\r
- #if WIN32\r
- background = NULL;\r
- foreground = NULL;\r
- font = NULL;\r
- HRESULT res;\r
-\r
- D3DXCreateSprite(d3ddev, &d3dspt); // create the Direct3D Sprite object\r
- res = D3DXCreateFont(d3ddev, 15, 10, 0, 1, false, 0, OUT_TT_ONLY_PRECIS, 0, 0, L"times new roman", &font);\r
- if (res != S_OK)\r
- {\r
- switch (res)\r
- {\r
- case D3DERR_INVALIDCALL:\r
- foreground = NULL;\r
- break;\r
- case D3DXERR_INVALIDDATA:\r
- foreground = NULL;\r
- break;\r
- case E_OUTOFMEMORY:\r
- foreground = NULL;\r
- break;\r
- default:\r
- foreground = NULL;\r
- }\r
- }\r
-\r
- res = D3DXCreateTextureFromFile(d3ddev, L"data/field0.png", &background);\r
- //res = D3DXCreateTextureFromFile(d3ddev, L"data/tiles0.png", &foreground);\r
- res = D3DXCreateTextureFromFileEx(d3ddev, L"data/tiles0.png", D3DX_DEFAULT, D3DX_DEFAULT, 1, 0, D3DFMT_UNKNOWN,\r
- D3DPOOL_DEFAULT ,D3DX_DEFAULT, D3DX_DEFAULT, D3DCOLOR_ARGB(0, 248, 0, 248), NULL, NULL, &foreground);\r
- if (res != D3D_OK)\r
- {\r
- switch (res)\r
- {\r
- case D3DERR_NOTAVAILABLE:\r
- foreground = NULL;\r
- break;\r
- case D3DERR_OUTOFVIDEOMEMORY:\r
- foreground = NULL;\r
- break;\r
- case D3DERR_INVALIDCALL:\r
- foreground = NULL;\r
- break;\r
- case D3DXERR_INVALIDDATA:\r
- foreground = NULL;\r
- break;\r
- case E_OUTOFMEMORY:\r
- foreground = NULL;\r
- break;\r
- default:\r
- foreground = NULL;\r
- }\r
- }\r
-\r
- #endif\r
// init playing field\r
SchemeReader *scheme = new SchemeReader("Data/schemes/BASIC.SCH");\r
- for (int i=0; i<PLAYGROUND_COLS; ++i) \r
- {\r
- for (int j=0; j<PLAYGROUND_ROWS; ++j)\r
- {\r
- field[i][j] = NULL;\r
- }\r
- }\r
\r
+ CMMPointer<Sprite> tile_sprite = this->getKernel()->getSpriteManager()->getSprite(SPR_TILE);\r
// put in non-destructible blocks\r
- for (int i=0; i<PLAYGROUND_COLS; i++) \r
- for (int j=0; j<PLAYGROUND_ROWS; j++)\r
- switch(scheme->PlayField[j*PLAYGROUND_NUMFIELD_X+i]) {\r
+ for (int col=0; col<PLAYGROUND_COLS; col++) \r
+ {\r
+ for (int row=0; row<PLAYGROUND_ROWS; row++)\r
+ {\r
+ int subsprite = -1;\r
+ switch(scheme->PlayField[row*PLAYGROUND_NUMFIELD_X+col]) {\r
case BRICK:\r
- //field[i][j] = new Item(foreground, 0, FIELD_UNIT_WIDTH, FIELD_UNIT_HEIGHT, i, j);\r
+ subsprite = SPR_SUB_BRICK;\r
break;\r
case SOLID:\r
- #ifdef WIN32\r
- field[i][j] = new Item(foreground, 1, FIELD_UNIT_WIDTH, FIELD_UNIT_HEIGHT, i, j);\r
- #endif // WIN32\r
+ subsprite = SPR_SUB_SOLID;\r
break;\r
}\r
+ if (subsprite != -1)\r
+ field[col][row] = new Tile(tile_sprite, subsprite, col, row);\r
+ else\r
+ field[col][row] = NULL;\r
+ }\r
+ }\r
/*\r
// put in desctructible blocks with chance 90%\r
for (int i=0; i<PLAYGROUND_COLS; i+=2) \r
for (int j=0; j<PLAYGROUND_ROWS; ++j)\r
- if ((double)rand()/RAND_MAX <= 0.9) field[i][j] = new Item(foreground, 0, i, j);\r
+ if ((double)rand()/RAND_MAX <= 0.9) field[i][j] = new Tile(foreground, 0, i, j);\r
for (int i=1; i<PLAYGROUND_COLS; i+=2) \r
for (int j=0; j<PLAYGROUND_ROWS; j+=2)\r
- if ((double)rand()/RAND_MAX <= 0.9) field[i][j] = new Item(foreground, 0, i, j);\r
+ if ((double)rand()/RAND_MAX <= 0.9) field[i][j] = new Tile(foreground, 0, i, j);\r
*/ \r
// put in a player\r
- bomberman = new Bomberman(20, 66);\r
+ CMMPointer<Sprite> player_sprite = this->getKernel()->getSpriteManager()->getSprite(SPR_PLAYER);\r
+ bomberman = new Bomberman(player_sprite, 20, 66);\r
if (field[0][0] != NULL)\r
{\r
delete field[0][0];\r
\r
void Playground::Update()\r
{\r
- CMMPointer<Sprite> s = this->kernel->getSpriteManager()->getSprite(SPR_FIELD);\r
+ CMMPointer<Sprite> s = this->getKernel()->getSpriteManager()->getSprite(SPR_FIELD);\r
\r
- s->blit(0, 0, 1.0, 1.0, 0, 0, COLOUR_RGBA(0, 0, 255, 255));\r
- #ifdef WIN32\r
- if(CInputTask::keyDown(DIK_ESCAPE))CKernel::GetSingleton().KillAllTasks();\r
-\r
- d3dspt->Begin(NULL); // begin sprite drawing\r
-\r
- // draw the sprite\r
- D3DXVECTOR3 center(0.0f, 0.0f, 0.0f); // center at the upper-left corner\r
- D3DXVECTOR3 position(0.0f, 0.0f, 0.0f); // position at 50, 50 with no depth\r
- d3dspt->Draw(background, NULL, NULL, NULL, D3DCOLOR_XRGB(255, 255, 255));\r
-\r
+ s->blit(0, 0, 1.0, 1.0, 0, 0, COLOUR_RGBA(255, 255, 255, 255));\r
for (int i=0; i<PLAYGROUND_COLS; ++i) \r
{\r
for (int j=0; j<PLAYGROUND_ROWS; ++j)\r
}\r
\r
bomberman->Update();\r
- if (CInputTask::keyDown(DIK_RIGHT)) this->move_right();\r
- if (CInputTask::keyDown(DIK_LEFT)) this->move_left();\r
- if (CInputTask::keyDown(DIK_UP)) this->move_up();\r
- if (CInputTask::keyDown(DIK_DOWN)) this->move_down();\r
+ if (CInputTask::keyDown(SDLK_RIGHT)) this->move_right();\r
+ if (CInputTask::keyDown(SDLK_LEFT)) this->move_left();\r
+ if (CInputTask::keyDown(SDLK_UP)) this->move_up();\r
+ if (CInputTask::keyDown(SDLK_DOWN)) this->move_down();\r
\r
\r
+ #ifdef WIN32\r
d3dspt->End(); // end sprite drawing\r
\r
// do fps thingie\r
if (field[i][j] != NULL) delete field[i][j];\r
\r
if (bomberman != NULL) delete bomberman;\r
- #ifdef WIN32\r
- if (background != NULL) background->Release();\r
- if (foreground != NULL) foreground->Release();\r
- if (d3dspt != NULL) d3dspt->Release();\r
- if (font != NULL) font->Release();\r
- #endif // WIN32\r
}\r
\r
void Playground::move_down()\r
// Bomberman class\r
// =============================================\r
\r
-Bomberman::Bomberman(int xloc, int yloc)\r
+Bomberman::Bomberman(const CMMPointer<Sprite> &sprite, int xloc, int yloc)\r
{\r
- #ifdef WIN32\r
- HRESULT res = D3DXCreateTextureFromFile(d3ddev, L"data/powkick.png", &texture);\r
- if (res != D3D_OK) texture = NULL;\r
- #endif // WIN32\r
- x = xloc;\r
- y = yloc;\r
+ this->sprite = sprite;\r
+ this->x = xloc;\r
+ this->y = yloc;\r
}\r
\r
Bomberman::~Bomberman()\r
{\r
- #ifdef WIN32\r
- if (texture != NULL) texture->Release();\r
- #endif // WIN32\r
}\r
\r
void Bomberman::Update()\r
{\r
- #ifdef WIN32\r
- D3DXVECTOR3 center(0.0f, 0.0f, 0.0f); // center at the upper-left corner\r
- D3DXVECTOR3 position((FLOAT)x, (FLOAT)y, 0.0f); // position at 50, 50 with no depth\r
- RECT rect = {0,0,40,36};\r
- d3dspt->Draw(texture, &rect, ¢er, &position, D3DCOLOR_XRGB(255,255,255));\r
- #endif // WIN32\r
+ this->sprite->blit(\r
+ this->x,\r
+ this->y,\r
+ 1.0, 1.0, 0, 0, COLOUR_RGBA(255, 255, 255, 255)\r
+ );\r
}\r
\r
void Bomberman::move(int xloc, int yloc)\r
}\r
\r
// =============================================\r
-// Item class\r
+// Tile class\r
// =============================================\r
\r
-#ifdef WIN32\r
-Item:: Item(LPDIRECT3DTEXTURE9 t, int texnr, int subwidth, int subheight, int colnr, int rownr)\r
+Tile::Tile(const CMMPointer<Sprite> &sprite, int subsprite, int col, int row)\r
{\r
- texture = t;\r
- col = colnr;\r
- row = rownr;\r
- tex_num = texnr;\r
- subitem_height = subheight;\r
- subitem_width = subwidth;\r
+ this->sprite = sprite;\r
+ this->col = col;\r
+ this->row = row;\r
+ this->subsprite = subsprite;\r
}\r
-#endif // WIN32\r
\r
-Item::~Item()\r
+Tile::~Tile()\r
{\r
}\r
-\r
-#ifdef WIN32\r
-void Item::Draw()\r
+void Tile::Draw()\r
{\r
- D3DXVECTOR3 center(0.0f, 0.0f, 0.0f); // center at the upper-left corner\r
- D3DXVECTOR3 position((FLOAT)PLAYGROUND_BORDER_LEFT+subitem_width*col, (FLOAT)PLAYGROUND_BORDER_TOP+subitem_height*row, 0.0f); // position at 50, 50 with no depth\r
- RECT rect = {tex_num*subitem_width,0,(tex_num+1)*subitem_width,subitem_height};\r
- d3dspt->Draw(texture, &rect, ¢er, &position, D3DCOLOR_ARGB(255, 255,255,255));\r
+ this->sprite->blit(\r
+ PLAYGROUND_BORDER_LEFT + this->col * FIELD_UNIT_WIDTH,\r
+ PLAYGROUND_BORDER_TOP + this->row * FIELD_UNIT_HEIGHT,\r
+ 1.0, 1.0, this->subsprite, 0, COLOUR_RGBA(255, 255, 255, 255)\r
+ );\r
}\r
\r
-#endif // WIN32\r