123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- //***************************************************************************
- //
- // turret.h -- File contains the Turret Object Class
- //
- // MechCommander 2
- //
- //---------------------------------------------------------------------------//
- // Copyright (C) Microsoft Corporation. All rights reserved. //
- //===========================================================================//
- #ifndef TURRET_H
- #define TURRET_H
- //---------------------------------------------------------------------------
- #ifndef DTURRET_H
- #include "dturret.h"
- #endif
- #ifndef OBJMGR_H
- #include "objmgr.h"
- #endif
- #ifndef TERROBJ_H
- #include "terrobj.h"
- #endif
- //---------------------------------------------------------------------------
- // Macro Definitions
- #define NO_RAM_FOR_BUILDING 0xDCDC0006
- #define NO_APPEARANCE_TYPE_FOR_BLD 0xDCDC0007
- #define NO_APPEARANCE_FOR_BLD 0xDCDC0008
- #define APPEARANCE_NOT_VFX_APPEAR 0xDCDC0009
- #define MAX_TURRET_WEAPONFIRE_CHUNKS 32
- #define MAX_TURRET_WEAPONS 4
- //---------------------------------------------------------------------------
- class TurretType : public ObjectType {
- protected:
- float damageLevel;
- //unsigned long dmgLevelClosed;
- public:
-
- unsigned long blownEffectId;
- unsigned long normalEffectId;
- unsigned long damageEffectId;
-
- float baseTonnage;
-
- float explDmg;
- float explRad;
-
- float littleExtent;
- float LOSFactor;
-
- float engageRadius;
- float turretYawRate;
- long weaponMasterId[MAX_TURRET_WEAPONS];
- long pilotSkill;
- float punch;
-
- long turretTypeName;
- long buildingDescriptionID;
- public:
- void init (void) {
- ObjectType::init();
- objectTypeClass = TURRET_TYPE;
- objectClass = TURRET;
- damageLevel = 0.0;
- blownEffectId = 0xFFFFFFFF;
- normalEffectId = 0xFFFFFFFF;
- damageEffectId = 0xFFFFFFFF;
- explDmg = explRad = 0.0;
- baseTonnage = 0.0;
- weaponMasterId[0] = weaponMasterId[1] = weaponMasterId[2] = weaponMasterId[3] = -1;
- pilotSkill = 0;
- punch = 0.0;
- turretYawRate = 0.0;
- turretTypeName = 0;
- LOSFactor = 1.0f;
- }
-
- TurretType (void) {
- init();
- }
-
- virtual long init (FilePtr objFile, unsigned long fileSize);
- long init (FitIniFilePtr objFile);
-
- ~TurretType (void) {
- destroy();
- }
-
- float getDamageLevel (void) {
- return(damageLevel);
- }
-
- virtual void destroy (void);
-
- virtual GameObjectPtr createInstance (void);
-
- virtual bool handleCollision (GameObjectPtr collidee, GameObjectPtr collider);
-
- virtual bool handleDestruction (GameObjectPtr collidee, GameObjectPtr collider);
- };
- //---------------------------------------------------------------------------
- typedef struct _TurretData : public TerrainObjectData
- {
- char teamId;
- float turretRotation;
- bool didReveal;
- GameObjectWatchID targetWID;
- float readyTime[MAX_TURRET_WEAPONS];
- float lastFireTime[MAX_TURRET_WEAPONS];
- float minRange; // current min attack range
- float maxRange; // current max attack range
- long numFunctionalWeapons; // takes into account damage, etc.
- float idleWait;
- Stuff::Vector3D idlePosition;
- Stuff::Vector3D oldPosition;
- DWORD parentId;
- GameObjectWatchID parent;
- long currentWeaponNode;
- } TurretData;
- class Turret : public TerrainObject {
-
- public:
-
- char teamId;
- float turretRotation;
- bool didReveal;
- GameObjectWatchID targetWID;
- float readyTime[MAX_TURRET_WEAPONS];
- float lastFireTime[MAX_TURRET_WEAPONS];
- float minRange; // current min attack range
- float maxRange; // current max attack range
- long numFunctionalWeapons; // takes into account damage, etc.
-
- long netRosterIndex;
- long numWeaponFireChunks[2];
- unsigned long weaponFireChunks[2][MAX_TURRET_WEAPONFIRE_CHUNKS];
- TG_LightPtr pointLight;
- DWORD lightId;
- float idleWait;
- Stuff::Vector3D idlePosition;
- Stuff::Vector3D oldPosition;
- DWORD parentId;
- GameObjectWatchID parent;
- long currentWeaponNode;
- static bool turretsEnabled[MAX_TEAMS];
- public:
- void init (bool create);
- Turret (void) : TerrainObject() {
- init(true);
- }
- ~Turret (void) {
- destroy();
- }
- virtual void updateDebugWindow (GameDebugWindow* debugWindow);
- virtual long setTeamId (long _teamId, bool setup);
-
- virtual long getTeamId (void) {
- return(teamId);
- }
- virtual TeamPtr getTeam (void);
- virtual bool isFriendly (TeamPtr team);
- virtual bool isEnemy (TeamPtr team);
- virtual bool isNeutral (TeamPtr team);
- virtual void destroy (void);
-
- virtual long update (void);
-
- virtual void render (void);
-
- virtual void init (bool create, ObjectTypePtr _type);
- virtual long handleWeaponHit (WeaponShotInfoPtr shotInfo, bool addMultiplayChunk = false);
- long getNetRosterIndex (void) {
- return(netRosterIndex);
- }
- void setNetRosterIndex (long index) {
- netRosterIndex = index;
- }
- void lightOnFire (float timeToBurn);
- virtual long kill (void)
- {
- //Do nothing for now. Later, Buildings may do something.
- return NO_ERR;
- }
- virtual bool isBuilding(void)
- {
- return (true);
- }
-
- virtual void getBlockAndVertexNumber (long &blockNum, long &vertexNum) {
- blockNum = blockNumber;
- vertexNum = vertexNumber;
- }
-
- bool isWeaponReady (long weaponId);
- bool isWeaponMissile (long weaponId);
- bool isWeaponStreak (long weaponId);
- float calcAttackChance (GameObjectPtr target, long* range, long weaponId);
-
- void recordWeaponFireTime (long weaponId);
-
- void startWeaponRecycle (long weaponId);
- long getNumWeaponFireChunks (long which)
- {
- return(numWeaponFireChunks[which]);
- }
- long clearWeaponFireChunks (long which);
- long addWeaponFireChunk (long which, WeaponFireChunkPtr chunk);
- long addWeaponFireChunks (long which, unsigned long* packedChunkBuffer, long numChunks);
- long grabWeaponFireChunks (long which, unsigned long* packedChunkBuffer);
- virtual long updateWeaponFireChunks (long which);
- void fireWeapon (GameObjectPtr target, long weaponId);
-
- virtual Stuff::Vector3D getPositionFromHS (long weaponNum);
- virtual float relFacingTo (Stuff::Vector3D goal, long bodyLocation = -1);
-
- long handleWeaponFire (long weaponIndex,
- GameObjectPtr target,
- Stuff::Vector3D* targetPoint,
- bool hit,
- float entryAngle,
- long numMissiles,
- long hitLocation);
- virtual void printFireWeaponDebugInfo (GameObjectPtr target, Stuff::Vector3D* targetPoint, long chance, long roll, WeaponShotInfo* shotInfo);
- virtual void printHandleWeaponHitDebugInfo (WeaponShotInfo* shotInfo);
-
- float getLittleExtent (void)
- {
- return (((TurretTypePtr)getObjectType())->littleExtent);
- }
- virtual bool isLinked (void);
- virtual GameObjectPtr getParent (void);
- virtual void setParentId (DWORD pId);
- virtual long getDescription(){ return ((TurretType*)getObjectType())->buildingDescriptionID; }
- long updateAnimations (void);
-
- virtual Stuff::Vector3D getLOSPosition (void);
-
- virtual float getDestructLevel (void)
- {
- return ((TurretTypePtr)getObjectType())->getDamageLevel() - damage;
- }
- virtual void setDamage (float newDamage);
- virtual long calcFireRanges (void);
- virtual void Save (PacketFilePtr file, long packetNum);
- void CopyTo (TurretData *data);
- void Load (TurretData *data);
- virtual void renderShadows (void);
- };
- //***************************************************************************
- #endif
|