1
0
This repository has been archived on 2025-10-04. You can view files and clone it, but cannot push or open issues or pull requests.
Files
cutealien 8254c0848c Minor cleanup and comment fixes in example 21
Mostly spelling stuff. 
Only real code change is that Irrlicht has by now a function to fill images, so no more extra code for that needed.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6310 dfc29bdd-3216-0410-991c-e03cc46cb475
2022-03-17 20:12:40 +00:00

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__