This commit is contained in:
Paul 2001-06-18 22:58:36 +00:00
parent 6e15a583c0
commit d4b15b57a2
7 changed files with 97 additions and 46 deletions

View File

@ -223,7 +223,8 @@ gui_src := gbubbles \
greadout \ greadout \
gsprite \ gsprite \
gtextbox \ gtextbox \
gui gui \
pointer
jellfish_src := jellfish jellfish_src := jellfish

View File

@ -136,7 +136,7 @@ void CPointerIcon::render()
fh=sb->getFrameHeader(FRM__MAPPOINTER); fh=sb->getFrameHeader(FRM__MAPPOINTER);
x=m_pointerPos.vx-(fh->W/2); x=m_pointerPos.vx-(fh->W/2);
y=m_pointerPos.vy-(fh->H/2); y=m_pointerPos.vy-(fh->H/2);
ft4=sb->printFT4(fh,x,y,0,0,9); ft4=sb->printFT4(fh,x,y,0,0,0);
if(!m_pointerArrivedAtTarget) if(!m_pointerArrivedAtTarget)
{ {
setSemiTrans(ft4,true); setSemiTrans(ft4,true);

View File

@ -58,7 +58,11 @@
#include "sound\sound.h" #include "sound\sound.h"
#endif #endif
#ifndef __GUI_POINTER_H__
#include "gui\pointer.h"
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -195,8 +199,9 @@ void CMapScene::init()
m_currentChapterSelection=s_chapterToStartOn; m_currentChapterSelection=s_chapterToStartOn;
generateMapScreenImage(); generateMapScreenImage();
m_currentLevelSelection=s_levelToStartOn; m_currentLevelSelection=s_levelToStartOn;
m_pointerPos=getPointerTargetPosition();
m_pointerArrivedAtTarget=true; m_pointerIcon=new ("MapPointer") CPointerIcon();
m_pointerIcon->snapToTarget(getPointerTargetPosition());
SetScreenImage((u8*)m_screenImage); SetScreenImage((u8*)m_screenImage);
@ -214,6 +219,7 @@ void CMapScene::init()
void CMapScene::shutdown() void CMapScene::shutdown()
{ {
ClearScreenImage(); ClearScreenImage();
delete m_pointerIcon;
MemFree(m_screenImage); MemFree(m_screenImage);
m_font->dump(); delete m_font; m_font->dump(); delete m_font;
} }
@ -232,6 +238,8 @@ void CMapScene::render()
int i; int i;
char buf[100]; char buf[100];
m_pointerIcon->render();
sb=CGameScene::getSpriteBank(); sb=CGameScene::getSpriteBank();
level=&s_mapLevelData[m_currentChapterSelection][0]; level=&s_mapLevelData[m_currentChapterSelection][0];
@ -271,7 +279,6 @@ void CMapScene::render()
level++; level++;
} }
renderPointer();
renderInstructions(); renderInstructions();
@ -283,28 +290,6 @@ m_font->print(25,25,buf);
} }
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CMapScene::renderPointer()
{
SpriteBank *sb;
sFrameHdr *fh;
POLY_FT4 *ft4;
sb=CGameScene::getSpriteBank();
fh=sb->getFrameHeader(FRM__MAPPOINTER);
ft4=sb->printFT4(fh,m_pointerPos.vx-(fh->W/2),m_pointerPos.vy-(fh->H/2),0,0,9);
if(!m_pointerArrivedAtTarget)
{
setSemiTrans(ft4,true);
}
}
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Function: Function:
Purpose: Purpose:
@ -428,6 +413,7 @@ void CMapScene::think(int _frames)
if(--m_currentLevelSelection<0)m_currentLevelSelection=MAP_NUM_LEVELS_PER_CHAPTER-1; if(--m_currentLevelSelection<0)m_currentLevelSelection=MAP_NUM_LEVELS_PER_CHAPTER-1;
} }
while(!isLevelOpen(m_currentChapterSelection,m_currentLevelSelection)); while(!isLevelOpen(m_currentChapterSelection,m_currentLevelSelection));
m_pointerIcon->setTarget(getPointerTargetPosition());
} }
else if(pad&PAD_RIGHT) else if(pad&PAD_RIGHT)
{ {
@ -436,22 +422,24 @@ void CMapScene::think(int _frames)
if(++m_currentLevelSelection>=MAP_NUM_LEVELS_PER_CHAPTER)m_currentLevelSelection=0; if(++m_currentLevelSelection>=MAP_NUM_LEVELS_PER_CHAPTER)m_currentLevelSelection=0;
} }
while(!isLevelOpen(m_currentChapterSelection,m_currentLevelSelection)); while(!isLevelOpen(m_currentChapterSelection,m_currentLevelSelection));
m_pointerIcon->setTarget(getPointerTargetPosition());
} }
if(lastLevel!=m_currentLevelSelection) if(lastLevel!=m_currentLevelSelection)
{ {
CSoundMediator::playSfx(CSoundMediator::SFX_FRONT_END__MOVE_CURSOR); CSoundMediator::playSfx(CSoundMediator::SFX_FRONT_END__MOVE_CURSOR);
m_pointerArrivedAtTarget=false; // m_pointerArrivedAtTarget=false;
m_pointerSin=0; // m_pointerSin=0;
} }
// Calc where the pointer should be // Calc where the pointer should be
if(m_pointerArrivedAtTarget) // if(m_pointerArrivedAtTarget)
{ // {
m_pointerSin=(m_pointerSin+(_frames*70))&4095; // m_pointerSin=(m_pointerSin+(_frames*70))&4095;
} // }
m_pointerTarget=getPointerTargetPosition(); // m_pointerIcon->setTarget(getPointerTargetPosition());
// Move the pointer // Move the pointer
/*
for(int i=0;i<_frames;i++) for(int i=0;i<_frames;i++)
{ {
int delta; int delta;
@ -488,8 +476,10 @@ void CMapScene::think(int _frames)
m_pointerArrivedAtTarget=true; m_pointerArrivedAtTarget=true;
} }
} }
*/
m_pointerIcon->think(_frames);
if(m_pointerArrivedAtTarget&& if(m_pointerIcon->canPointerSelect()&&
pad&PAD_CROSS) pad&PAD_CROSS)
{ {
CSoundMediator::playSfx(CSoundMediator::SFX_FRONT_END__OK); CSoundMediator::playSfx(CSoundMediator::SFX_FRONT_END__OK);
@ -535,8 +525,9 @@ void CMapScene::generateMapScreenImage()
} }
} }
m_pointerPos=getPointerTargetPosition(); m_pointerIcon->snapToTarget(getPointerTargetPosition());
m_pointerArrivedAtTarget=true; // m_pointerPos=getPointerTargetPosition();
// m_pointerArrivedAtTarget=true;
} }
@ -578,7 +569,7 @@ DVECTOR CMapScene::getPointerTargetPosition()
pos=s_mapLevelPositions[m_currentLevelSelection]; pos=s_mapLevelPositions[m_currentLevelSelection];
pos.vx+=(MAP_LEVEL_WIDTH/2); pos.vx+=(MAP_LEVEL_WIDTH/2);
pos.vy+=MAP_LEVEL_HEIGHT;//+(msin(m_pointerSin)*4>>12); pos.vy+=MAP_LEVEL_HEIGHT;
return pos; return pos;
} }

