- removed old unused files
- improved CWindow and CTextBox Classes git-svn-id: https://clonekeenplus.svn.sourceforge.net/svnroot/clonekeenplus/cgenius/trunk@206 4df4b0f3-56ce-47cb-b001-ed939b7d65a6
This commit is contained in:
@@ -9,14 +9,28 @@
|
|||||||
#include "../CGraphics.h"
|
#include "../CGraphics.h"
|
||||||
#include "../StringUtils.h"
|
#include "../StringUtils.h"
|
||||||
|
|
||||||
CTextBox::CTextBox(float x, float y, float w, float h, float font_w, float font_h, const std::string& text) {
|
CTextBox::CTextBox(float x, float y, float w, float h, const std::string& text, bool border_rel) {
|
||||||
m_fontwidth = font_w;
|
m_fontwidth = 0;
|
||||||
m_fontheight = font_h;
|
m_fontheight = 0;
|
||||||
m_x = x;
|
m_x = x;
|
||||||
m_y = y;
|
m_y = y;
|
||||||
m_w = w;
|
m_w = w;
|
||||||
m_h = h;
|
m_h = h;
|
||||||
m_String = text;
|
m_String = text;
|
||||||
|
m_border_relative = border_rel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTextBox::setFontDimensions(float width, float height)
|
||||||
|
{
|
||||||
|
m_fontwidth = width;
|
||||||
|
m_fontheight = (height>0.0f) ? height : width; // 0 it is square
|
||||||
|
if(m_border_relative)
|
||||||
|
{
|
||||||
|
m_x += m_fontwidth;
|
||||||
|
m_y += m_fontheight;
|
||||||
|
m_w -= 2*m_fontwidth;
|
||||||
|
m_h -= 2*m_fontheight;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTextBox::format()
|
void CTextBox::format()
|
||||||
@@ -33,7 +47,7 @@ void CTextBox::format()
|
|||||||
{
|
{
|
||||||
word = GetNextWord(it, m_String);
|
word = GetNextWord(it, m_String);
|
||||||
|
|
||||||
if((oneline.length() + word.length()) > m_w/m_fontwidth)
|
if((oneline.length() + word.length()) > m_w/m_fontwidth) // if the line is full
|
||||||
{
|
{
|
||||||
if(*(oneline.end()-1) == ' ') oneline.erase(oneline.end()-1);
|
if(*(oneline.end()-1) == ' ') oneline.erase(oneline.end()-1);
|
||||||
m_Textline.push_back(oneline);
|
m_Textline.push_back(oneline);
|
||||||
@@ -49,13 +63,18 @@ void CTextBox::format()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CTextBox::getNumberOfTextlines()
|
||||||
|
{
|
||||||
|
return m_Textline.size();
|
||||||
|
}
|
||||||
|
|
||||||
void CTextBox::draw()
|
void CTextBox::draw()
|
||||||
{
|
{
|
||||||
// Draw Routine for the Textbox
|
// Draw Routine for the Textbox
|
||||||
for(unsigned int i=0 ; i<m_Textline.size() ; i++ )
|
for(unsigned int i=0 ; i<m_Textline.size() ; i++ )
|
||||||
{
|
{
|
||||||
g_pGraphics->drawFont(m_Textline[i], m_x, m_y+i*m_fontheight, 0); // 0 is blank colour
|
g_pGraphics->drawFont(m_Textline[i], m_x, m_y+i*m_fontheight, 0); // 0 is blank colour
|
||||||
if( i*m_fontheight>m_h )
|
if( i*m_fontheight > m_h )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,17 +13,22 @@
|
|||||||
|
|
||||||
class CTextBox {
|
class CTextBox {
|
||||||
public:
|
public:
|
||||||
CTextBox(float x, float y, float w, float h, float font_w, float font_h, const std::string& text);
|
CTextBox(float x, float y, float w, float h,
|
||||||
|
const std::string& text, bool border_rel = true);
|
||||||
|
|
||||||
|
void setFontDimensions(float width, float height = 0.0f);
|
||||||
void format();
|
void format();
|
||||||
void draw();
|
void draw();
|
||||||
|
|
||||||
|
int getNumberOfTextlines();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::string m_String;
|
std::string m_String;
|
||||||
std::vector <std::string> m_Textline;
|
std::vector <std::string> m_Textline;
|
||||||
float m_x, m_y, m_w, m_h;
|
float m_x, m_y, m_w, m_h;
|
||||||
float m_fontwidth, m_fontheight;
|
float m_fontwidth, m_fontheight;
|
||||||
|
bool m_border_relative;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CTEXTBOX_H_ */
|
#endif /* CTEXTBOX_H_ */
|
||||||
|
|||||||
@@ -38,30 +38,34 @@ CWindow::~CWindow() {
|
|||||||
///////////////////////
|
///////////////////////
|
||||||
// Creation Routines //
|
// Creation Routines //
|
||||||
///////////////////////
|
///////////////////////
|
||||||
void CWindow::addTextBox(float x, float y, float w, float h, const std::string& text, bool border_rel)
|
void CWindow::addObject(CTextBox* newTextBox)
|
||||||
{
|
{
|
||||||
|
//float x, float y, float w, float h, const std::string& text, bool border_rel;
|
||||||
// Element coordinates are all relative and must go inside the borders if desired!
|
// Element coordinates are all relative and must go inside the borders if desired!
|
||||||
// if false it will be relative to the window itself and can be used as title border
|
// if false it will be relative to the window itself and can be used as title border
|
||||||
if(border_rel)
|
|
||||||
{
|
|
||||||
x *= m_w;
|
|
||||||
x += (m_8x8tilewidth);
|
|
||||||
y *= m_h;
|
|
||||||
y += (m_8x8tileheight);
|
|
||||||
w -= 2*m_8x8tilewidth/(m_w);
|
|
||||||
h -= 2*m_8x8tileheight/(m_h);
|
|
||||||
}
|
|
||||||
|
|
||||||
CTextBox* ptr = new CTextBox(x + m_x,
|
m_TextBox.push_back(newTextBox);
|
||||||
y + m_y,
|
|
||||||
w*(m_w),
|
|
||||||
h*(m_h),
|
|
||||||
m_8x8tilewidth, m_8x8tileheight, text);
|
|
||||||
m_TextBox.push_back(ptr);
|
|
||||||
m_TextBox.back()->format();
|
m_TextBox.back()->format();
|
||||||
m_ID_List.push_back(OBJ_TYPE_TEXT);
|
m_ID_List.push_back(OBJ_TYPE_TEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////
|
||||||
|
// Property Set Routines //
|
||||||
|
///////////////////////////
|
||||||
|
void CWindow::Resize(float width, float height)
|
||||||
|
{
|
||||||
|
m_w = width;
|
||||||
|
m_h = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////
|
||||||
|
// Property Get Routines //
|
||||||
|
///////////////////////////
|
||||||
|
float CWindow::getWidth()
|
||||||
|
{
|
||||||
|
return m_w;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////
|
////////////////////////
|
||||||
// Rendering Routines //
|
// Rendering Routines //
|
||||||
////////////////////////
|
////////////////////////
|
||||||
|
|||||||
@@ -22,10 +22,20 @@ public:
|
|||||||
CWindow(float x, float y, float w, float h);
|
CWindow(float x, float y, float w, float h);
|
||||||
virtual ~CWindow();
|
virtual ~CWindow();
|
||||||
|
|
||||||
void addTextBox(float x, float y, float w, float h, const std::string& text, bool border_rel);
|
// Creation routines
|
||||||
|
void addObject(CTextBox* newTextBox);
|
||||||
|
|
||||||
|
// Property set methods
|
||||||
|
void Resize(float width, float height);
|
||||||
|
|
||||||
|
// Property retrieval methods
|
||||||
|
float getWidth();
|
||||||
|
|
||||||
|
// Drawing routines
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
|
std::vector<CTextBox*> m_TextBox;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float m_x;
|
float m_x;
|
||||||
float m_y;
|
float m_y;
|
||||||
@@ -36,7 +46,6 @@ private:
|
|||||||
float m_8x8tilewidth;
|
float m_8x8tilewidth;
|
||||||
|
|
||||||
std::list<int> m_ID_List;
|
std::list<int> m_ID_List;
|
||||||
std::vector<CTextBox*> m_TextBox;
|
|
||||||
|
|
||||||
void drawWindow();
|
void drawWindow();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ void CTileLoader::assignChangeTileAttribute(stTile *tile)
|
|||||||
// At any other case, than the special ones, the tile is always 143 for pickuppable items
|
// At any other case, than the special ones, the tile is always 143 for pickuppable items
|
||||||
// 17 is tile for an exit. Until row 19, this seems to be valid
|
// 17 is tile for an exit. Until row 19, this seems to be valid
|
||||||
for(int i=0 ; i<numtiles ; i++)
|
for(int i=0 ; i<numtiles ; i++)
|
||||||
if(canbePickedup(i) )
|
if(canbePickedup(i) || isaDoor(i) )
|
||||||
tile[i].chgtile = 143;
|
tile[i].chgtile = 143;
|
||||||
|
|
||||||
switch(m_episode)
|
switch(m_episode)
|
||||||
@@ -201,8 +201,7 @@ void CTileLoader::assignChangeTileAttribute(stTile *tile)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Only for Doors! Tile is always 182
|
// Only for Doors! Tile is always 182
|
||||||
if(TileProperty[i][BEHAVIOR] >= 2 &&
|
if(isaDoor(i))
|
||||||
TileProperty[i][BEHAVIOR] <= 5)
|
|
||||||
tile[i].chgtile = 182;
|
tile[i].chgtile = 182;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,3 +218,8 @@ bool CTileLoader::canbePickedup(int tile)
|
|||||||
TileProperty[tile][BEHAVIOR] == 27 ||
|
TileProperty[tile][BEHAVIOR] == 27 ||
|
||||||
TileProperty[tile][BEHAVIOR] == 28);
|
TileProperty[tile][BEHAVIOR] == 28);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CTileLoader::isaDoor(int tile)
|
||||||
|
{
|
||||||
|
return (TileProperty[tile][BEHAVIOR] >= 2 && TileProperty[tile][BEHAVIOR] <= 5);
|
||||||
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ private:
|
|||||||
void assignChangeTileAttribute(stTile *tile);
|
void assignChangeTileAttribute(stTile *tile);
|
||||||
bool setProperOffset();
|
bool setProperOffset();
|
||||||
bool canbePickedup(int tile);
|
bool canbePickedup(int tile);
|
||||||
|
bool isaDoor(int tile);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CTILELOADER_H_ */
|
#endif /* CTILELOADER_H_ */
|
||||||
|
|||||||
14
src/misc.cpp
14
src/misc.cpp
@@ -186,9 +186,17 @@ void showGameHint(int mpx, int mpy, int episode, int level)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CWindow *InfoTextWindow = new CWindow(0.2, 0.2, 0.6, 0.6);
|
CTextBox* TextBox;
|
||||||
InfoTextWindow->addTextBox(0.0f, 0.0f, 1.0f, 0.8f, getstring(strname), true);
|
CWindow *InfoTextWindow = new CWindow(0.2f, 0.2f, 0.6f, 0.6f);
|
||||||
InfoTextWindow->addTextBox(0.2f, 0.8f, 1.0f, 0.2f, "Okay!", true);
|
|
||||||
|
TextBox = new CTextBox(0.2f, 0.2f, 0.6f, 0.6f, getstring(strname), true);
|
||||||
|
TextBox->setFontDimensions(8.0f/320.0f, 8.0f/200.0f);
|
||||||
|
InfoTextWindow->addObject(TextBox);
|
||||||
|
|
||||||
|
// The Text will be too big, so resize in knowing the height of the first text.
|
||||||
|
InfoTextWindow->Resize(InfoTextWindow->getWidth(),
|
||||||
|
( (float)(InfoTextWindow->m_TextBox[0]->getNumberOfTextlines()+2)*8.0f ) / 200.0f );
|
||||||
|
|
||||||
g_pInput->flushAll();
|
g_pInput->flushAll();
|
||||||
|
|
||||||
do
|
do
|
||||||
|
|||||||
@@ -1,501 +0,0 @@
|
|||||||
/*
|
|
||||||
* CPlayer.cpp
|
|
||||||
*
|
|
||||||
* Created on: 31.03.2009
|
|
||||||
* Author: gerstrong
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <SDL.h>
|
|
||||||
#include "CPlayer.h"
|
|
||||||
#include "../sdl/CInput.h"
|
|
||||||
|
|
||||||
#include "../keen.h"
|
|
||||||
#include "../funcdefs.h"
|
|
||||||
|
|
||||||
extern int **TileProperty;
|
|
||||||
|
|
||||||
////////////////////////
|
|
||||||
// section of defines //
|
|
||||||
////////////////////////
|
|
||||||
|
|
||||||
#define CSF 5
|
|
||||||
|
|
||||||
// the walking defines
|
|
||||||
#define STANDING_LEFT 0
|
|
||||||
#define STANDING_RIGHT 4
|
|
||||||
|
|
||||||
#define WALK_SPEED 16
|
|
||||||
|
|
||||||
// rate at which player walking animation is shown
|
|
||||||
#define WALKANIMRATE 40+WALK_SPEED
|
|
||||||
|
|
||||||
// friction
|
|
||||||
|
|
||||||
// the various jump states
|
|
||||||
enum jumpstates{
|
|
||||||
NOJUMP, PREPAREJUMP, JUMPUP, JUMPED, PREPAREPOGO,POGOING};
|
|
||||||
|
|
||||||
// Now the frictions we have in the game
|
|
||||||
enum frictiontable
|
|
||||||
{
|
|
||||||
FRIC_GROUND = 10,
|
|
||||||
FRIC_SLIPPERY = 10,
|
|
||||||
FRIC_ICE = 10,
|
|
||||||
FRIC_AIR = 10,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum direction{ LEFT, RIGHT};
|
|
||||||
|
|
||||||
#define MAX_FRICTIONTIME 1000
|
|
||||||
|
|
||||||
#define PFIREFRAME 20 // raygun frame index
|
|
||||||
|
|
||||||
// pogo frames
|
|
||||||
#define PFRAME_POGO 24
|
|
||||||
#define PFRAME_POGOBOUNCE 25
|
|
||||||
|
|
||||||
// frame and animation speed for frozen keen (ep1) and stunned keen (ep2&3)
|
|
||||||
#define PFRAME_FROZEN 28
|
|
||||||
#define PFROZENANIMTIME 100
|
|
||||||
// how long keen should stay frozen when hit by an ice chunk
|
|
||||||
#define PFROZEN_TIME 1000
|
|
||||||
#define PFROZEN_THAW 100
|
|
||||||
|
|
||||||
// when falling keen's Y inertia increases at INCREASERATE up to MAXSPEED
|
|
||||||
#define PFALL_INCREASERATE 3
|
|
||||||
#define PFALL_MAXSPEED 19
|
|
||||||
|
|
||||||
// friction when player is pushed by yorp's, ball's, etc.
|
|
||||||
#define PLAYPUSH_DECREASERATE 1
|
|
||||||
|
|
||||||
#define PDIEFRAME 22
|
|
||||||
|
|
||||||
#define PLAYERHEIGHT 24
|
|
||||||
#define PLAYERWIDTH 12
|
|
||||||
|
|
||||||
/////////////////////////////////////////
|
|
||||||
// Section of functions implementation //
|
|
||||||
/////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
CPlayer::CPlayer() {
|
|
||||||
object = 1; // it is only 1 for the first player
|
|
||||||
|
|
||||||
episode=0; // while no episode is selected. Indeed the program must select one manually
|
|
||||||
|
|
||||||
mp_scrx = NULL;
|
|
||||||
mp_scry = NULL;
|
|
||||||
|
|
||||||
active = false;
|
|
||||||
isGameover = false;
|
|
||||||
isFalling = false;
|
|
||||||
isDying = false;
|
|
||||||
isWalking = false;
|
|
||||||
isPushed = false;
|
|
||||||
cannotWalk = false;
|
|
||||||
cannotfall = false;
|
|
||||||
usePogostick = false;
|
|
||||||
isStanding = true;
|
|
||||||
|
|
||||||
bisBlockedUp = false;
|
|
||||||
bisBlockedDown = false;
|
|
||||||
bisBlockedLeft = false;
|
|
||||||
bisBlockedRight = false;
|
|
||||||
|
|
||||||
walktimer = 0;
|
|
||||||
frictiontimer = 0;
|
|
||||||
|
|
||||||
Jumpmode = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
CPlayer::~CPlayer() {
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long CPlayer::getCoordX(void)
|
|
||||||
{
|
|
||||||
return m_x;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long CPlayer::getCoordY(void)
|
|
||||||
{
|
|
||||||
return m_y;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::setpScrCoord(int *px, int *py)
|
|
||||||
{
|
|
||||||
mp_scrx = px;
|
|
||||||
mp_scry = py;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::setCoord(unsigned long in_x, unsigned long in_y)
|
|
||||||
{
|
|
||||||
m_x = in_x;
|
|
||||||
m_y = in_y;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned short CPlayer::getObject(void)
|
|
||||||
{
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::useObject(unsigned short value)
|
|
||||||
{
|
|
||||||
object = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPlayer::isPlaying(void)
|
|
||||||
{
|
|
||||||
return active;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::enablePlayer(bool value)
|
|
||||||
{
|
|
||||||
active = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::handlePlayer(void)
|
|
||||||
{
|
|
||||||
/* char doFall;
|
|
||||||
|
|
||||||
if (player[cp].pdie)
|
|
||||||
{
|
|
||||||
gamepdo_dieanim(cp, pCKP);
|
|
||||||
if (!pCKP->Control.levelcontrol.gameovermode)
|
|
||||||
{
|
|
||||||
gamepdo_StatusBox(cp, pCKP);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!pCKP->Control.levelcontrol.gameovermode)
|
|
||||||
{
|
|
||||||
player[cp].inhibitwalking = 0;
|
|
||||||
player[cp].inhibitfall = 0;
|
|
||||||
|
|
||||||
gamepdo_StatusBox(cp, pCKP);
|
|
||||||
|
|
||||||
gamepdo_ProcessInput(cp, pCKP);
|
|
||||||
|
|
||||||
gamepdo_setdir(cp, pCKP);
|
|
||||||
|
|
||||||
gamepdo_setblockedlru(cp, pCKP);
|
|
||||||
gamepdo_getgoodies(cp, pCKP);
|
|
||||||
|
|
||||||
if (pCKP->Control.levelcontrol.episode==3) gamepdo_ankh(cp);
|
|
||||||
|
|
||||||
gamepdo_raygun(cp, pCKP);
|
|
||||||
|
|
||||||
gamepdo_keencicle(cp, pCKP);
|
|
||||||
|
|
||||||
|
|
||||||
if(!player[cp].pjumping && !player[cp].pfalling)
|
|
||||||
{
|
|
||||||
gamepdo_walking(cp, pCKP);
|
|
||||||
gamepdo_walkinganim(cp, pCKP);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (fade.mode==NO_FADE || fade.dir==FADE_IN || demomode)
|
|
||||||
{
|
|
||||||
gamepdo_playpushed(cp, pCKP);
|
|
||||||
gamepdo_InertiaAndFriction_X(cp, pCKP);
|
|
||||||
}
|
|
||||||
|
|
||||||
gamepdo_JumpAndPogo(cp, pCKP);
|
|
||||||
|
|
||||||
// decide if player should fall
|
|
||||||
doFall = 1;
|
|
||||||
if (player[cp].inhibitfall) doFall = 0;
|
|
||||||
//else if (pCKP->Option[OPT_CHEATS].value) doFall = 0;
|
|
||||||
|
|
||||||
if (doFall)
|
|
||||||
{
|
|
||||||
gamepdo_falling(cp, pCKP);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(player[cp].pjumping == PJUMPED)
|
|
||||||
player[cp].pfalling = 0;
|
|
||||||
player[cp].psupportingtile = 145;
|
|
||||||
player[cp].psupportingobject = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // we're in game-over mode
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
applyFrame();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::performDieAnimation(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processInput(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processDirection(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::checkCollisions(void)
|
|
||||||
{
|
|
||||||
unsigned int tx,ty;
|
|
||||||
short i;
|
|
||||||
|
|
||||||
tx = (m_x>>CSF)+2;
|
|
||||||
ty = (m_y>>CSF);
|
|
||||||
|
|
||||||
bisBlockedDown = false;
|
|
||||||
bisBlockedUp = false;
|
|
||||||
bisBlockedLeft = false;
|
|
||||||
bisBlockedRight = false;
|
|
||||||
|
|
||||||
for( i=1 ; i < PLAYERWIDTH ; i++ )
|
|
||||||
{
|
|
||||||
if(TileProperty[getmaptileat((tx+i),ty)][BDOWN] || checkobjsolid((tx+i)<<CSF,(ty)<<CSF,0))
|
|
||||||
{
|
|
||||||
bisBlockedUp = true;
|
|
||||||
}
|
|
||||||
if(TileProperty[getmaptileat((tx+i),ty+PLAYERHEIGHT)][BUP] || checkobjsolid((tx+i)<<CSF,(ty+PLAYERHEIGHT)<<CSF,0))
|
|
||||||
{
|
|
||||||
// Standing on an solid object
|
|
||||||
bisBlockedDown = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for( i=1 ; i < PLAYERHEIGHT ; i++ )
|
|
||||||
{
|
|
||||||
if(TileProperty[getmaptileat(tx+PLAYERWIDTH,ty+i)][BRIGHT] || checkobjsolid((tx+PLAYERWIDTH)<<CSF,(ty+i)<<CSF,0))
|
|
||||||
{
|
|
||||||
|
|
||||||
bisBlockedRight = true;
|
|
||||||
}
|
|
||||||
if(TileProperty[getmaptileat(tx,ty+i)][BLEFT] || checkobjsolid((tx)<<CSF,(ty+i)<<CSF,0))
|
|
||||||
{
|
|
||||||
bisBlockedLeft = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processGoodies(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processInvincibility(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processRaygun(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processStunned(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Process and decide if player is walking or standing
|
|
||||||
void CPlayer::processWalking(void)
|
|
||||||
{
|
|
||||||
m_vx = 0;
|
|
||||||
if(isStanding || isWalking)
|
|
||||||
{
|
|
||||||
if(g_pInput->getHoldedCommand(IC_RIGHT))
|
|
||||||
{
|
|
||||||
isStanding = false;
|
|
||||||
isWalking = true;
|
|
||||||
m_vx = WALK_SPEED;
|
|
||||||
headingDirection = RIGHT;
|
|
||||||
}
|
|
||||||
else if(g_pInput->getHoldedCommand(IC_LEFT))
|
|
||||||
{
|
|
||||||
isStanding = false;
|
|
||||||
isWalking = true;
|
|
||||||
m_vx = -WALK_SPEED;
|
|
||||||
headingDirection = LEFT;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isStanding = true;
|
|
||||||
isWalking = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(g_pInput->getHoldedCommand(IC_UP))
|
|
||||||
{
|
|
||||||
isStanding = false;
|
|
||||||
isWalking = true;
|
|
||||||
m_vy = -WALK_SPEED;
|
|
||||||
}
|
|
||||||
else if(g_pInput->getHoldedCommand(IC_DOWN))
|
|
||||||
{
|
|
||||||
isStanding = false;
|
|
||||||
isWalking = true;
|
|
||||||
m_vy = WALK_SPEED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processMovements(void)
|
|
||||||
{
|
|
||||||
// Acceleration formula
|
|
||||||
if(m_vx != 0)
|
|
||||||
m_vx += m_ax;
|
|
||||||
if(m_vy != 0)
|
|
||||||
m_vy += m_ay;
|
|
||||||
|
|
||||||
if(bisBlockedDown)
|
|
||||||
{
|
|
||||||
if(headingDirection == RIGHT && (isWalking || walkframe > 0))
|
|
||||||
{
|
|
||||||
if(walktimer < WALKANIMRATE)
|
|
||||||
{
|
|
||||||
//m_vx = 0;
|
|
||||||
walktimer++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
walktimer = 0;
|
|
||||||
if(walkframe < 3)
|
|
||||||
walkframe++;
|
|
||||||
else
|
|
||||||
walkframe = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(walkframe != 0 && !isWalking)
|
|
||||||
m_vx = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check, if player is blocked
|
|
||||||
// If it is not the add Players velocity
|
|
||||||
if((!bisBlockedRight && m_vx > 0) ||
|
|
||||||
(!bisBlockedLeft && m_vx < 0))
|
|
||||||
m_x += m_vx;
|
|
||||||
|
|
||||||
if((!bisBlockedUp && m_vy < 0) ||
|
|
||||||
(!bisBlockedDown && m_vy > 0))
|
|
||||||
m_y += m_vy;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processInertia(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processFriction(void)
|
|
||||||
{
|
|
||||||
frictiontimer++;
|
|
||||||
if(frictiontimer > MAX_FRICTIONTIME)
|
|
||||||
frictiontimer = 0;
|
|
||||||
|
|
||||||
// We have two sections: friction in the air and on ground
|
|
||||||
|
|
||||||
// friction in the air
|
|
||||||
|
|
||||||
// friction on the ground: Division again in three section. Normal, slippery and ice
|
|
||||||
// on the Ground
|
|
||||||
if(bisBlockedDown)
|
|
||||||
{
|
|
||||||
// He is standing on something solid
|
|
||||||
if(frictiontimer % 1 == 0)
|
|
||||||
{
|
|
||||||
if(m_vx > 0)
|
|
||||||
{
|
|
||||||
m_vx-=3;
|
|
||||||
if(m_vx < 0)
|
|
||||||
m_vx = 0;
|
|
||||||
}
|
|
||||||
if(m_vx < 0)
|
|
||||||
{
|
|
||||||
m_vx+=3;
|
|
||||||
if(m_vx > 0)
|
|
||||||
m_vx = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processSwitches(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processPogo(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processJump(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::processFalling(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayer::showStatusBox(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned short CPlayer::getPlayerframe(void)
|
|
||||||
{
|
|
||||||
return playframe;
|
|
||||||
}
|
|
||||||
|
|
||||||
// select the appropriate player frame based on what he's doing
|
|
||||||
void CPlayer::applyFrame(void)
|
|
||||||
{
|
|
||||||
playframe = 0; // basic standing
|
|
||||||
|
|
||||||
// select the frame assuming he's pointing right. ep1 does not select
|
|
||||||
// a walk frame while fading--this is for the bonus teleporter in L13.
|
|
||||||
if (isDying) playframe = PDIEFRAME + dieframe;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (frozentime) playframe = PFRAME_FROZEN + frozenframe;
|
|
||||||
else if (isFiring) playframe = PFIREFRAME;
|
|
||||||
else if (usePogostick) playframe = PFRAME_POGO + (Jumpmode==PREPAREPOGO);
|
|
||||||
else if (Jumpmode) playframe += jumpframe;
|
|
||||||
else if (isFalling) playframe += 13;
|
|
||||||
else if (isWalking || isPushed) playframe += walkframe;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if he's going left switch the frame selected above to the
|
|
||||||
// appropriate one for the left direction
|
|
||||||
if (headingDirection==LEFT && !isDying && !frozentime)
|
|
||||||
{
|
|
||||||
if (isFiring)
|
|
||||||
{
|
|
||||||
playframe++;
|
|
||||||
}
|
|
||||||
else if (usePogostick)
|
|
||||||
{
|
|
||||||
playframe+=2;
|
|
||||||
}
|
|
||||||
else if (Jumpmode || isFalling)
|
|
||||||
{
|
|
||||||
playframe+=6;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
playframe+=4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
/*
|
|
||||||
* CPlayer.h
|
|
||||||
*
|
|
||||||
* Created on: 31.03.2009
|
|
||||||
* Author: gerstrong
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CPLAYER_H_
|
|
||||||
#define CPLAYER_H_
|
|
||||||
|
|
||||||
class CPlayer {
|
|
||||||
public:
|
|
||||||
CPlayer();
|
|
||||||
virtual ~CPlayer();
|
|
||||||
|
|
||||||
void handlePlayer(void);
|
|
||||||
void showStatusBox(void);
|
|
||||||
unsigned short getPlayerframe(void);
|
|
||||||
bool isPlaying(void);
|
|
||||||
void enablePlayer(bool value);
|
|
||||||
void useObject(unsigned short value);
|
|
||||||
unsigned short getObject(void);
|
|
||||||
unsigned long getCoordX(void);
|
|
||||||
unsigned long getCoordY(void);
|
|
||||||
void setCoord(unsigned long in_x, unsigned long in_y);
|
|
||||||
void setpScrCoord(int *px, int *py);
|
|
||||||
|
|
||||||
private:
|
|
||||||
short episode;
|
|
||||||
|
|
||||||
bool active;
|
|
||||||
bool isGameover;
|
|
||||||
bool isFalling;
|
|
||||||
bool isDying;
|
|
||||||
bool isFiring;
|
|
||||||
bool isWalking;
|
|
||||||
bool isPushed;
|
|
||||||
bool isStanding;
|
|
||||||
bool cannotWalk;
|
|
||||||
bool cannotfall;
|
|
||||||
bool usePogostick;
|
|
||||||
|
|
||||||
unsigned long m_x;
|
|
||||||
unsigned long m_y;
|
|
||||||
int *mp_scrx;
|
|
||||||
int *mp_scry;
|
|
||||||
|
|
||||||
|
|
||||||
unsigned short playframe;
|
|
||||||
unsigned short Jumpmode;
|
|
||||||
unsigned short dieframe;
|
|
||||||
unsigned short frozenframe;
|
|
||||||
unsigned short jumpframe;
|
|
||||||
unsigned short headingDirection;
|
|
||||||
unsigned short frozentime;
|
|
||||||
unsigned short walkframe;
|
|
||||||
unsigned short object;
|
|
||||||
unsigned short walktimer;
|
|
||||||
unsigned short frictiontimer;
|
|
||||||
short m_vx;
|
|
||||||
short m_vy;
|
|
||||||
short m_ax;
|
|
||||||
short m_ay;
|
|
||||||
|
|
||||||
bool bisBlockedUp;
|
|
||||||
bool bisBlockedDown;
|
|
||||||
bool bisBlockedLeft;
|
|
||||||
bool bisBlockedRight;
|
|
||||||
|
|
||||||
void performDieAnimation(void);
|
|
||||||
void processInput(void);
|
|
||||||
void processDirection(void);
|
|
||||||
void checkCollisions(void);
|
|
||||||
void processGoodies(void);
|
|
||||||
void processInvincibility(void);
|
|
||||||
void processRaygun(void);
|
|
||||||
void processStunned(void);
|
|
||||||
void processWalking(void);
|
|
||||||
void processInertia(void);
|
|
||||||
void processFriction(void);
|
|
||||||
void processSwitches(void);
|
|
||||||
void processPogo(void);
|
|
||||||
void processJump(void);
|
|
||||||
void processFalling(void);
|
|
||||||
void processMovements(void);
|
|
||||||
|
|
||||||
void applyFrame(void);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* CPLAYER_H_ */
|
|
||||||
Reference in New Issue
Block a user