Torque3D/Templates/Modules/FPSGameplay/datablocks/vehicles/cheetahCar.cs
Areloch 28c4bad74d Catches FPSGameplay module up to new gamemode and module paradigm
Adds additional args for callGamemodeFunction
Adds default Observer camera datablock
2019-10-04 21:00:58 -05:00

391 lines
13 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(cheetahEngine)
{
preload = "1";
description = "AudioCloseLoop3D";
fileName = "data/FPSGameplay/sound/cheetah/cheetah_engine.ogg";
};
datablock SFXProfile(cheetahSqueal)
{
preload = "1";
description = "AudioDefault3D";
fileName = "data/FPSGameplay/sound/cheetah/cheetah_squeal.ogg";
};
datablock SFXProfile(hardImpact)
{
preload = "1";
description = "AudioDefault3D";
fileName = "data/FPSGameplay/sound/cheetah/hardImpact.ogg";
};
datablock SFXProfile(softImpact)
{
preload = "1";
description = "AudioDefault3D";
fileName = "data/FPSGameplay/sound/cheetah/softImpact.ogg";
};
datablock SFXProfile(DirtKickup)
{
preload = "1";
description = "AudioDefault3D";
fileName = "data/FPSGameplay/sound/cheetah/softImpact.ogg";
};
datablock SFXProfile(CheetahTurretFireSound)
{
//filename = "data/FPSGameplay/sound/cheetah/turret_firing.wav";
filename = "data/FPSGameplay/sound/turret/wpn_turret_fire.wav";
description = BulletFireDesc;
preload = true;
};
datablock ParticleData(CheetahTireParticle)
{
textureName = "data/FPSGameplay/art/particles/dustParticle";
dragCoefficient = "1.99902";
gravityCoefficient = "-0.100122";
inheritedVelFactor = "0.0998043";
constantAcceleration = 0.0;
lifetimeMS = 1000;
lifetimeVarianceMS = 400;
colors[0] = "0.456693 0.354331 0.259843 1";
colors[1] = "0.456693 0.456693 0.354331 0";
sizes[0] = "0.997986";
sizes[1] = "3.99805";
sizes[2] = "1.0";
sizes[3] = "1.0";
times[0] = "0.0";
times[1] = "1";
times[2] = "1";
times[3] = "1";
};
datablock ParticleEmitterData(CheetahTireEmitter)
{
ejectionPeriodMS = 20;
periodVarianceMS = 10;
ejectionVelocity = "14.57";
velocityVariance = 1.0;
ejectionOffset = 0.0;
thetaMin = 0;
thetaMax = 60;
phiReferenceVel = 0;
phiVariance = 360;
overrideAdvance = false;
particles = "CheetahTireParticle";
blendStyle = "ADDITIVE";
};
datablock ProjectileData(TurretProjectile)
{
projectileShapeName = "data/FPSGameplay/art/shapes/weapons/shared/rocket.dts";
directDamage = 10;
radiusDamage = 15;
damageRadius = 3;
areaImpulse = 1200;
explosion = RocketLauncherExplosion;
waterExplosion = RocketLauncherWaterExplosion;
decal = ScorchRXDecal;
splash = RocketSplash;
muzzleVelocity = 250;
velInheritFactor = 0.7;
armingDelay = 0;
lifetime = 5000;
fadeDelay = 4500;
bounceElasticity = 0;
bounceFriction = 0;
isBallistic = false;
gravityMod = 0.80;
damageType = "RocketDamage";
};
datablock ParticleEmitterData(TurretFireSmokeEmitter)
{
ejectionPeriodMS = 10;
periodVarianceMS = 5;
ejectionVelocity = 6.5;
velocityVariance = 1.0;
thetaMin = "0";
thetaMax = "0";
lifetimeMS = 350;
particles = "GunFireSmoke";
blendStyle = "NORMAL";
softParticles = "0";
alignParticles = "0";
orientParticles = "0";
};
datablock ShapeBaseImageData(TurretImage)
{
// Basic Item properties
shapeFile = "data/FPSGameplay/art/shapes/Cheetah/Cheetah_Turret.DAE";
emap = true;
// Specify mount point & offset for 3rd person, and eye offset
// for first person rendering.
mountPoint = 1;
firstPerson = false;
// 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.
className = "WeaponImage";
class = "WeaponImage";
// Projectile and Ammo
ammo = BulletAmmo;
projectile = TurretProjectile;
projectileType = Projectile;
projectileSpread = "0.01";
// Weapon lights up while firing
lightColor = "0.992126 0.968504 0.708661 1";
lightRadius = "4";
lightDuration = "100";
lightType = "WeaponFireLight";
lightBrightness = 2;
// Shake camera while firing.
shakeCamera = false;
// 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.
useRemainderDT = true;
// Initial start up state
stateName[0] = "Preactivate";
stateTransitionOnLoaded[0] = "Activate";
stateTransitionOnNoAmmo[0] = "NoAmmo";
// Activating the gun. Called when the weapon is first
// mounted and there is ammo.
stateName[1] = "Activate";
stateTransitionOnTimeout[1] = "Ready";
stateTimeoutValue[1] = 0.5;
stateSequence[1] = "Activate";
// Ready to fire, just waiting for the trigger
stateName[2] = "Ready";
stateTransitionOnNoAmmo[2] = "NoAmmo";
stateTransitionOnTriggerDown[2] = "Fire";
// Fire the weapon. Calls the fire script which does
// the actual work.
stateName[3] = "Fire";
stateTransitionOnTimeout[3] = "Reload";
stateTimeoutValue[3] = 0.1;
stateFire[3] = true;
stateRecoil[3] = "";
stateAllowImageChange[3] = false;
stateSequence[3] = "Fire";
stateSequenceRandomFlash[3] = true; // use muzzle flash sequence
stateScript[3] = "onFire";
stateSound[3] = CheetahTurretFireSound;
stateEmitter[3] = TurretFireSmokeEmitter;
stateEmitterTime[3] = 0.025;
// Play the reload animation, and transition into
stateName[4] = "Reload";
stateTransitionOnNoAmmo[4] = "NoAmmo";
stateWaitForTimeout[4] = "0";
stateTransitionOnTimeout[4] = "Ready";
stateTimeoutValue[4] = 1.2;
stateAllowImageChange[4] = false;
stateSequence[4] = "Reload";
//stateEjectShell[4] = true;
// No ammo in the weapon, just idle until something
// shows up. Play the dry fire sound if the trigger is
// pulled.
stateName[5] = "NoAmmo";
stateTransitionOnAmmo[5] = "Reload";
stateSequence[5] = "NoAmmo";
stateTransitionOnTriggerDown[5] = "DryFire";
// No ammo dry fire
stateName[6] = "DryFire";
stateTimeoutValue[6] = 1.0;
stateTransitionOnTimeout[6] = "NoAmmo";
stateScript[6] = "onDryFire";
};
//-----------------------------------------------------------------------------
// Information extacted from the shape.
//
// Wheel Sequences
// spring# Wheel spring motion: time 0 = wheel fully extended,
// the hub must be displaced, but not directly animated
// as it will be rotated in code.
// Other Sequences
// steering Wheel steering: time 0 = full right, 0.5 = center
// breakLight Break light, time 0 = off, 1 = breaking
//
// Wheel Nodes
// hub# Wheel hub, the hub must be in it's upper position
// from which the springs are mounted.
//
// The steering and animation sequences are optional.
// The center of the shape acts as the center of mass for the car.
//-----------------------------------------------------------------------------
datablock WheeledVehicleTire(CheetahCarTire)
{
// Tires act as springs and generate lateral and longitudinal
// forces to move the vehicle. These distortion/spring forces
// are what convert wheel angular velocity into forces that
// act on the rigid body.
shapeFile = "data/FPSGameplay/art/shapes/Cheetah/wheel.DAE";
staticFriction = 4.2;
kineticFriction = "1";
// Spring that generates lateral tire forces
lateralForce = 18000;
lateralDamping = 6000;
lateralRelaxation = 1;
// Spring that generates longitudinal tire forces
longitudinalForce = 18000;
longitudinalDamping = 4000;
longitudinalRelaxation = 1;
radius = "0.609998";
};
datablock WheeledVehicleTire(CheetahCarTireRear)
{
// Tires act as springs and generate lateral and longitudinal
// forces to move the vehicle. These distortion/spring forces
// are what convert wheel angular velocity into forces that
// act on the rigid body.
shapeFile = "data/FPSGameplay/art/shapes/Cheetah/wheelBack.DAE";
staticFriction = "7.2";
kineticFriction = "1";
// Spring that generates lateral tire forces
lateralForce = "19000";
lateralDamping = 6000;
lateralRelaxation = 1;
// Spring that generates longitudinal tire forces
longitudinalForce = 18000;
longitudinalDamping = 4000;
longitudinalRelaxation = 1;
radius = "0.840293";
};
datablock WheeledVehicleSpring(CheetahCarSpring)
{
// Wheel suspension properties
length = 0.5; // Suspension travel
force = 2800; // Spring force
damping = 3600; // Spring damping
antiSwayForce = 3; // Lateral anti-sway force
};
datablock WheeledVehicleData(CheetahCar)
{
category = "Vehicles";
shapeFile = "data/FPSGameplay/art/shapes/Cheetah/Cheetah_Body.DAE";
emap = 1;
mountPose[0] = sitting;
numMountPoints = 6;
useEyePoint = true; // Use the vehicle's camera node rather than the player's
maxSteeringAngle = 0.585; // Maximum steering angle, should match animation
// 3rd person camera settings
cameraRoll = false; // Roll the camera with the vehicle
cameraMaxDist = 7.8; // Far distance from vehicle
cameraOffset = 1.0; // Vertical offset from camera mount point
cameraLag = "0.3"; // Velocity lag of camera
cameraDecay = 1.25; // Decay per sec. rate of velocity lag
// Rigid Body
mass = "400";
massCenter = "0 0.5 0"; // Center of mass for rigid body
massBox = "0 0 0"; // Size of box used for moment of inertia,
// if zero it defaults to object bounding box
drag = 0.6; // Drag coefficient
bodyFriction = 0.6;
bodyRestitution = 0.4;
minImpactSpeed = 5; // Impacts over this invoke the script callback
softImpactSpeed = 5; // Play SoftImpact Sound
hardImpactSpeed = 15; // Play HardImpact Sound
integration = 8; // Physics integration: TickSec/Rate
collisionTol = "0.1"; // Collision distance tolerance
contactTol = "0.4"; // Contact velocity tolerance
// Engine
engineTorque = 4300; // Engine power
engineBrake = "5000"; // Braking when throttle is 0
brakeTorque = "10000"; // When brakes are applied
maxWheelSpeed = 50; // Engine scale by current speed / max speed
// Energy
maxEnergy = 100;
jetForce = 3000;
minJetEnergy = 30;
jetEnergyDrain = 2;
// Sounds
engineSound = cheetahEngine;
//squealSound = cheetahSqueal;
softImpactSound = softImpact;
hardImpactSound = hardImpact;
// Dynamic fields accessed via script
nameTag = 'Cheetah';
maxDismountSpeed = 10;
maxMountSpeed = 5;
mountPose0 = "sitting";
tireEmitter = "CheetahTireEmitter";
dustEmitter = "CheetahTireEmitter";
dustHeight = "1";
// Mount slots
turretSlot = 1;
rightBrakeSlot = 2;
leftBrakeSlot = 3;
};