Files
TankiOnline2.0DemoClient/src/package_79/name_291.as
2025-01-29 18:28:12 +00:00

123 lines
4.7 KiB
ActionScript

package package_79
{
import flash.utils.Dictionary;
import package_117.name_542;
import package_120.name_606;
import package_46.Matrix3;
import package_46.name_194;
import alternativa.tanks.game.weapons.IGenericTargetingSystem;
import package_76.name_256;
import package_86.name_257;
import package_90.name_273;
import package_92.name_271;
public class name_291 implements IGenericTargetingSystem
{
private const COLLISION_MASK:int = name_257.WEAPON | name_257.STATIC;
private var collisionDetector:name_256;
private var angleUp:Number;
private var angleDown:Number;
private var numRaysUp:int;
private var numRaysDown:int;
private var var_504:name_606 = new name_606();
private var rayHit:name_273 = new name_273();
private var direction:name_194 = new name_194();
private var rotationMatrix:Matrix3 = new Matrix3();
private var origin:name_194 = new name_194();
private var targetEvaluator:name_542;
public function name_291(angleUp:Number, numRaysUp:int, angleDown:Number, numRaysDown:int, collisionDetector:name_256, targetEvaluator:name_542)
{
super();
this.angleUp = angleUp;
this.angleDown = angleDown;
this.numRaysUp = numRaysUp;
this.numRaysDown = numRaysDown;
this.collisionDetector = collisionDetector;
this.targetEvaluator = targetEvaluator;
}
public function name_527(shooter:name_271, muzzlePosition:name_194, barrelOrigin:name_194, barrelDirection:name_194, barrelLength:Number, gunElevationAxis:name_194, maxDistance:Number, result:name_194) : void
{
var centerLineValue:Number = this.method_522(shooter,barrelOrigin,barrelDirection,barrelLength,maxDistance);
var directionValue:Number = 0;
directionValue = this.method_523(this.numRaysUp,this.angleUp / this.numRaysUp,directionValue,shooter,barrelOrigin,barrelDirection,barrelLength,gunElevationAxis,maxDistance,result);
directionValue = this.method_523(this.numRaysDown,-this.angleDown / this.numRaysDown,directionValue,shooter,barrelOrigin,barrelDirection,barrelLength,gunElevationAxis,maxDistance,result);
if(centerLineValue >= directionValue)
{
result.copy(barrelDirection);
}
}
private function method_523(numRays:int, angleStep:Number, maxDirectionValue:Number, shooter:name_271, barrelOrigin:name_194, barrelDirection:name_194, barrelLength:Number, gunElevationAxis:name_194, maxDistance:Number, result:name_194) : Number
{
var directionValue:Number = NaN;
this.rotationMatrix.method_344(gunElevationAxis,angleStep);
this.direction.copy(barrelDirection);
for(var i:int = 0; i < numRays; )
{
this.direction.transform3(this.rotationMatrix);
directionValue = this.method_522(shooter,barrelOrigin,this.direction,barrelLength,maxDistance);
if(directionValue > maxDirectionValue)
{
maxDirectionValue = directionValue;
result.copy(this.direction);
}
i++;
}
return maxDirectionValue;
}
private function method_522(shooter:name_271, barrelOrigin:name_194, barrelDirection:name_194, barrelLength:Number, maxDistance:Number) : Number
{
var body:name_271 = null;
var distance:Number = NaN;
var targetValue:Number = NaN;
var directionValue:Number = 0;
var firstTarget:Boolean = true;
this.var_504.name_605 = new Dictionary();
this.var_504.name_605[shooter] = true;
this.origin.copy(barrelOrigin);
while(this.collisionDetector.raycast(this.origin,barrelDirection,this.COLLISION_MASK,maxDistance,this.var_504,this.rayHit))
{
body = this.rayHit.primitive.body;
if(body == null)
{
break;
}
distance = this.rayHit.t - barrelLength;
if(distance < 0)
{
distance = 0;
}
targetValue = Number(this.targetEvaluator.name_541(body,distance));
if(firstTarget)
{
if(targetValue < 0)
{
break;
}
firstTarget = false;
}
directionValue += targetValue;
this.var_504.name_605[body] = true;
this.origin.copy(this.rayHit.position);
}
this.var_504.name_605 = null;
return directionValue;
}
}
}