Files
TankiOnline2.0DemoClient/src/package_101/name_304.as
2025-01-26 09:32:24 +00:00

95 lines
3.3 KiB
ActionScript

package package_101
{
import package_10.name_17;
import package_119.name_552;
import package_27.name_501;
import package_46.name_194;
import package_72.class_12;
import package_74.name_233;
import package_74.name_327;
import package_74.name_553;
import package_76.name_256;
import package_86.name_257;
import package_86.name_540;
import package_90.name_273;
import package_92.name_271;
public class name_304 implements name_233
{
private static const COLLISION_MASK:int = name_257.STATIC | name_257.WEAPON;
private static var hitPosition:name_194 = new name_194();
private static var filter:name_540 = new name_540();
private static var rayHit:name_273 = new name_273();
private static var hitInfo:name_553 = new name_553();
private var impactForce:Number;
private var weakening:name_327;
private var effects:class_12;
private var callback:name_552;
public function name_304(impactForce:Number, weakening:name_327, effects:class_12)
{
super();
this.impactForce = impactForce;
this.weakening = weakening;
this.effects = effects;
}
public function method_383(callback:name_552) : void
{
this.callback = callback;
}
public function method_372(gameKernel:name_17, shotId:int, shooter:name_271, barrelOrigin:name_194, barrelLength:Number, shotDirection:name_194, muzzlePosition:name_194) : void
{
var distance:Number = NaN;
var weakeningCoefficient:Number = NaN;
var collisionDetector:name_256 = gameKernel.method_112().name_246().collisionDetector;
filter.body = shooter;
if(collisionDetector.raycast(barrelOrigin,shotDirection,COLLISION_MASK,name_501.BIG_VALUE,filter,rayHit))
{
distance = rayHit.t - barrelLength;
if(distance < 0)
{
distance = 0;
}
weakeningCoefficient = Number(this.weakening.name_554(distance));
hitInfo.body = rayHit.primitive.body;
hitInfo.direction.copy(shotDirection);
hitInfo.normal.copy(rayHit.normal);
hitInfo.position.copy(rayHit.position);
hitInfo.distance = distance;
this.method_464(hitInfo.body,hitInfo.position,hitInfo.direction,weakeningCoefficient);
if(this.callback != null)
{
this.callback.name_555(shotId,hitInfo,null);
}
}
filter.body = null;
}
public function method_465(target:name_271, targetHitPosition:name_194, hitDirection:name_194, distance:Number) : void
{
hitPosition.copy(targetHitPosition);
this.method_464(target,hitPosition,hitDirection,this.weakening.name_554(distance));
}
private function method_464(target:name_271, hitPosition:name_194, hitDirection:name_194, weakening:Number) : void
{
if(target != null)
{
target.name_556(hitPosition,hitDirection,this.impactForce * weakening);
}
this.effects.createEffects(hitPosition,weakening,0);
}
}
}