forked from Mirrorlandia_minetest/irrlicht
2d63fdba3d
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6337 dfc29bdd-3216-0410-991c-e03cc46cb475
150 lines
3.0 KiB
C++
150 lines
3.0 KiB
C++
/*!
|
|
Model Factory.
|
|
create the additional scenenodes for ( bullets, health... )
|
|
|
|
Defines the Entities for Quake3
|
|
*/
|
|
#ifndef __QUAKE3_FACTORY__H_INCLUDED__
|
|
#define __QUAKE3_FACTORY__H_INCLUDED__
|
|
|
|
using namespace irr;
|
|
using namespace scene;
|
|
using namespace gui;
|
|
using namespace video;
|
|
using namespace core;
|
|
using namespace quake3;
|
|
using namespace io;
|
|
|
|
|
|
|
|
//! Defines to which group the entities belong
|
|
enum eItemGroup
|
|
{
|
|
WEAPON,
|
|
AMMO,
|
|
ARMOR,
|
|
HEALTH,
|
|
POWERUP
|
|
};
|
|
|
|
//! define a supgroup for the item. for e.q the Weapons
|
|
enum eItemSubGroup
|
|
{
|
|
SUB_NONE = 0,
|
|
GAUNTLET,
|
|
MACHINEGUN,
|
|
SHOTGUN,
|
|
GRENADE_LAUNCHER,
|
|
ROCKET_LAUNCHER,
|
|
LIGHTNING,
|
|
RAILGUN,
|
|
PLASMAGUN,
|
|
BFG,
|
|
GRAPPLING_HOOK,
|
|
NAILGUN,
|
|
PROX_LAUNCHER,
|
|
CHAINGUN,
|
|
};
|
|
|
|
//! apply a special effect to the shader
|
|
enum eItemSpecialEffect
|
|
{
|
|
SPECIAL_SFX_NONE = 0,
|
|
SPECIAL_SFX_ROTATE = 1,
|
|
SPECIAL_SFX_BOUNCE = 2,
|
|
SPECIAL_SFX_ROTATE_1 = 4,
|
|
};
|
|
|
|
// a list for defining a model
|
|
struct SItemElement
|
|
{
|
|
const c8 *key;
|
|
const c8 *model[2];
|
|
const c8 *sound;
|
|
const c8 *icon;
|
|
const c8 *pickup;
|
|
s32 value;
|
|
eItemGroup group;
|
|
eItemSubGroup sub;
|
|
u32 special;
|
|
};
|
|
|
|
|
|
//! Get's an entity based on it's key
|
|
const SItemElement * getItemElement ( const stringc& key );
|
|
|
|
/*!
|
|
Quake3 Model Factory.
|
|
Takes the mesh buffers and creates scenenodes for their associated shaders
|
|
*/
|
|
void Q3ShaderFactory ( Q3LevelLoadParameter &loadParam,
|
|
IrrlichtDevice *device,
|
|
IQ3LevelMesh* mesh,
|
|
eQ3MeshIndex meshIndex,
|
|
ISceneNode *parent,
|
|
IMetaTriangleSelector *meta,
|
|
bool showShaderName
|
|
);
|
|
|
|
|
|
/*!
|
|
Creates Model based on the entity list
|
|
*/
|
|
void Q3ModelFactory ( Q3LevelLoadParameter &loadParam,
|
|
IrrlichtDevice *device,
|
|
IQ3LevelMesh* masterMesh,
|
|
ISceneNode *parent,
|
|
bool showShaderName
|
|
);
|
|
|
|
/*!
|
|
so we need a good starting Position in the level.
|
|
we can ask the Quake3 Loader for all entities with class_name "info_player_deathmatch"
|
|
*/
|
|
s32 Q3StartPosition ( IQ3LevelMesh* mesh,
|
|
ICameraSceneNode* camera,
|
|
s32 startposIndex,
|
|
const vector3df &translation
|
|
);
|
|
/*!
|
|
gets a accumulated force on a given surface
|
|
*/
|
|
vector3df getGravity ( const c8 * surface );
|
|
|
|
|
|
/*
|
|
Dynamically load the Irrlicht Library
|
|
*/
|
|
funcptr_createDevice load_createDevice ( const c8 * filename);
|
|
funcptr_createDeviceEx load_createDeviceEx ( const c8 * filename);
|
|
|
|
|
|
//! Macro for save Dropping an Element
|
|
#define dropElement(x) if (x) { x->remove(); x = 0; }
|
|
|
|
|
|
/*
|
|
get the current collision response camera animator
|
|
*/
|
|
ISceneNodeAnimatorCollisionResponse* camCollisionResponse( IrrlichtDevice * device );
|
|
|
|
//! internal animation
|
|
enum eTimeFireFlag
|
|
{
|
|
FIRED = 1,
|
|
};
|
|
|
|
struct TimeFire
|
|
{
|
|
u32 flags;
|
|
u32 next;
|
|
u32 delta;
|
|
};
|
|
|
|
void setTimeFire ( TimeFire *t, u32 delta, u32 flags = 0 );
|
|
void checkTimeFire ( TimeFire *t, u32 listSize, u32 now );
|
|
|
|
#endif // __QUAKE3_FACTORY__H_INCLUDED__
|
|
|
|
|