View File

@ -104,10 +104,7 @@ private:
int m_currentChapterSelection; int m_currentChapterSelection;
int m_currentLevelSelection; int m_currentLevelSelection;
DVECTOR m_pointerPos; class CPointerIcon *m_pointerIcon;
DVECTOR m_pointerTarget;
int m_pointerSin;
int m_pointerArrivedAtTarget;
static sMapLevelData s_mapLevelData[MAP_NUM_CHAPTERS][MAP_NUM_LEVELS_PER_CHAPTER]; static sMapLevelData s_mapLevelData[MAP_NUM_CHAPTERS][MAP_NUM_LEVELS_PER_CHAPTER];
static DVECTOR s_mapLevelPositions[MAP_NUM_LEVELS_PER_CHAPTER]; static DVECTOR s_mapLevelPositions[MAP_NUM_LEVELS_PER_CHAPTER];

View File

@ -78,6 +78,10 @@
#include "backend\party.h" #include "backend\party.h"
#endif #endif
#ifndef __GUI_POINTER_H__
#include "gui\pointer.h"
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -205,6 +209,9 @@ void CShopScene::init()
m_state=SHOP_STATE__FADING_IN; m_state=SHOP_STATE__FADING_IN;
m_mainUiYOffset=SHOP_STATE__SELECT_ITEM; m_mainUiYOffset=SHOP_STATE__SELECT_ITEM;
m_pointerIcon=new ("MapPointer") CPointerIcon();
m_pointerIcon->snapToTarget(getPointerTarget());
} }
@ -216,6 +223,8 @@ void CShopScene::init()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CShopScene::shutdown() void CShopScene::shutdown()
{ {
delete m_pointerIcon;
m_guiCannotAffordFrame->shutdown(); m_guiCannotAffordFrame->shutdown();
m_guiConfirmPurchaseFrame->shutdown(); m_guiConfirmPurchaseFrame->shutdown();
m_guiFrame->shutdown(); m_guiFrame->shutdown();
@ -259,9 +268,7 @@ void CShopScene::render()
{ {
if(m_state==SHOP_STATE__SELECT_ITEM) if(m_state==SHOP_STATE__SELECT_ITEM)
{ {
SpriteBank *sb=CGameScene::getSpriteBank(); m_pointerIcon->render();
sFrameHdr *fh=sb->getFrameHeader(FRM__MAPPOINTER);
sb->printFT4(fh,x-fh->W,y+30,0,0,5);
} }
// Flash selected item // Flash selected item
@ -289,6 +296,41 @@ void CShopScene::render()
} }
} }
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
DVECTOR CShopScene::getPointerTarget()
{
int i,x,y,gap;
x=SHOP_ICON_XBASE;
y=SHOP_ICON_YBASE;
gap=SHOP_ICON_WIDTH/(SHOP_ICON_ITEMS_PER_ROW-1);
for(i=0;i<NUM_SHOP_ITEM_IDS;i++)
{
if(i==m_currentlySelectedItem)
{
break;
}
if(i%SHOP_ICON_ITEMS_PER_ROW==SHOP_ICON_ITEMS_PER_ROW-1)
{
x=SHOP_ICON_XBASE;
y+=SHOP_ICON_Y_GAP;
}
else
{
x+=gap;
}
}
DVECTOR ret={x-5,y+30};
return ret;
}
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Function: Function:
@ -309,6 +351,8 @@ void CShopScene::think(int _frames)
{ {
int pad; int pad;
m_pointerIcon->think(_frames);
pad=PadGetDown(0); pad=PadGetDown(0);
if(pad&PAD_LEFT) if(pad&PAD_LEFT)
{ {
@ -319,6 +363,7 @@ void CShopScene::think(int _frames)
} }
m_flashSin=0; m_flashSin=0;
playSound(CSoundMediator::SFX_FRONT_END__MOVE_CURSOR); playSound(CSoundMediator::SFX_FRONT_END__MOVE_CURSOR);
m_pointerIcon->setTarget(getPointerTarget());
} }
else if(pad&PAD_RIGHT) else if(pad&PAD_RIGHT)
{ {
@ -329,8 +374,9 @@ void CShopScene::think(int _frames)
} }
m_flashSin=0; m_flashSin=0;
playSound(CSoundMediator::SFX_FRONT_END__MOVE_CURSOR); playSound(CSoundMediator::SFX_FRONT_END__MOVE_CURSOR);
m_pointerIcon->setTarget(getPointerTarget());
} }
else if(pad&PAD_CROSS) else if(m_pointerIcon->canPointerSelect()&&pad&PAD_CROSS)
{ {
if(isItemAvailableToBuy(m_currentlySelectedItem)) if(isItemAvailableToBuy(m_currentlySelectedItem))
{ {

View File

@ -22,6 +22,10 @@
#include "system\gstate.h" #include "system\gstate.h"
#endif #endif
#ifndef _GLOBAL_HEADER_
#include "system\global.h" // Doh.. just for DVECTOR :/
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -62,6 +66,7 @@ public:
private: private:
void renderUi(); void renderUi();
DVECTOR getPointerTarget();
int isItemAvailableToBuy(int _itemNumber); int isItemAvailableToBuy(int _itemNumber);
void playSound(int _sfxId); void playSound(int _sfxId);
@ -158,6 +163,9 @@ private:
}; };
int m_mainUiYOffset; int m_mainUiYOffset;
class CPointerIcon *m_pointerIcon;
}; };

View File

@ -923,6 +923,14 @@ SOURCE=..\..\..\source\gui\gui.cpp
SOURCE=..\..\..\source\gui\gui.h SOURCE=..\..\..\source\gui\gui.h
# End Source File # End Source File
# Begin Source File
SOURCE=..\..\..\source\gui\pointer.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\gui\pointer.h
# End Source File
# End Group # End Group
# Begin Group "hazard" # Begin Group "hazard"