This commit is contained in:
parent
cbd3a6bf90
commit
dc0966e06f
5 changed files with 126 additions and 80 deletions
|
@ -1,6 +1,6 @@
|
|||
/*****************/
|
||||
/*** Thwack!!! ***/
|
||||
/*****************/
|
||||
/*************/
|
||||
/*** Laser ***/
|
||||
/*************/
|
||||
|
||||
#include "system\global.h"
|
||||
#include <DStructs.h>
|
||||
|
@ -12,37 +12,78 @@
|
|||
#include "game\game.h"
|
||||
#include "gfx\otpos.h"
|
||||
|
||||
#include "FX\FXThwack.h"
|
||||
#include "FX\FXLaser.h"
|
||||
|
||||
const int ThwackLife=12;
|
||||
int LaserWidth=1;
|
||||
|
||||
/*****************************************************************************/
|
||||
void CFXThwack::init(DVECTOR const &_Pos)
|
||||
void CFXLaser::init(DVECTOR const &_Pos)
|
||||
{
|
||||
CFX::init(_Pos);
|
||||
Life=ThwackLife;
|
||||
OtPos=OTPOS__ACTOR_POS-1;
|
||||
Angle=getRnd()&4095;
|
||||
Scale=2048+1024+(getRnd()&2047);
|
||||
Life=-1;
|
||||
R=G=B=255;
|
||||
Offset.vx=Offset.vy=0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void CFXLaser::setOffset(DVECTOR &Pos)
|
||||
{
|
||||
Offset=Pos;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void CFXLaser::setTarget(DVECTOR &Pos)
|
||||
{
|
||||
Target=Pos;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*** Think *******************************************************************/
|
||||
/*****************************************************************************/
|
||||
void CFXLaser::think(int _frames)
|
||||
{
|
||||
CThing *Parent=getParent();
|
||||
ASSERT(Parent);
|
||||
|
||||
Pos=Parent->getPos();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*** Render ******************************************************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void CFXThwack::render()
|
||||
void CFXLaser::render()
|
||||
{
|
||||
DVECTOR RenderPos;
|
||||
DVECTOR renderPos0,renderPos1;
|
||||
sOT *ThisOT=OtPtr+OtPos;
|
||||
|
||||
getFXRenderPos(RenderPos);
|
||||
getFXRenderPos(renderPos0);
|
||||
if (!canRender() || !IsVisible) return;
|
||||
|
||||
SpriteBank *SprBank=CGameScene::getSpriteBank();
|
||||
POLY_FT4 *Ft4=SprBank->printRotatedScaledSprite(FRM__THWACK,RenderPos.vx,RenderPos.vy,Scale,Scale,Angle,OtPos);
|
||||
setSemiTrans(Ft4,1);
|
||||
Ft4->tpage|=1<<5;
|
||||
int Col=(256/ThwackLife)*Life;
|
||||
setRGB0(Ft4,Col,Col,Col);
|
||||
calcRenderPos(Target,renderPos1);
|
||||
renderPos0.vx+=Offset.vx;
|
||||
renderPos0.vy+=Offset.vy;
|
||||
// Main Beam
|
||||
LINE_F2 *L=GetPrimLF2();
|
||||
L->x0=renderPos0.vx; L->y0=renderPos0.vy;
|
||||
L->x1=renderPos1.vx; L->y1=renderPos1.vy;
|
||||
setRGB0(L,R,G,B); addPrim(ThisOT,L);
|
||||
|
||||
// Surround
|
||||
POLY_F4 *P=GetPrimF4();
|
||||
P->x0=renderPos0.vx-LaserWidth; P->y0=renderPos0.vy-LaserWidth;
|
||||
P->x1=renderPos0.vx+LaserWidth; P->y1=renderPos0.vy+LaserWidth;
|
||||
P->x2=renderPos1.vx-LaserWidth; P->y2=renderPos1.vy-LaserWidth;
|
||||
P->x3=renderPos1.vx+LaserWidth; P->y3=renderPos1.vy+LaserWidth;
|
||||
setRGB0(P,R>>1,G>>1,B>>1); addPrim(ThisOT,P);
|
||||
|
||||
//
|
||||
int W=renderPos1.vx-renderPos0.vx;
|
||||
int H=renderPos1.vy-renderPos0.vy;
|
||||
|
||||
if (W<0) W=-W;
|
||||
if (H<0) H=-H;
|
||||
setCollisionCentreOffset(W>>1,H>>1);
|
||||
setCollisionSize(W,H);
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue