This commit is contained in:
Daveo 2001-06-01 15:10:05 +00:00
parent 8f4cbe45a8
commit 99a6466f54
8 changed files with 113 additions and 128 deletions

View file

@ -1,6 +1,6 @@
/***********************/
/*** Anim Base Class ***/
/***********************/
/*****************/
/*** Bubble FX ***/
/*****************/
#include "system\global.h"
#include <DStructs.h>
@ -12,95 +12,50 @@
#include "game\game.h"
#include "level\layercollision.h"
#include "FX\FXBaseAnim.h"
#include "FX\FXBubble.h"
/*****************************************************************************/
void CFXBaseAnim::init(DVECTOR const &_Pos)
void CFXBubble::init(DVECTOR const &_Pos)
{
CFX::init(_Pos);
CurrentFrame=0;
CurrentScale=DataPtr->Scale;
MaxFrame=((DataPtr->EndFrame-DataPtr->StartFrame)<<DataPtr->FrameShift)-1;
if (DataPtr->Flags & FXANIM_FLAG_LOOP)
{ // Looping Anim, so let it live forever!
Life=-1;
}
else
{
Life=MaxFrame;
}
CFXBaseAnim::init(_Pos);
Life=32+getRndRange(63);
VelY=-getRndRange(4)-1;
CurrentScale=getRndRange(DataPtr->Scale/2)+(DataPtr->Scale/2);
Die=0;
XIdx=getRnd()&15;
Gravity=0;
}
/*****************************************************************************/
void CFXBaseAnim::shutdown()
{
CFX::shutdown();
}
/*****************************************************************************/
/*** Think *******************************************************************/
/*****************************************************************************/
void CFXBaseAnim::think(int _frames)
int XT[16]={ 0,+1,+0,+1,+0, 0,-1,+0,-1,+0,0,+1,+0,+1,+0,};
void CFXBubble::think(int _frames)
{
CFX::think(_frames);
CurrentFrame+=_frames;
if (CurrentFrame>=MaxFrame)
if (Die)
{
CurrentFrame=0;
}
Pos.vx+=DataPtr->Velocity.vx;
Pos.vy+=DataPtr->Velocity.vy+Gravity;
if (DataPtr->Flags & FXANIM_FLAG_HAS_GRAVITY)
{
Gravity++;
}
if (DataPtr->Flags & FXANIM_FLAG_COLLIDE_KILL)
{
CLayerCollision *ColLayer=CGameScene::getCollision();
int DistY = ColLayer->getHeightFromGround( Pos.vx, Pos.vy, 16 );
if (DistY<=0)
if (renderFrame!=FRM__BUBBLEPOP)
{
Pos.vy-=DistY;
killFX();
renderFrame=FRM__BUBBLEPOP;
}
else
{
setToShutdown();
}
}
else
{
CFXBaseAnim::think(_frames);
Pos.vx+=XT[XIdx++];
XIdx&=15;
}
}
/*****************************************************************************/
void CFXBaseAnim::killFX()
void CFXBubble::killFX()
{
setToShutdown();
// If has follow on effect, create it now
if (DataPtr->EndFX)
{
CFX::Create((CFX::FX_TYPE)DataPtr->EndFX,getPos());
}
Die=1;
}
/*****************************************************************************/
/*****************************************************************************/
/*** Render ******************************************************************/
/*****************************************************************************/
void CFXBaseAnim::render()
{
DVECTOR RenderPos;
getFXRenderPos(RenderPos);
if (!canRender()) return;
SpriteBank *SprBank=CGameScene::getSpriteBank();
int ThisFrame=CurrentFrame>>DataPtr->FrameShift;
POLY_FT4 *Ft4=SprBank->printFT4Scaled(DataPtr->StartFrame+ThisFrame,RenderPos.vx,RenderPos.vy,0,0,OtPos*0,CurrentScale>>4);
Ft4->u1--; Ft4->u3--;
Ft4->v2--; Ft4->v3--;
setShadeTex(Ft4,0);
setRGB0(Ft4,DataPtr->R,DataPtr->G,DataPtr->B);
}