| Home Page | Recent Changes

VitalOverdose/SFX Boosting

UT2004 :: Actor >> Emitter >> SFX_Boosting (Package: custom)

By VitalOverdose

class SFx_Boosting Extends SmartFx
placeable;

struct                             VecRec
{
 var   OnsVehicle                  VevRef;
 Var   float                       RecTime;
};Var  Array< VecRec >             Tracking;

var         bool                   bTracking;
var         int                    TotalParticles;
var ()      float                  CaptureTime;
Var ()      int                    ActiveEmitterNumb;
Var ()      int                    TimerFrequency;
Var ()      float                  ScanSize;
Var (Boost) bool                   bCuasesBoost_Player;
Var (Boost) bool                   bLocks_Player;
Var (Boost) bool                   bCuasesBoost_Bot;
Var (Boost) bool                   bbLocks_Bot;
var (Boost) sound                  VocBoost;
var (boost) vector                 AppliedBoostForce;

Simulated Function PostBeginPlay()
{
 if ( Emitters[ActiveEmitterNumb].MaxParticles > 10)
    Destroyed();
 
 if (AppliedBoostForce == Vect(0,0,0))
    AppliedBoostForce.X=9000000.000000;

 Super.PostBeginPlay();
}

Function tick(Float deltaTime)
{
 local ONSvehicle      FoundONSvec;
 Local Int             Counter;

 for ( Counter=0 ; Counter < Emitters[0].Particles.Length ; Counter++ )
     {
      foreach visiblecollidingActors(Class'ONSvehicle', FoundONSvec , ScanSize , Emitters[ActiveEmitterNumb].Particles[Counter].Location )
              {
               VecBoost(FoundONSvec);
              }
     }
}

Simulated Function  VecBoost( OnsVehicle TheVec )
{
 Local Vector PointOfBoostForce;            //PointOfBoostForce defaults to(0,0,0) center of the vec
 Local Actor  RotRelation;                                        //point of boost force

 EnterVecRec( TheVec );
 if ( bDirectional)
     RotRelation = self ;
 else
 RotRelation = TheVec;

 TheVec.KAddImpulse( AppliedBoostForce >> RotRelation.Rotation, PointOfBoostForce >> RotRelation.Rotation ) ;
}

Function enterVecRec( ONSVehicle NewVec )
{
 Tracking.insert(0,1);
 Tracking[0].VevRef  = NewVec;
 Tracking[0].RecTime = CaptureTime;

 if ( Tracking.Length != 1 )
      Return;   // check to see if the Array was previously empty

 if ( NewVec.Driver.IsA('xBot'))
      NewVec.bDriverCannotLeaveVehicle= True;

 If (bTracking == false )
    {
     bTracking = True;
     SetTimer(TimerFrequency,True);        // set Timer to repeatedly be called every 'Timerfrequncy'
    }
}                                     // Length of Time untill shut off.

Function Timer()
{
 Local Int Counter;
 for ( Counter=0; Counter<Tracking.Length; Counter++ )
     {
     Tracking[Counter].recTime -= TimerFrequency;
     if (Tracking[Counter].recTime<TimerFrequency)
        {
         Tracking[Counter].VevRef.bDriverCannotLeaveVehicle = False ;
         Tracking.remove( Counter , 1);
         if (Tracking.Length==0)
            {
            bTracking = False;
            disable('Timer');
            }
        }
    }
}

Simulated Function postboost(Vehicle TheBoostedvec)
{
 if ( VocBoost!= None )
    PlaySound (VocBoost) ;   //Sound Fx
}

Related Topics

discusion


Category Custom Class

The Unreal Engine Documentation Site

Wiki Community

Topic Categories

Recent Changes

Offline Wiki

Unreal Engine

Console Commands

Terminology

FAQs

Help Desk

Mapping Topics

Mapping Lessons

UnrealEd Interface

UnrealScript Topics

UnrealScript Lessons

Making Mods

Class Tree

Modeling Topics

Chongqing Page

Log In