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 }
|