SBSPSS/source/fx/fx.cpp

217 lines
4.2 KiB
C++
Raw Normal View History

2001-05-05 20:12:30 +02:00
/*********************/
/*** FX Base Class ***/
/*********************/
#include "system\global.h"
#include <DStructs.h>
#include "utils\utils.h"
#include "gfx\prim.h"
#include "gfx\sprbank.h"
#include <sprites.h>
#include "level\level.h"
2001-05-09 21:57:57 +02:00
#include "gfx\otpos.h"
2001-05-05 20:12:30 +02:00
#include "FX\FX.h"
#include "FX\FXjfish.h"
2001-05-23 22:00:25 +02:00
#include "FX\FXBaseTrail.h"
#include "FX\FXBaseAnim.h"
2001-05-16 21:06:02 +02:00
#include "FX\FXfallingTile.h"
2001-05-18 22:54:43 +02:00
#include "FX\FXSteam.h"
2001-05-23 21:27:05 +02:00
#include "FX\FXSplash.h"
2001-05-05 20:12:30 +02:00
/* FX
Jellyfish legs
Bubbles (inc acid)
Electricity lightning bolt
Electricity sheet lightning
Electricity Blast
Electricity Radial?
Electricity projectile
Shockwave - From falling items
Daze stars
water/acid/lava/oil
drip
splashes
water/acid/lava.oil
drops
waterfall
waterfall end (splash)
fireballs
steam
smoke
flames
marsh gas
explosions (implode!!)
Coral debris
***************************
Level Effect Emitters
Bubble
Acid drip
Acid Flow
steam
smoke
fireballs
flames
gas
*/
2001-05-23 21:27:05 +02:00
2001-05-21 20:11:30 +02:00
/*****************************************************************************/
2001-05-23 21:27:05 +02:00
/*
2001-05-21 20:11:30 +02:00
CFXSteam *TestFXPtr=0;
void TestFX(DVECTOR Pos)
{
if (!TestFXPtr)
{
TestFXPtr=(CFXSteam*)CFX::Create(CFX::FX_TYPE_STEAM,Pos);
2001-05-23 00:30:36 +02:00
TestFXPtr->setLife(32);
TestFXPtr=0;
2001-05-21 20:11:30 +02:00
}
else
{
TestFXPtr->setDie();
TestFXPtr=0;
}
}
2001-05-23 21:27:05 +02:00
*/
/*****************************************************************************/
void TestFX(DVECTOR Pos)
{
CFX::Create(CFX::FX_TYPE_SPLASH,Pos);
// TestFXPtr->setLife(32);
}
2001-05-21 20:11:30 +02:00
2001-05-05 20:12:30 +02:00
/*****************************************************************************/
2001-05-16 21:06:02 +02:00
CFX *CFX::Create(const FX_TYPE Type)
2001-05-05 20:12:30 +02:00
{
CFX *NewFX;
switch(Type)
{
2001-05-16 21:06:02 +02:00
case FX_TYPE_FALLINGTILE:
2001-05-23 21:27:05 +02:00
NewFX=new ("FXFalling Tile") CFXFallingTile();
2001-05-16 21:06:02 +02:00
break;
2001-05-21 20:11:30 +02:00
case FX_TYPE_STEAM:
2001-05-23 21:27:05 +02:00
NewFX=new ("FXSteam") CFXSteam();
break;
case FX_TYPE_SPLASH:
NewFX=new ("FXSplash") CFXSplash();
2001-05-18 22:54:43 +02:00
break;
case FX_TYPE_JELLYFISH_LEGS:
// NewFX=new ("JellyFish Legs") CFXJellyFishLegs();
ASSERT(!"FISH LEGS OUT OF STOCK\n");
2001-05-05 20:12:30 +02:00
case FX_TYPE_BUBBLE:
2001-05-15 23:36:31 +02:00
case FX_TYPE_BUBBLE_WATER:
case FX_TYPE_BUBBLE_ACID:
case FX_TYPE_BUBBLE_LAVA:
case FX_TYPE_BUBBLE_OIL:
2001-05-05 20:12:30 +02:00
case FX_TYPE_LIGHTNING_BOLT:
case FX_TYPE_LIGHTNING_SHEET:
case FX_TYPE_LIGHTNING_BLAST:
case FX_TYPE_LIGHTNING_RADIAL:
case FX_TYPE_LIGHTNING_PROJECTILE:
case FX_TYPE_SHOCKWAVE:
case FX_TYPE_DAZE:
case FX_TYPE_DROP:
2001-05-15 23:36:31 +02:00
case FX_TYPE_DROP_WATER:
case FX_TYPE_DROP_ACID:
case FX_TYPE_DROP_LAVA:
case FX_TYPE_DROP_OIL:
case FX_TYPE_SPLASH_WATER:
case FX_TYPE_SPLASH_ACID:
case FX_TYPE_SPLASH_LAVA:
case FX_TYPE_SPLASH_OIL:
2001-05-05 20:12:30 +02:00
case FX_TYPE_CASCADE:
case FX_TYPE_CASCADE_SPLASH:
case FX_TYPE_FIREBALL:
2001-05-21 20:11:30 +02:00
case FX_TYPE_SMOKE:
case FX_TYPE_GAS:
2001-05-05 20:12:30 +02:00
case FX_TYPE_FLAMES:
case FX_TYPE_EXPLODE:
case FX_TYPE_DEBRIS:
default:
ASSERT(!"UNKNOWN FX TYPE");
return NULL;
}
2001-05-16 21:06:02 +02:00
return NewFX;
}
2001-05-05 20:12:30 +02:00
2001-05-16 21:06:02 +02:00
/*****************************************************************************/
CFX *CFX::Create(const FX_TYPE Type,CThing *Parent)
{
CFX *NewFX=CFX::Create(Type);
2001-05-15 23:36:31 +02:00
2001-05-18 22:54:43 +02:00
ASSERT(Parent);
2001-05-16 21:06:02 +02:00
2001-05-18 22:54:43 +02:00
NewFX->init(Parent->getPos());
Parent->addChild(NewFX);
2001-05-16 21:06:02 +02:00
return NewFX;
}
/*****************************************************************************/
CFX *CFX::Create(const FX_TYPE Type,DVECTOR const &Pos)
{
CFX *NewFX=CFX::Create(Type);
NewFX->init(Pos);
return NewFX;
2001-05-05 20:12:30 +02:00
}
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
void CFX::init()
{
2001-05-09 21:57:57 +02:00
CFXThing::init();
2001-05-05 20:12:30 +02:00
2001-05-09 21:57:57 +02:00
m_spriteBank=new ("FX Sprite") SpriteBank();
m_spriteBank->load(SPRITES_SPRITES_SPR);
OtPos=OTPOS__ACTOR_POS;
2001-05-23 00:30:36 +02:00
Life=-1;
2001-05-05 20:12:30 +02:00
}
/*****************************************************************************/
void CFX::shutdown()
{
2001-05-15 23:36:31 +02:00
m_spriteBank->dump(); delete m_spriteBank;
CFXThing::shutdown();
2001-05-05 20:12:30 +02:00
}
/*****************************************************************************/
void CFX::think(int _frames)
{
CFXThing::think(_frames);
2001-05-23 00:30:36 +02:00
if (Life>0)
{
Life--;
if (Life==0 && !DieOut)
{
setDie();
}
}
2001-05-05 20:12:30 +02:00
}
/*****************************************************************************/
void CFX::render()
{
2001-05-16 21:06:02 +02:00
CFXThing::render();
2001-05-05 20:12:30 +02:00
}