RuneI
Class DarkDwarfBolt

source: c:\runehov\RuneI\Classes\DarkDwarfBolt.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.ParticleSystem
         |
         +--RuneI.BeamSystem
            |
            +--RuneI.Electricity
               |
               +--RuneI.DarkDwarfBolt
Direct Known Subclasses:None

class DarkDwarfBolt
extends RuneI.Electricity

//============================================================================= // DarkDwarfBolt. //=============================================================================
Variables
 float BeamCloseTime
 float Damage
 vector EndOfTrace
 Actor TargetActor
 vector TryToHitLocation
 float alpha


Function Summary
 
simulated
Debug(Canvas canvas, int mode)
 void DoDamage()
 void ResetTargetting()
 void SetPowerLevel(int powerlevel)
 void SetTarget(Actor Targ)
 void Tick(float DeltaTime)
 void UpdateTargetting(float DeltaTime)



Source Code


00001	//=============================================================================
00002	// DarkDwarfBolt.
00003	//=============================================================================
00004	class DarkDwarfBolt expands Electricity;
00005	
00006	var actor TargetActor;
00007	var float Damage;
00008	var vector TryToHitLocation;
00009	var float BeamCloseTime;
00010	var vector EndOfTrace;
00011	var float alpha;
00012	
00013	
00014	function SetTarget(actor Targ)
00015	{	// called before firing
00016		TargetActor = Targ;
00017		ResetTargetting();
00018	}
00019	
00020	function ResetTargetting()
00021	{
00022		if (TargetActor != None)
00023		{
00024			TryToHitLocation = TargetActor.Location;
00025			if (TargetActor.IsA('Pawn'))
00026				TryToHitLocation += vect(0,0,1)*Pawn(TargetActor).EyeHeight;
00027		}
00028		alpha = 0.1;
00029		UpdateTargetting(0);
00030	}
00031	
00032	function SetPowerLevel(int powerlevel)
00033	{
00034		BeamThickness = 2 + powerlevel;
00035		Damage = 5 + powerlevel*2;
00036		amplitude = 10 + 10*powerlevel;
00037		BeamCloseTime = 3.0 - (powerlevel*0.5);
00038	}
00039	
00040	function DoDamage()
00041	{
00042		local actor victim;
00043		local vector HitLoc, HitNormal;
00044	
00045		if (!bHidden && TargetActor!=None)
00046		{
00047			victim = Trace(HitLoc, HitNormal, EndOfTrace, Location, true, );
00048			if (victim != None)
00049			{
00050				victim.JointDamaged(Damage, Pawn(Owner), victim.Location, Normal(victim.Location-Location)*100, 'fire', 0);
00051				if (Pawn(Victim)!=None)
00052				{
00053					spawn(class'RuneI.SparkSystemHit', self,,Victim.Location+vect(0,0,1)*Pawn(Victim).EyeHeight, rotator(HitNormal));
00054				}
00055				else
00056				{
00057					spawn(class'RuneI.SparkSystemHit', self,,HitLoc, rotator(HitNormal));
00058				}
00059			}
00060		}
00061	}
00062	
00063	function UpdateTargetting(float DeltaTime)
00064	{
00065		local vector HitNormal;
00066		local actor A;
00067	
00068		if (!bHidden)
00069		{	// Trace to target, set ending location
00070			alpha += DeltaTime;
00071			alpha = FClamp(alpha, 0.0, BeamCloseTime);
00072			TryToHitLocation = TryToHitLocation + ((alpha/BeamCloseTime)*(TargetActor.Location-TryToHitLocation));
00073			//EndOfTrace = Location + (TryToHitLocation-Location)*2;
00074			EndOfTrace=TryToHitLocation+2000*Normal(TryToHitLocation-Location);
00075			A=Trace(TargetLocation, HitNormal, EndOfTrace, Location, true,);
00076			bUseTargetLocation = true;
00077			if (A==None)
00078			{
00079				TargetLocation = EndOfTrace;
00080			}
00081			else if (!A.IsA('LevelInfo'))
00082			{
00083				Target = A;
00084				TargetJointIndex=1;
00085				bUseTargetLocation = false;
00086			}
00087		}
00088	}
00089	
00090	function Tick(float DeltaTime)
00091	{	// update the endpoint location
00092		UpdateTargetting(DeltaTime);
00093	}
00094	
00095	
00096	simulated function Debug(Canvas canvas, int mode)
00097	{
00098		local vector offset;
00099	
00100		Super.Debug(canvas, mode);
00101		
00102		Canvas.DrawText("Bolt:");
00103		Canvas.CurY -= 8;
00104		Canvas.DrawText(" Target:"@Target);
00105		Canvas.CurY -= 8;
00106		Canvas.DrawText(" TargetActor:"@TargetActor);
00107		Canvas.CurY -= 8;
00108		Canvas.DrawText(" Target.Location:"@Target.Location);
00109		Canvas.CurY -= 8;
00110		Canvas.DrawText(" TryToHitLocation:"@TryToHitLocation);
00111		Canvas.CurY -= 8;
00112		Canvas.DrawText(" TargetLocation:"@TargetLocation);
00113		Canvas.CurY -= 8;
00114		Canvas.DrawText(" bHidden:"@bHidden);
00115		Canvas.CurY -= 8;
00116		Canvas.DrawText(" alpha:"@alpha);
00117		Canvas.CurY -= 8;
00118		Canvas.DrawText(" bUseTargetLocation:"@bUseTargetLocation);
00119		Canvas.CurY -= 8;
00120		Canvas.DrawText(" BeamCloseTime:"@BeamCloseTime);
00121		Canvas.CurY -= 8;
00122	
00123		// TryToHitLocation
00124		offset = TryToHitLocation;
00125		Canvas.DrawLine3D(offset + vect(10, 0, 0), offset + vect(-10, 0, 0), 255, 0, 0);
00126		Canvas.DrawLine3D(offset + vect(0, 10, 0), offset + vect(0, -10, 0), 255, 0, 0);
00127		Canvas.DrawLine3D(offset + vect(0, 0, 10), offset + vect(0, 0, -10), 255, 0, 0);
00128	
00129		// EndOfTrace
00130		offset = EndOfTrace;
00131		Canvas.DrawLine3D(offset + vect(10, 0, 0), offset + vect(-10, 0, 0), 0, 0, 255);
00132		Canvas.DrawLine3D(offset + vect(0, 10, 0), offset + vect(0, -10, 0), 0, 0, 255);
00133		Canvas.DrawLine3D(offset + vect(0, 0, 10), offset + vect(0, 0, -10), 0, 0, 255);
00134	
00135		// Location -> EndOfTrace
00136		Canvas.DrawLine3D(Location, EndOfTrace, 0, 255, 0);
00137	}
00138	
00139	defaultproperties
00140	{
00141	     Damage=5.000000
00142	     BeamCloseTime=1.000000
00143	     Amplitude=20.000000
00144	     ParticleCount=60
00145	     ParticleTexture(0)=Texture'RuneFX.Beam2'
00146	     NumConPts=20
00147	     bUseTargetLocation=True
00148	}

End Source Code