SBSPSS/source/projectl/projectl.h

157 lines
4.5 KiB
C
Raw Normal View History

2001-01-22 17:01:49 +01:00
/*=========================================================================
projectl.h
Author: CRB
Created:
Project: Spongebob
Purpose:
Copyright (c) 2000 Climax Development Ltd
===========================================================================*/
#ifndef __PROJECTL_PROJECTL_H__
#define __PROJECTL_PROJECTL_H__
2001-02-27 17:59:50 +01:00
#ifndef __THING_THING_H__
#include "thing/thing.h"
#endif
2001-01-22 17:01:49 +01:00
/*****************************************************************************/
2001-02-27 17:59:50 +01:00
class CProjectile : public CEnemyProjectileThing
2001-01-22 17:01:49 +01:00
{
public:
2001-01-22 23:24:53 +01:00
enum PROJECTILE_MOVEMENT_TYPE
{
2001-04-04 00:01:52 +02:00
PROJECTILE_FIXED = 0,
PROJECTILE_DUMBFIRE = 1,
PROJECTILE_USER_SEEK,
2001-02-08 16:34:18 +01:00
PROJECTILE_GAS_CLOUD,
2001-06-18 15:47:50 +02:00
PROJECTILE_MINE,
2001-01-22 23:24:53 +01:00
};
enum PROJECTILE_LIFETIME_TYPE
{
PROJECTILE_FINITE_LIFE = 0,
PROJECTILE_INFINITE_LIFE = 1,
};
enum PROJECTILE_STATE
{
PROJECTILE_ATTACK = 0,
PROJECTILE_RETURN = 1,
};
2001-05-25 20:43:47 +02:00
enum
{ // For Dynamic ThingCache
MAX_SUBTYPE =1,
};
2001-01-22 23:24:53 +01:00
2001-06-14 18:07:48 +02:00
static CProjectile *Create();
2001-01-22 17:01:49 +01:00
void init();
void init( DVECTOR initPos, s16 initHeading );
2001-01-22 23:24:53 +01:00
void init( DVECTOR initPos, s16 initHeading, PROJECTILE_MOVEMENT_TYPE initMoveType, PROJECTILE_LIFETIME_TYPE initLifeType );
2001-02-08 16:42:59 +01:00
void init( DVECTOR initPos, s16 initHeading, PROJECTILE_MOVEMENT_TYPE initMoveType, PROJECTILE_LIFETIME_TYPE initLifeType, s32 initLifetime );
2001-01-22 17:01:49 +01:00
void shutdown();
void think(int _frames);
virtual void render();
void processEvent( GAME_EVENT evt, CThing *sourceThing );
2001-04-04 00:01:52 +02:00
void setMovementType( PROJECTILE_MOVEMENT_TYPE moveType );
PROJECTILE_MOVEMENT_TYPE getMovementType();
void setState( PROJECTILE_STATE newState );
2001-04-04 17:53:44 +02:00
void setLifeTime( PROJECTILE_LIFETIME_TYPE lifeType );
2001-04-04 00:01:52 +02:00
void setPosition( DVECTOR newPos );
2001-05-17 17:27:03 +02:00
void setHeading( s16 newHeading ) {m_heading = newHeading;}
2001-05-14 23:30:37 +02:00
void setOt( u8 newOt ) {m_ot=newOt;}
2001-05-17 17:27:03 +02:00
void setGraphic( int frame );
2001-05-21 20:20:33 +02:00
void setSpeed( u16 newSpeed ) {m_speed = newSpeed;}
2001-07-02 21:02:46 +02:00
void setXScale( s16 newScale ) {m_xScale = newScale;}
2001-07-10 19:07:10 +02:00
void setYScale( s16 newScale ) {m_yScale = newScale;}
2001-07-14 00:11:49 +02:00
void setShock() {m_shock = true;}
2001-04-12 16:55:55 +02:00
2001-01-22 17:01:49 +01:00
protected:
DVECTOR getScreenOffset();
2001-01-22 23:24:53 +01:00
bool processTargetSeek( int _frames, DVECTOR targetPos );
2001-04-12 18:33:48 +02:00
void collidedWith( CThing *_thisThing );
2001-01-22 17:01:49 +01:00
2001-02-08 21:00:58 +01:00
DVECTOR m_initPos;
2001-01-22 23:24:53 +01:00
s16 m_heading;
2001-05-17 17:27:03 +02:00
s16 m_initHeading;
2001-01-22 23:24:53 +01:00
s32 m_lifetime;
2001-02-08 21:00:58 +01:00
s32 m_extension;
2001-01-22 23:24:53 +01:00
PROJECTILE_MOVEMENT_TYPE m_movementType;
PROJECTILE_LIFETIME_TYPE m_lifetimeType;
PROJECTILE_STATE m_state;
u16 m_turnSpeed;
2001-05-14 23:30:37 +02:00
u8 m_ot;
2001-05-17 17:27:03 +02:00
int m_spriteFrame;
2001-05-21 20:20:33 +02:00
u16 m_speed;
2001-07-02 21:02:46 +02:00
s16 m_xScale;
2001-07-10 19:07:10 +02:00
s16 m_yScale;
2001-07-14 00:11:49 +02:00
u8 m_shock;
2001-01-22 17:01:49 +01:00
};
2001-04-07 00:21:01 +02:00
/*****************************************************************************/
class CPlayerProjectile : public CPlayerProjectileThing
{
public:
enum PLAYER_PROJECTILE_MOVEMENT_TYPE
{
PLAYER_PROJECTILE_DUMBFIRE = 0,
2001-06-11 17:42:07 +02:00
PLAYER_PROJECTILE_BOUNCING = 1,
2001-07-18 18:36:55 +02:00
PLAYER_PROJECTILE_DUMBFIRE_CORAL,
2001-04-07 00:21:01 +02:00
};
enum PLAYER_PROJECTILE_LIFETIME_TYPE
{
PLAYER_PROJECTILE_FINITE_LIFE = 0,
PLAYER_PROJECTILE_INFINITE_LIFE = 1,
};
2001-05-25 20:43:47 +02:00
enum
{ // For Dynamic ThingCache
2001-06-26 18:00:36 +02:00
MAX_SUBTYPE =2,
2001-05-25 20:43:47 +02:00
};
2001-04-07 00:21:01 +02:00
2001-06-14 18:07:48 +02:00
static CPlayerProjectile *Create();
2001-04-07 00:21:01 +02:00
void init();
void init( DVECTOR initPos, s16 initHeading );
void init( DVECTOR initPos, s16 initHeading, PLAYER_PROJECTILE_MOVEMENT_TYPE initMoveType, PLAYER_PROJECTILE_LIFETIME_TYPE initLifeType );
void init( DVECTOR initPos, s16 initHeading, PLAYER_PROJECTILE_MOVEMENT_TYPE initMoveType, PLAYER_PROJECTILE_LIFETIME_TYPE initLifeType, s32 initLifetime );
void shutdown();
2001-04-30 20:55:38 +02:00
virtual void think(int _frames);
2001-04-07 00:21:01 +02:00
virtual void render();
void processEvent( GAME_EVENT evt, CThing *sourceThing );
2001-05-25 20:43:47 +02:00
2001-04-07 00:21:01 +02:00
void setMovementType( PLAYER_PROJECTILE_MOVEMENT_TYPE moveType );
PLAYER_PROJECTILE_MOVEMENT_TYPE getMovementType();
void setLifeTime( PLAYER_PROJECTILE_LIFETIME_TYPE lifeType );
void setPosition( DVECTOR newPos );
2001-05-17 22:04:57 +02:00
void setRGB( u32 new_RGB );
2001-04-12 16:55:55 +02:00
2001-04-07 00:21:01 +02:00
protected:
DVECTOR getScreenOffset();
2001-04-12 18:33:48 +02:00
void collidedWith( CThing *_thisThing );
2001-04-07 00:21:01 +02:00
DVECTOR m_initPos;
s16 m_heading;
s32 m_lifetime;
s32 m_extension;
PLAYER_PROJECTILE_MOVEMENT_TYPE m_movementType;
PLAYER_PROJECTILE_LIFETIME_TYPE m_lifetimeType;
u16 m_turnSpeed;
2001-04-20 23:29:11 +02:00
int m_frame;
POLY_FT4 *SprFrame;
u8 m_reversed;
2001-05-17 21:28:08 +02:00
CVECTOR m_RGB;
2001-06-11 17:42:07 +02:00
s16 m_vertVelocity;
u8 m_bounceCount;
u8 m_hitTarget;
2001-04-07 00:21:01 +02:00
};
2001-01-22 17:01:49 +01:00
/*****************************************************************************/
#endif