123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- //***************************************************************************
- //
- // artillery.h -- File contains the artillery strike Object Class
- //
- // MechCommander 2
- //
- //---------------------------------------------------------------------------//
- // Copyright (C) Microsoft Corporation. All rights reserved. //
- //===========================================================================//
- #ifndef ARTLRY_H
- #define ARTLRY_H
- //---------------------------------------------------------------------------
- #ifndef DARTLRY_H
- #include "dartlry.h"
- #endif
- #ifndef GAMEOBJ_H
- #include "gameobj.h"
- #endif
- #ifndef OBJTYPE_H
- #include "objtype.h"
- #endif
- #ifndef CONTACT_H
- #include "contact.h"
- #endif
- #include <gosFX\gosfxheaders.hpp>
- //***************************************************************************
- #define NO_RAM_FOR_ARTY 0xDEFD0000
- #define NO_RAM_FOR_ARTY_SHAPES 0xDEFD0001
- #define NO_RAM_FOR_ARTILLERY 0xDEFD0002
- #define NO_APPEARANCE_TYPE_FOR_ARTY 0xDEFD0003
- #define NO_APPEARANCE_FOR_ARTY 0xDEFD0004
- #define APPEARANCE_NOT_VFX_APPEAR 0xDCDC0009
- #define CLAN_SEEN_FLAG 2
- #define IS_SEEN_FLAG 1
- #define MAX_ARTILLERY_EXPLOSIONS 32
- //***************************************************************************
- class ArtilleryChunk {
- public:
- char commanderId;
- char strikeType;
- long cellRC[2];
- char secondsToImpact;
- unsigned long data;
- public:
- void* operator new (size_t mySize);
- void operator delete (void* us);
-
- void init (void) {
- commanderId = -1;
- strikeType = -1;
- cellRC[0] = -1;
- cellRC[1] = -1;
- secondsToImpact = -1;
- data = 0;
- }
- void destroy (void) {
- }
- ArtilleryChunk (void) {
- init();
- }
- ~ArtilleryChunk (void) {
- destroy();
- }
- void build (long commanderId,
- long strikeType,
- Stuff::Vector3D location,
- long seconds);
- void pack (void);
- void unpack (void);
- bool equalTo (ArtilleryChunkPtr chunk);
- };
- //***************************************************************************
- class ArtilleryType : public ObjectType {
- public:
- MemoryPtr frameList; //Pointer to JMiles shape file binary
- unsigned long frameCount; //Number of frames in shape file
- unsigned long startFrame; //Frame in List to start with.
- float frameRate; //Speed at which frames playback
-
- float nominalTimeToImpact;
- float nominalTimeToLaunch;
-
- float nominalDamage;
- float nominalMajorRange;
- float nominalMajorHits;
- float nominalMinorRange;
- float nominalMinorHits;
-
- float nominalSensorTime;
- float nominalSensorRange;
-
- float fontScale;
- float fontXOffset;
- float fontYOffset;
- unsigned long fontColor;
- long numExplosions;
- float* explosionOffsetX;
- float* explosionOffsetY;
- float* explosionDelay;
- long numExplosionsPerExplosion;
- long explosionRandomX;
- long explosionRandomY;
- long minArtilleryHeadRange;
-
- public:
- void init (void);
-
- ArtilleryType (void) {
- init();
- }
-
- virtual long init (FilePtr objFile, unsigned long fileSize);
-
- long init (FitIniFilePtr objFile);
-
- ~ArtilleryType (void) {
- destroy();
- }
-
- virtual void destroy (void);
-
- virtual GameObjectPtr createInstance (void);
-
- virtual bool handleCollision (GameObjectPtr collidee, GameObjectPtr collider);
- virtual bool handleDestruction (GameObjectPtr collidee, GameObjectPtr collider);
- };
- //***************************************************************************
- typedef union _ArtilleryInfo {
- struct {
- float timeToImpact; //Time until strike goes off.
- float timeToLaunch; //Time until strike is launched (and unmoveable).
- float sensorRange; //If I am a sensor round, how big a range.
- float timeToBlind; //How long do I return sensor data.
- short sensorSystemIndex;
- float contactUpdate;
- char timeString[5];
- unsigned long explosionOffFlags;
- } strike;
- } ArtilleryInfo;
- typedef struct _ArtilleryData : public GameObjectData
- {
- char artilleryType;
- char teamId;
- char commanderId;
- ArtilleryInfo info;
- long effectId;
- bool bombRunStarted;
- bool inView;
- Stuff::Vector3D iFacePosition;
- } ArtilleryData;
- class Artillery : public GameObject
- {
- //-------------
- // Data Members
- public:
- char artilleryType;
- char teamId;
- char commanderId;
- ArtilleryInfo info;
- long effectId;
-
- gosFX::Effect *hitEffect;
- gosFX::Effect *rightContrail;
- gosFX::Effect *leftContrail;
-
- Appearance *bomber;
- bool bombRunStarted;
-
- bool inView;
- Stuff::Vector3D iFacePosition;
-
-
- //Member Functions
- //-----------------
- public:
- virtual void init (bool create);
- virtual void init (bool create, long _artilleryType);
- Artillery (void) : GameObject()
- {
- init(true);
- }
- ~Artillery (void)
- {
- destroy();
- }
- bool recalcBounds (CameraPtr myEye);
-
- void setArtilleryData (float impactTime)
- {
- info.strike.timeToImpact = impactTime;
- info.strike.timeToLaunch = impactTime - 10;
- }
- virtual void setSensorRange (float range);
- void setSensorData (TeamPtr team, float sensorTime = -1.0, float range = -1.0);
- void setJustCreated (void);
- float getTimeToImpact (void)
- {
- return(info.strike.timeToImpact);
- }
-
- float getTimeToLaunch (void)
- {
- return(info.strike.timeToLaunch);
- }
- bool launched (void)
- {
- return(info.strike.timeToLaunch <= 0);
- }
-
- bool impacted(void)
- {
- return(info.strike.timeToImpact <= 0);
- }
-
- void drawSelectBox (unsigned char color);
- bool isStrike (void)
- {
- static bool lookup[NUM_ARTILLERY_TYPES] = {true, true, false};
- return(lookup[artilleryType]);
- }
- bool isSensor (void)
- {
- static bool lookup[NUM_ARTILLERY_TYPES] = {false, false, true};
- return(lookup[artilleryType]);
- }
- virtual void destroy (void);
-
- virtual long update (void);
- virtual void render (void);
- virtual void init (bool create, ObjectTypePtr _type);
- virtual long kill (void)
- {
- return(NO_ERR);
- }
-
- virtual void setCommanderId (long _commanderId);
- virtual long getCommanderId (void)
- {
- return commanderId;
- }
- virtual long setTeamId (long _teamId, bool setup);
-
- virtual long getTeamId (void)
- {
- return(teamId);
- }
- virtual bool isFriendly (TeamPtr team);
- virtual bool isEnemy (TeamPtr team);
- virtual bool isNeutral (TeamPtr team);
- virtual TeamPtr getTeam (void);
- virtual long handleWeaponHit (WeaponShotInfoPtr shotInfo, bool addMultiplayChunk = false);
- virtual void handleStaticCollision (void);
- virtual void Save (PacketFilePtr file, long packetNum);
- void Load (ArtilleryData *data);
- void CopyTo (ArtilleryData *data);
- };
- //---------------------------------------------------------------------------
- extern void CallArtillery (long commanderId,
- long strikeType,
- Stuff::Vector3D strikeLoc,
- long secondsToImpact,
- bool randomOffset);
- extern void IfaceCallStrike (long strikeID,
- Stuff::Vector3D* strikeLoc,
- GameObjectPtr strikeTarget,
- bool playerStrike = true,
- bool clanStrike = false,
- float timeToImpact = -1.00);
- //---------------------------------------------------------------------------
- #endif
|