mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-12 19:31:41 +00:00
231 lines
8.5 KiB
C#
231 lines
8.5 KiB
C#
|
|
//-----------------------------------------------------------------------------
|
||
|
|
// Copyright (c) 2012 GarageGames, LLC
|
||
|
|
//
|
||
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
|
// of this software and associated documentation files (the "Software"), to
|
||
|
|
// deal in the Software without restriction, including without limitation the
|
||
|
|
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||
|
|
// sell copies of the Software, and to permit persons to whom the Software is
|
||
|
|
// furnished to do so, subject to the following conditions:
|
||
|
|
//
|
||
|
|
// The above copyright notice and this permission notice shall be included in
|
||
|
|
// all copies or substantial portions of the Software.
|
||
|
|
//
|
||
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||
|
|
// IN THE SOFTWARE.
|
||
|
|
//-----------------------------------------------------------------------------
|
||
|
|
|
||
|
|
datablock SFXProfile( MineArmedSound )
|
||
|
|
{
|
||
|
|
filename = "data/FPSGameplay/sound/weapons/mine_armed";
|
||
|
|
description = AudioClose3d;
|
||
|
|
preload = true;
|
||
|
|
};
|
||
|
|
|
||
|
|
datablock SFXProfile( MineSwitchinSound )
|
||
|
|
{
|
||
|
|
filename = "data/FPSGameplay/sound/weapons/wpn_proximitymine_switchin";
|
||
|
|
description = AudioClose3D;
|
||
|
|
preload = true;
|
||
|
|
};
|
||
|
|
|
||
|
|
datablock SFXProfile( MineTriggeredSound )
|
||
|
|
{
|
||
|
|
filename = "data/FPSGameplay/sound/weapons/mine_trigger";
|
||
|
|
description = AudioClose3d;
|
||
|
|
preload = true;
|
||
|
|
};
|
||
|
|
|
||
|
|
datablock ProximityMineData( ProxMine )
|
||
|
|
{
|
||
|
|
// ShapeBaseData fields
|
||
|
|
category = "Weapon";
|
||
|
|
shapeFile = "data/FPSGameplay/art/shapes/weapons/ProxMine/TP_ProxMine.DAE";
|
||
|
|
explosion = GrenadeLauncherExplosion;
|
||
|
|
|
||
|
|
// ItemData fields
|
||
|
|
sticky = true;
|
||
|
|
mass = 2;
|
||
|
|
elasticity = 0.2;
|
||
|
|
friction = 0.6;
|
||
|
|
simpleServerCollision = false;
|
||
|
|
|
||
|
|
// ProximityMineData fields
|
||
|
|
armingDelay = 3.5;
|
||
|
|
armingSound = MineArmedSound;
|
||
|
|
|
||
|
|
autoTriggerDelay = 0;
|
||
|
|
triggerOnOwner = true;
|
||
|
|
triggerRadius = 3.0;
|
||
|
|
triggerDelay = 0.45;
|
||
|
|
triggerSound = MineTriggeredSound;
|
||
|
|
|
||
|
|
explosionOffset = 0.1;
|
||
|
|
|
||
|
|
// dynamic fields
|
||
|
|
pickUpName = "a proximity mine";
|
||
|
|
description = "Proximity Mine";
|
||
|
|
maxInventory = 20;
|
||
|
|
image = ProxMineImage;
|
||
|
|
|
||
|
|
previewImage = 'mine.png';
|
||
|
|
reticle = 'blank';
|
||
|
|
zoomReticle = 'blank';
|
||
|
|
|
||
|
|
damageType = "MineDamage"; // type of damage applied to objects in radius
|
||
|
|
radiusDamage = 300; // amount of damage to apply to objects in radius
|
||
|
|
damageRadius = 8; // search radius to damage objects when exploding
|
||
|
|
areaImpulse = 2000; // magnitude of impulse to apply to objects in radius
|
||
|
|
};
|
||
|
|
|
||
|
|
datablock ShapeBaseImageData( ProxMineImage )
|
||
|
|
{
|
||
|
|
// Basic Item properties
|
||
|
|
shapeFile = "data/FPSGameplay/art/shapes/weapons/ProxMine/TP_ProxMine.DAE";
|
||
|
|
shapeFileFP = "data/FPSGameplay/art/shapes/weapons/ProxMine/FP_ProxMine.DAE";
|
||
|
|
|
||
|
|
imageAnimPrefix = "ProxMine";
|
||
|
|
imageAnimPrefixFP = "ProxMine";
|
||
|
|
|
||
|
|
// Specify mount point & offset for 3rd person, and eye offset
|
||
|
|
// for first person rendering.
|
||
|
|
mountPoint = 0;
|
||
|
|
firstPerson = true;
|
||
|
|
useEyeNode = true;
|
||
|
|
|
||
|
|
// When firing from a point offset from the eye, muzzle correction
|
||
|
|
// will adjust the muzzle vector to point to the eye LOS point.
|
||
|
|
// Since this weapon doesn't actually fire from the muzzle point,
|
||
|
|
// we need to turn this off.
|
||
|
|
correctMuzzleVector = false;
|
||
|
|
|
||
|
|
// Add the WeaponImage namespace as a parent, WeaponImage namespace
|
||
|
|
// provides some hooks into the inventory system.
|
||
|
|
class = "WeaponImage";
|
||
|
|
className = "WeaponImage";
|
||
|
|
|
||
|
|
// Projectiles and Ammo.
|
||
|
|
item = ProxMine;
|
||
|
|
|
||
|
|
// Shake camera while firing.
|
||
|
|
shakeCamera = false;
|
||
|
|
camShakeFreq = "0 0 0";
|
||
|
|
camShakeAmp = "0 0 0";
|
||
|
|
|
||
|
|
// Images have a state system which controls how the animations
|
||
|
|
// are run, which sounds are played, script callbacks, etc. This
|
||
|
|
// state system is downloaded to the client so that clients can
|
||
|
|
// predict state changes and animate accordingly. The following
|
||
|
|
// system supports basic ready->fire->reload transitions as
|
||
|
|
// well as a no-ammo->dryfire idle state.
|
||
|
|
|
||
|
|
// Initial start up state
|
||
|
|
stateName[0] = "Preactivate";
|
||
|
|
stateTransitionOnLoaded[0] = "Activate";
|
||
|
|
stateTransitionOnNoAmmo[0] = "Activate";
|
||
|
|
|
||
|
|
// Activating the gun. Called when the weapon is first
|
||
|
|
// mounted and there is ammo.
|
||
|
|
stateName[1] = "Activate";
|
||
|
|
stateTransitionGeneric0In[1] = "SprintEnter";
|
||
|
|
stateTransitionOnTimeout[1] = "Ready";
|
||
|
|
stateTimeoutValue[1] = 3.0;
|
||
|
|
stateSequence[1] = "switch_in";
|
||
|
|
stateShapeSequence[1] = "Reload";
|
||
|
|
stateSound[1] = MineSwitchinSound;
|
||
|
|
|
||
|
|
// Ready to fire, just waiting for the trigger
|
||
|
|
stateName[2] = "Ready";
|
||
|
|
stateTransitionGeneric0In[2] = "SprintEnter";
|
||
|
|
stateTransitionOnMotion[2] = "ReadyMotion";
|
||
|
|
stateTransitionOnTriggerDown[2] = "Fire";
|
||
|
|
stateScaleAnimation[2] = false;
|
||
|
|
stateScaleAnimationFP[2] = false;
|
||
|
|
stateSequence[2] = "idle";
|
||
|
|
|
||
|
|
// Ready to fire with player moving
|
||
|
|
stateName[3] = "ReadyMotion";
|
||
|
|
stateTransitionGeneric0In[3] = "SprintEnter";
|
||
|
|
stateTransitionOnNoMotion[3] = "Ready";
|
||
|
|
stateScaleAnimation[3] = false;
|
||
|
|
stateScaleAnimationFP[3] = false;
|
||
|
|
stateSequenceTransitionIn[3] = true;
|
||
|
|
stateSequenceTransitionOut[3] = true;
|
||
|
|
stateTransitionOnTriggerDown[3] = "Fire";
|
||
|
|
stateSequence[3] = "run";
|
||
|
|
|
||
|
|
// Wind up to throw the ProxMine
|
||
|
|
stateName[4] = "Fire";
|
||
|
|
stateTransitionGeneric0In[4] = "SprintEnter";
|
||
|
|
stateTransitionOnTimeout[4] = "Fire2";
|
||
|
|
stateTimeoutValue[4] = 0.8;
|
||
|
|
stateFire[4] = true;
|
||
|
|
stateRecoil[4] = "";
|
||
|
|
stateAllowImageChange[4] = false;
|
||
|
|
stateSequence[4] = "Fire";
|
||
|
|
stateSequenceNeverTransition[4] = true;
|
||
|
|
stateShapeSequence[4] = "Fire";
|
||
|
|
|
||
|
|
// Throw the actual mine
|
||
|
|
stateName[5] = "Fire2";
|
||
|
|
stateTransitionGeneric0In[5] = "SprintEnter";
|
||
|
|
stateTransitionOnTriggerUp[5] = "Reload";
|
||
|
|
stateTimeoutValue[5] = 0.7;
|
||
|
|
stateAllowImageChange[5] = false;
|
||
|
|
stateSequenceNeverTransition[5] = true;
|
||
|
|
stateSequence[5] = "fire_release";
|
||
|
|
stateShapeSequence[5] = "Fire_Release";
|
||
|
|
stateScript[5] = "onFire";
|
||
|
|
|
||
|
|
// Play the reload animation, and transition into
|
||
|
|
stateName[6] = "Reload";
|
||
|
|
stateTransitionGeneric0In[6] = "SprintEnter";
|
||
|
|
stateTransitionOnTimeout[6] = "Ready";
|
||
|
|
stateWaitForTimeout[6] = true;
|
||
|
|
stateTimeoutValue[6] = 3.0;
|
||
|
|
stateSequence[6] = "switch_in";
|
||
|
|
stateShapeSequence[6] = "Reload";
|
||
|
|
stateSound[6] = MineSwitchinSound;
|
||
|
|
|
||
|
|
// Start Sprinting
|
||
|
|
stateName[7] = "SprintEnter";
|
||
|
|
stateTransitionGeneric0Out[7] = "SprintExit";
|
||
|
|
stateTransitionOnTimeout[7] = "Sprinting";
|
||
|
|
stateWaitForTimeout[7] = false;
|
||
|
|
stateTimeoutValue[7] = 0.25;
|
||
|
|
stateWaitForTimeout[7] = false;
|
||
|
|
stateScaleAnimation[7] = true;
|
||
|
|
stateScaleAnimationFP[7] = true;
|
||
|
|
stateSequenceTransitionIn[7] = true;
|
||
|
|
stateSequenceTransitionOut[7] = true;
|
||
|
|
stateAllowImageChange[7] = false;
|
||
|
|
stateSequence[7] = "run2sprint";
|
||
|
|
|
||
|
|
// Sprinting
|
||
|
|
stateName[8] = "Sprinting";
|
||
|
|
stateTransitionGeneric0Out[8] = "SprintExit";
|
||
|
|
stateWaitForTimeout[8] = false;
|
||
|
|
stateScaleAnimation[8] = false;
|
||
|
|
stateScaleAnimationFP[8] = false;
|
||
|
|
stateSequenceTransitionIn[8] = true;
|
||
|
|
stateSequenceTransitionOut[8] = true;
|
||
|
|
stateAllowImageChange[8] = false;
|
||
|
|
stateSequence[8] = "sprint";
|
||
|
|
|
||
|
|
// Stop Sprinting
|
||
|
|
stateName[9] = "SprintExit";
|
||
|
|
stateTransitionGeneric0In[9] = "SprintEnter";
|
||
|
|
stateTransitionOnTimeout[9] = "Ready";
|
||
|
|
stateWaitForTimeout[9] = false;
|
||
|
|
stateTimeoutValue[9] = 0.5;
|
||
|
|
stateSequenceTransitionIn[9] = true;
|
||
|
|
stateSequenceTransitionOut[9] = true;
|
||
|
|
stateAllowImageChange[9] = false;
|
||
|
|
stateSequence[9] = "sprint2run";
|
||
|
|
};
|