package_74 alternativa.tanks.game.weapons

This commit is contained in:
Pyogenics
2025-01-29 18:28:12 +00:00
parent 265c7f1cea
commit dd3607c71e
40 changed files with 256 additions and 255 deletions

View File

@@ -58,13 +58,13 @@ package alternativa.tanks
import package_72.name_264;
import package_72.name_295;
import package_73.name_293;
import package_74.class_14;
import package_74.name_240;
import package_74.name_263;
import package_74.name_283;
import package_74.name_286;
import package_74.name_307;
import package_74.name_327;
import alternativa.tanks.game.weapons.IGenericAmmunition;
import alternativa.tanks.game.weapons.SimpleTargetEvaluator;
import alternativa.tanks.game.weapons.InstantShotWeaponComponent;
import alternativa.tanks.game.weapons.EnergyShotWeaponComponent;
import alternativa.tanks.game.weapons.ContinuousActionGunPlatformComponent;
import alternativa.tanks.game.weapons.WeaponConst;
import alternativa.tanks.game.weapons.IWeaponDistanceWeakening;
import package_75.name_236;
import package_75.name_309;
import package_76.name_256;
@@ -739,10 +739,10 @@ package alternativa.tanks
var _loc18_:class_5 = null;
var _loc3_:Number = 10000000 / 3;
var _loc4_:name_256 = this.gameKernel.method_112().name_246().collisionDetector;
var _loc5_:name_240 = new name_240();
var _loc5_:SimpleTargetEvaluator = new SimpleTargetEvaluator();
var _loc6_:name_261 = new name_261(Math.PI / 9,20,Math.PI / 9,20,_loc4_,_loc5_);
_loc6_.name_310(this.gameKernel.method_112().name_246().collisionDetector);
_loc6_.name_303(new name_240());
_loc6_.name_303(new SimpleTargetEvaluator());
var _loc7_:Vector.<name_129> = this.var_64.getFrames("thunder/explosion");
var _loc8_:name_44 = this.gameKernel.name_5();
for each(_loc9_ in _loc7_)
@@ -763,8 +763,8 @@ package alternativa.tanks
_loc8_.method_29(_loc12_);
_loc8_.method_29(_loc13_);
name_270.init(_loc12_,_loc13_);
var _loc14_:class_14 = new name_269(this.gameKernel,1000,10000000,200,100,0.5,null,_loc10_);
var _loc15_:name_263 = new name_263(1000,_loc3_,_loc6_,_loc14_,new name_274(this.config.soundsLibrary.name_297("smoky/shot")),true);
var _loc14_:IGenericAmmunition = new name_269(this.gameKernel,1000,10000000,200,100,0.5,null,_loc10_);
var _loc15_:InstantShotWeaponComponent = new InstantShotWeaponComponent(1000,_loc3_,_loc6_,_loc14_,new name_274(this.config.soundsLibrary.name_297("smoky/shot")),true);
_loc15_.name_308 = true;
param1.name_60(_loc15_);
var _loc16_:BitmapData = new BitmapData(20,20,false,0);
@@ -781,10 +781,10 @@ package alternativa.tanks
var _loc11_:int = 0;
var _loc18_:class_5 = null;
var _loc4_:name_256 = this.gameKernel.method_112().name_246().collisionDetector;
var _loc5_:name_240 = new name_240();
var _loc5_:SimpleTargetEvaluator = new SimpleTargetEvaluator();
var _loc6_:name_261 = new name_261(Math.PI / 9,20,Math.PI / 9,20,_loc4_,_loc5_);
_loc6_.name_310(this.gameKernel.method_112().name_246().collisionDetector);
_loc6_.name_303(new name_240());
_loc6_.name_303(new SimpleTargetEvaluator());
var _loc7_:Vector.<name_129> = this.var_64.getFrames("thunder/explosion");
var _loc8_:name_44 = this.gameKernel.name_5();
for each(_loc9_ in _loc7_)
@@ -805,8 +805,8 @@ package alternativa.tanks
_loc8_.method_29(_loc12_);
_loc8_.method_29(_loc13_);
name_270.init(_loc12_,_loc13_);
var _loc14_:class_14 = new name_269(this.gameKernel,1000,10000000,200,100,0.5,null,_loc10_);
var _loc15_:name_263 = new name_263(1000,3333333.3333333335,_loc6_,_loc14_,new name_274(this.config.soundsLibrary.name_297("thunder/shot")),true);
var _loc14_:IGenericAmmunition = new name_269(this.gameKernel,1000,10000000,200,100,0.5,null,_loc10_);
var _loc15_:InstantShotWeaponComponent = new InstantShotWeaponComponent(1000,3333333.3333333335,_loc6_,_loc14_,new name_274(this.config.soundsLibrary.name_297("thunder/shot")),true);
_loc15_.name_308 = true;
param1.name_60(_loc15_);
var _loc16_:BitmapData = new BitmapData(20,20,false,0);
@@ -826,10 +826,10 @@ package alternativa.tanks
private function createEnergyGun(param1:Entity) : void
{
var _loc9_:name_256 = this.gameKernel.method_112().name_246().collisionDetector;
var _loc10_:name_240 = new name_240();
var _loc10_:SimpleTargetEvaluator = new SimpleTargetEvaluator();
var _loc11_:name_280 = new name_280(Math.PI / 4,20,Math.PI / 4,20,100,_loc9_,_loc10_);
var _loc13_:Number = name_307.BASE_FORCE;
var _loc14_:name_327 = new name_267(2000,4000,0.5);
var _loc13_:Number = WeaponConst.BASE_FORCE;
var _loc14_:IWeaponDistanceWeakening = new name_267(2000,4000,0.5);
var _loc15_:BitmapData = this.config.var_37.name_244("plasma/charge") as BitmapData;
var _loc16_:Vector.<BitmapData> = name_251.name_272(_loc15_,_loc15_.height);
var _loc17_:Vector.<class_4> = this.getMaterialStrip(_loc16_);
@@ -840,7 +840,7 @@ package alternativa.tanks
var _loc22_:name_349 = new PlasmaRoundEffectsFactory(this.gameKernel,_loc17_,_loc19_,_loc20_);
var _loc23_:name_296 = new name_296(50,2000,100,_loc13_,_loc14_,_loc22_,null);
param1.name_60(_loc23_);
var _loc24_:name_283 = new name_283(1000,1000,1000,1000,0,8000,_loc11_,null,true);
var _loc24_:EnergyShotWeaponComponent = new EnergyShotWeaponComponent(1000,1000,1000,1000,0,8000,_loc11_,null,true);
param1.name_60(_loc24_);
var _loc25_:BitmapData = new BitmapData(20,20,false,0);
_loc25_.perlinNoise(20,20,3,13,false,true);
@@ -851,7 +851,7 @@ package alternativa.tanks
private function createContinuousActionGun(param1:Entity) : void
{
var _loc5_:name_286 = new name_286(1000,1,15,true);
var _loc5_:ContinuousActionGunPlatformComponent = new ContinuousActionGunPlatformComponent(1000,1,15,true);
param1.name_60(_loc5_);
var _loc7_:Number = 30 * Math.PI / 180;
var _loc10_:name_262 = this.getFlamethrowerSFXData();
@@ -864,7 +864,7 @@ package alternativa.tanks
_loc16_.method_29(_loc18_);
name_265.init(_loc17_,_loc18_);
var _loc19_:name_256 = this.gameKernel.method_112().name_246().collisionDetector;
var _loc20_:name_326 = name_240.INSTANCE;
var _loc20_:name_326 = SimpleTargetEvaluator.INSTANCE;
var _loc21_:name_282 = new name_282(3000,_loc7_,10,10,_loc19_,_loc20_);
var _loc22_:name_287 = new name_287(this.config.soundsLibrary.name_297("flamethrower/shot"));
var _loc23_:name_281 = new name_281(1000,100,_loc21_,_loc22_,true,false);
@@ -1181,8 +1181,8 @@ import package_71.name_234;
import package_72.class_12;
import package_72.name_239;
import package_73.class_13;
import package_74.class_14;
import package_74.name_233;
import alternativa.tanks.game.weapons.IGenericAmmunition;
import alternativa.tanks.game.weapons.IGenericRound;
import package_75.class_15;
import package_76.name_235;
import package_87.name_267;
@@ -1229,7 +1229,7 @@ class DummyTurretCallback implements class_10
}
}
class PointHitRoundAmmo implements class_14
class PointHitRoundAmmo implements IGenericAmmunition
{
private var impactForce:Number;
@@ -1254,7 +1254,7 @@ class PointHitRoundAmmo implements class_14
this.weaponHitEffects = new WeaponHitEffects(null,_loc2_,param1);
}
public function getRound() : name_233
public function getRound() : IGenericRound
{
return new name_304(this.impactForce,this.weaponDistanceWeakening,this.weaponHitEffects);
}

View File

@@ -11,7 +11,7 @@ package alternativa.tanks.game.usertitle.component
import package_45.name_182;
import package_46.name_194;
import package_71.name_252;
import package_74.class_25;
import alternativa.tanks.game.weapons.IWeapon;
import package_75.name_236;
public class name_245 extends EntityComponent implements name_82
@@ -24,7 +24,7 @@ package alternativa.tanks.game.usertitle.component
private var chassisComponent:name_236;
private var var_442:class_25;
private var var_442:IWeapon;
private var localPlayer:Boolean;
@@ -76,7 +76,7 @@ package alternativa.tanks.game.usertitle.component
override public function initComponent() : void
{
this.chassisComponent = name_236(entity.getComponentStrict(name_236));
this.var_442 = class_25(entity.getComponent(class_25));
this.var_442 = IWeapon(entity.getComponent(IWeapon));
this.var_424 = new name_488();
this.var_506 = new name_609(this);
this.var_424.name_486(entity,name_252.SET_ACTIVATING_STATE,this.var_506);

View File

@@ -0,0 +1,235 @@
package alternativa.tanks.game.weapons
{
import alternativa.tanks.game.EntityComponent;
import alternativa.tanks.game.GameKernel;
import alternativa.tanks.game.GameEvents;
import package_39.name_160;
import package_42.name_184;
import package_42.name_477;
import package_45.name_182;
import alternativa.osgi.OSGi;
import package_71.name_252;
public class ContinuousActionGunPlatformComponent extends EntityComponent implements IWeapon, IBasicWeapon, name_477
{
private var energyCapacity:Number;
private var energyDrainRate:Number;
private var energyRecoveryRate:Number;
private var var_442:IContinuousActionWeapon;
private var baseTime:Number;
private var var_437:Boolean;
private var var_438:Boolean;
private var var_439:Boolean;
private var var_441:Boolean;
private var isLocal:Boolean;
private var gameKernel:GameKernel;
private var var_440:name_184;
public function ContinuousActionGunPlatformComponent(energyCapacity:Number, energyDrainRate:Number, energyRecoveryRate:Number, isLocal:Boolean)
{
super();
this.energyCapacity = energyCapacity;
this.energyDrainRate = energyDrainRate;
this.energyRecoveryRate = energyRecoveryRate;
this.isLocal = isLocal;
this.baseTime = -1000;
}
public function get name_308() : Boolean
{
return this.var_439;
}
public function set name_308(value:Boolean) : void
{
if(this.var_439 != value)
{
this.var_439 = value;
if(value)
{
if(this.var_438)
{
this.getLogger().log("gun","ContinuousActionGunPlatformComponent::enabled() activating");
this.activate();
this.enableLogic();
}
}
else
{
this.getLogger().log("gun","ContinuousActionGunPlatformComponent::enabled() deactivating");
this.deactivate();
this.disableLogic();
}
}
}
override public function initComponent() : void
{
this.var_442 = IContinuousActionWeapon(entity.getComponentStrict(IContinuousActionWeapon));
if(this.isLocal)
{
entity.addEventHandler(name_252.SET_ACTIVE_STATE,this.setActiveState);
entity.addEventHandler(name_252.SET_ACTIVATING_STATE,this.setActivatingState);
entity.addEventHandler(name_252.SET_DEAD_STATE,this.setInactiveState);
entity.addEventHandler(name_252.SET_RESPAWN_STATE,this.setInactiveState);
entity.addEventHandler(GameEvents.BATTLE_FINISHED,this.setInactiveState);
}
}
override public function addToGame(gameKernel:GameKernel) : void
{
this.gameKernel = gameKernel;
this.var_440 = gameKernel.getLogicSystem2();
}
override public function removeFromGame(gameKernel:GameKernel) : void
{
this.var_440 = null;
this.gameKernel = null;
}
public function method_396() : Number
{
return this.getCurrentEnergy(name_182.timeSeconds,this.var_437) / this.energyCapacity;
}
public function method_394() : void
{
if(!this.var_438)
{
this.getLogger().log("gun","ContinuousActionGunPlatformComponent::pullTrigger()");
this.var_438 = true;
this.activate();
this.enableLogic();
}
}
public function method_393() : void
{
if(this.var_438)
{
this.getLogger().log("gun","ContinuousActionGunPlatformComponent::releaseTrigger()");
this.var_438 = false;
this.deactivate();
this.disableLogic();
}
}
private function getLogger() : name_160
{
return name_160(OSGi.name_8().name_30(name_160));
}
public function method_395() : void
{
}
public function runLogic() : void
{
var currentEnergy:Number = this.getCurrentEnergy(name_182.timeSeconds,this.var_437);
if(currentEnergy > 0)
{
this.var_442.update();
}
else
{
this.deactivate();
this.disableLogic();
}
}
private function getCurrentEnergy(time:Number, active:Boolean) : Number
{
var energy:Number = NaN;
if(active)
{
energy = this.energyCapacity - (time - this.baseTime) * this.energyDrainRate;
}
else
{
energy = (time - this.baseTime) * this.energyRecoveryRate;
}
if(energy < 0)
{
energy = 0;
}
else if(energy > this.energyCapacity)
{
energy = this.energyCapacity;
}
return energy;
}
private function enableLogic() : void
{
if(!this.var_441 && this.var_439)
{
this.var_441 = true;
this.var_440.addLogicUnit(this);
}
}
private function disableLogic() : void
{
if(this.var_441)
{
this.var_441 = false;
this.var_440.removeLogicUnit(this);
}
}
private function activate() : void
{
var now:Number = NaN;
var currentEnergy:Number = NaN;
if(!this.var_437 && this.var_439)
{
this.var_437 = true;
this.var_442.start();
now = name_182.timeSeconds;
currentEnergy = this.getCurrentEnergy(now,false);
this.baseTime = now - (this.energyCapacity - currentEnergy) / this.energyDrainRate;
}
}
private function deactivate() : void
{
var now:Number = NaN;
if(this.var_437)
{
this.var_437 = false;
this.var_442.stop();
now = name_182.timeSeconds;
this.baseTime = now - this.getCurrentEnergy(now,true) / this.energyRecoveryRate;
}
}
private function setActiveState(eventType:String, eventData:*) : void
{
this.name_308 = true;
}
private function setInactiveState(eventType:String, eventData:*) : void
{
this.name_308 = false;
}
private function setActivatingState(eventType:String, eventData:*) : void
{
this.name_308 = false;
this.baseTime = -100000;
}
}
}

View File

@@ -0,0 +1,15 @@
package alternativa.tanks.game.weapons
{
public class EnergyShotType
{
public static const NORMAL_SHOT:EnergyShotType = new EnergyShotType();
public static const CLOSE_SHOT:EnergyShotType = new EnergyShotType();
public function EnergyShotType()
{
super();
}
}
}

View File

@@ -0,0 +1,299 @@
package alternativa.tanks.game.weapons
{
import alternativa.tanks.game.EntityComponent;
import alternativa.tanks.game.GameKernel;
import alternativa.tanks.game.GameEvents;
import package_115.class_26;
import package_42.name_184;
import package_42.name_477;
import package_45.name_182;
import package_46.name_194;
import package_71.name_252;
import package_75.class_15;
import package_75.name_236;
import package_76.name_256;
import package_79.name_622;
import package_86.name_257;
import package_86.name_540;
import package_90.name_273;
import package_92.name_271;
public class EnergyShotWeaponComponent extends EntityComponent implements IBasicWeapon, IWeapon, name_477
{
private static const COLLISION_MASK:int = name_257.STATIC | name_257.WEAPON;
private static var rayHit:name_273 = new name_273();
private static var filter:name_540 = new name_540();
private static var barrelOrigin:name_194 = new name_194();
private static var muzzlePosition:name_194 = new name_194();
private static var gunDirection:name_194 = new name_194();
private static var gunElevationAxis:name_194 = new name_194();
private static var shotDirection:name_194 = new name_194();
private static var recoilForceVector:name_194 = new name_194();
private var energyCapacity:Number;
private var energyPerShot:Number;
private var energyRechargeRate:Number;
private var reloadTime:int;
private var recoilForce:Number;
private var targetingSystem:name_622;
private var ammunition:IEnergyAmmunition;
private var callback:IEnergyShotWeaponCallback;
private var isActive:Boolean;
private var var_439:Boolean;
private var var_438:Boolean;
private var var_441:Boolean;
private var var_440:name_184;
private var gameKernel:GameKernel;
private var baseTime:int;
private var var_446:int;
private var var_445:class_15;
private var chassisComponent:name_236;
private var var_447:class_26;
private var var_448:int;
private var maxRange:Number;
private var barrelIndex:int;
public function EnergyShotWeaponComponent(energyCapacity:Number, energyPerShot:Number, energyRechargeRate:Number, reloadTime:int, recoilForce:Number, maxRange:Number, targetingSystem:name_622, callback:IEnergyShotWeaponCallback, isActive:Boolean)
{
super();
this.energyCapacity = energyCapacity;
this.energyPerShot = energyPerShot;
this.energyRechargeRate = energyRechargeRate;
this.reloadTime = reloadTime;
this.recoilForce = recoilForce;
this.maxRange = maxRange;
this.targetingSystem = targetingSystem;
this.callback = callback;
this.isActive = isActive;
}
public function method_383(callback:IEnergyShotWeaponCallback) : void
{
this.callback = callback;
}
public function method_528(targetingSystem:name_622) : void
{
this.targetingSystem = targetingSystem;
}
override public function initComponent() : void
{
this.var_445 = class_15(entity.getComponentStrict(class_15));
this.chassisComponent = name_236(entity.getComponentStrict(name_236));
this.var_447 = class_26(entity.getComponentStrict(class_26));
this.ammunition = IEnergyAmmunition(entity.getComponentStrict(IEnergyAmmunition));
if(this.isActive)
{
entity.addEventHandler(name_252.SET_ACTIVE_STATE,this.setActiveState);
entity.addEventHandler(name_252.SET_ACTIVATING_STATE,this.setInactiveState);
entity.addEventHandler(name_252.SET_DEAD_STATE,this.setInactiveState);
entity.addEventHandler(name_252.SET_RESPAWN_STATE,this.setInactiveState);
entity.addEventHandler(GameEvents.BATTLE_FINISHED,this.setInactiveState);
}
}
override public function addToGame(gameKernel:GameKernel) : void
{
this.gameKernel = gameKernel;
this.var_440 = gameKernel.getLogicSystem2();
}
override public function removeFromGame(gameKernel:GameKernel) : void
{
this.var_440 = null;
this.gameKernel = null;
}
public function method_394() : void
{
if(!this.var_438)
{
this.var_438 = true;
if(this.var_439)
{
this.enableLogic();
}
}
}
public function method_393() : void
{
if(this.var_438)
{
this.var_438 = false;
this.disableLogic();
}
}
public function method_395() : void
{
this.runLogic();
}
public function method_396() : Number
{
return this.getCurrentEnergy(name_182.time,this.baseTime) / this.energyCapacity;
}
public function runLogic() : void
{
var barrelLength:Number = NaN;
var shotId:int = 0;
var shooterBody:name_271 = null;
var collisionDetector:name_256 = null;
var shotType:EnergyShotType = null;
var round:IGenericRound = null;
var now:int = name_182.time;
var currentEnergy:Number = this.getCurrentEnergy(now,this.baseTime);
if(now >= this.var_446 && currentEnergy >= this.energyPerShot)
{
this.var_446 = now + this.reloadTime;
this.baseTime = now - 1000 * (currentEnergy - this.energyPerShot) / this.energyRechargeRate;
this.var_445.getGunData(this.barrelIndex,barrelOrigin,gunDirection,gunElevationAxis);
barrelLength = Number(this.var_445.getBarrelLength(this.barrelIndex));
muzzlePosition.copy(barrelOrigin).method_362(barrelLength,gunDirection);
shotId = this.var_448++;
shooterBody = this.chassisComponent.getBody();
collisionDetector = this.gameKernel.method_112().name_246().collisionDetector;
filter.body = shooterBody;
if(collisionDetector.raycast(barrelOrigin,gunDirection,COLLISION_MASK,barrelLength + 0.01,filter,rayHit))
{
shotType = EnergyShotType.CLOSE_SHOT;
shotDirection.copy(gunDirection);
}
else
{
shotType = EnergyShotType.NORMAL_SHOT;
this.targetingSystem.name_624(shooterBody,muzzlePosition,gunDirection,gunElevationAxis,this.maxRange,shotDirection);
}
filter.body = null;
this.doShowShotEffects(shotType,this.barrelIndex,barrelOrigin,muzzlePosition,gunDirection,gunElevationAxis);
if(this.callback != null)
{
this.callback.name_623(shotId,shotType,shotDirection,this.barrelIndex);
}
round = this.ammunition.getRound(shotType,this.maxRange);
round.method_372(this.gameKernel,shotId,shooterBody,barrelOrigin,barrelLength,shotDirection,muzzlePosition);
this.barrelIndex = (this.barrelIndex + 1) % this.var_445.getBarrelCount();
}
}
public function method_372(shotId:int, shotType:EnergyShotType, shotDirection:name_194, barrelIndex:int) : void
{
var shooterBody:name_271 = this.chassisComponent.getBody();
var barrelLength:Number = Number(this.var_445.getBarrelLength(barrelIndex));
this.var_445.getGunData(barrelIndex,barrelOrigin,gunDirection,gunElevationAxis);
muzzlePosition.copy(barrelOrigin).method_362(barrelLength,gunDirection);
this.doShowShotEffects(shotType,barrelIndex,barrelOrigin,muzzlePosition,gunDirection,gunElevationAxis);
var round:IGenericRound = this.ammunition.getRound(shotType,this.maxRange);
round.method_372(this.gameKernel,shotId,shooterBody,barrelOrigin,barrelLength,shotDirection,muzzlePosition);
}
public function get name_308() : Boolean
{
return this.var_439;
}
public function set name_308(value:Boolean) : void
{
if(this.var_439 != value)
{
this.var_439 = value;
if(this.var_439)
{
if(this.var_438)
{
this.enableLogic();
}
}
else
{
this.disableLogic();
}
}
}
private function doShowShotEffects(shotType:EnergyShotType, barrelIndex:int, barrelOrigin:name_194, muzzlePosition:name_194, gunDirection:name_194, gunElevationAxis:name_194) : void
{
recoilForceVector.copy(gunDirection).scale(-this.recoilForce);
this.chassisComponent.getBody().name_525(barrelOrigin,recoilForceVector);
if(shotType == EnergyShotType.NORMAL_SHOT)
{
this.var_447.method_411(barrelIndex,barrelOrigin,muzzlePosition,gunDirection,gunElevationAxis);
}
}
private function setActiveState(eventType:String, eventData:*) : void
{
this.name_308 = true;
}
private function setInactiveState(eventType:String, eventData:*) : void
{
this.name_308 = false;
}
private function enableLogic() : void
{
if(!this.var_441)
{
this.var_441 = true;
this.var_440.addLogicUnit(this);
}
}
private function disableLogic() : void
{
if(this.var_441)
{
this.var_441 = false;
this.var_440.removeLogicUnit(this);
}
}
private function getCurrentEnergy(time:int, baseTime:int) : Number
{
var energy:Number = 0.001 * (time - baseTime) * this.energyRechargeRate;
if(energy < 0)
{
return 0;
}
if(energy > this.energyCapacity)
{
return this.energyCapacity;
}
return energy;
}
}
}

View File

@@ -0,0 +1,12 @@
package alternativa.tanks.game.weapons
{
public interface IBasicWeapon
{
function method_394() : void;
function method_393() : void;
function method_395() : void;
}
}

View File

@@ -0,0 +1,12 @@
package alternativa.tanks.game.weapons
{
public interface IContinuousActionWeapon
{
function start() : void;
function stop() : void;
function update() : void;
}
}

View File

@@ -0,0 +1,8 @@
package alternativa.tanks.game.weapons
{
public interface IEnergyAmmunition
{
function getRound(param1:EnergyShotType, param2:Number) : IGenericRound;
}
}

View File

@@ -0,0 +1,10 @@
package alternativa.tanks.game.weapons
{
import package_46.name_194;
public interface IEnergyShotWeaponCallback
{
function name_623(param1:int, param2:EnergyShotType, param3:name_194, param4:int) : void;
}
}

View File

@@ -0,0 +1,8 @@
package alternativa.tanks.game.weapons
{
public interface IGenericAmmunition
{
function getRound() : IGenericRound;
}
}

View File

@@ -0,0 +1,12 @@
package alternativa.tanks.game.weapons
{
import alternativa.tanks.game.GameKernel;
import package_46.name_194;
import package_92.name_271;
public interface IGenericRound
{
function method_372(param1:GameKernel, param2:int, param3:name_271, param4:name_194, param5:Number, param6:name_194, param7:name_194) : void;
}
}

View File

@@ -0,0 +1,11 @@
package alternativa.tanks.game.weapons
{
import package_46.name_194;
import package_92.name_271;
public interface IGenericTargetingSystem
{
function name_527(param1:name_271, param2:name_194, param3:name_194, param4:name_194, param5:Number, param6:name_194, param7:Number, param8:name_194) : void;
}
}

View File

@@ -0,0 +1,8 @@
package alternativa.tanks.game.weapons
{
public interface IInstantShotWeaponCallback
{
function name_526() : void;
}
}

View File

@@ -0,0 +1,8 @@
package alternativa.tanks.game.weapons
{
public interface IWeapon
{
function method_396() : Number;
}
}

View File

@@ -0,0 +1,12 @@
package alternativa.tanks.game.weapons
{
public interface IWeaponDistanceWeakening
{
function name_554(param1:Number) : Number;
function method_467() : Number;
function method_468() : Number;
}
}

View File

@@ -0,0 +1,224 @@
package alternativa.tanks.game.weapons
{
import alternativa.tanks.game.EntityComponent;
import alternativa.tanks.game.GameKernel;
import alternativa.tanks.game.GameEvents;
import package_115.class_26;
import package_27.name_501;
import package_42.name_184;
import package_42.name_477;
import package_45.name_182;
import package_46.name_194;
import package_71.name_252;
import package_75.class_15;
import package_75.name_236;
import package_92.name_271;
public class InstantShotWeaponComponent extends EntityComponent implements IWeapon, IBasicWeapon, name_477
{
private static var barrelOrigin:name_194 = new name_194();
private static var muzzlePosition:name_194 = new name_194();
private static var gunDirection:name_194 = new name_194();
private static var gunElevationAxis:name_194 = new name_194();
private static var shotDirection:name_194 = new name_194();
private static var recoilForceVector:name_194 = new name_194();
private static const BARREL_INDEX:int = 0;
private var reloadTime:int;
private var recoilForce:Number;
private var targetingSystem:IGenericTargetingSystem;
private var ammunition:IGenericAmmunition;
private var callback:IInstantShotWeaponCallback;
private var var_446:int;
private var var_445:class_15;
private var chassisComponent:name_236;
private var var_447:class_26;
private var var_440:name_184;
private var var_439:Boolean;
private var var_438:Boolean;
private var var_441:Boolean;
private var var_448:int;
private var gameKernel:GameKernel;
private var isActive:Boolean;
public function InstantShotWeaponComponent(reloadTime:int, recoilForce:Number, targetingSystem:IGenericTargetingSystem, ammunition:IGenericAmmunition, callback:IInstantShotWeaponCallback, isActive:Boolean)
{
super();
this.reloadTime = reloadTime;
this.recoilForce = recoilForce;
this.targetingSystem = targetingSystem;
this.ammunition = ammunition;
this.callback = callback;
this.isActive = isActive;
}
override public function initComponent() : void
{
this.var_445 = class_15(entity.getComponentStrict(class_15));
this.chassisComponent = name_236(entity.getComponentStrict(name_236));
this.var_447 = class_26(entity.getComponentStrict(class_26));
if(this.isActive)
{
entity.addEventHandler(name_252.SET_ACTIVE_STATE,this.setActiveState);
entity.addEventHandler(name_252.SET_ACTIVATING_STATE,this.setInactiveState);
entity.addEventHandler(name_252.SET_DEAD_STATE,this.setInactiveState);
entity.addEventHandler(name_252.SET_RESPAWN_STATE,this.setInactiveState);
entity.addEventHandler(GameEvents.BATTLE_FINISHED,this.setInactiveState);
}
}
private function setActiveState(eventType:String, eventData:*) : void
{
this.name_308 = true;
}
private function setInactiveState(eventType:String, eventData:*) : void
{
this.name_308 = false;
}
override public function addToGame(gameKernel:GameKernel) : void
{
this.gameKernel = gameKernel;
this.var_440 = gameKernel.getLogicSystem2();
}
override public function removeFromGame(gameKernel:GameKernel) : void
{
this.var_440 = null;
this.gameKernel = null;
}
public function method_396() : Number
{
var readiness:Number = 1 + (name_182.time - this.var_446) / this.reloadTime;
return readiness > 1 ? 1 : readiness;
}
public function method_394() : void
{
if(!this.var_438)
{
this.var_438 = true;
if(this.var_439)
{
this.enableLogic();
}
}
}
public function method_393() : void
{
if(this.var_438)
{
this.var_438 = false;
this.disableLogic();
}
}
public function method_395() : void
{
this.runLogic();
}
public function runLogic() : void
{
if(name_182.time < this.var_446)
{
return;
}
this.var_446 = name_182.time + this.reloadTime;
if(this.callback != null)
{
this.callback.name_526();
}
this.var_445.getGunData(BARREL_INDEX,barrelOrigin,gunDirection,gunElevationAxis);
var barrelLength:Number = Number(this.var_445.getBarrelLength(BARREL_INDEX));
muzzlePosition.copy(barrelOrigin).method_362(barrelLength,gunDirection);
this.doShowShotEffects(barrelOrigin,muzzlePosition,gunDirection,gunElevationAxis);
var shotId:int = this.var_448++;
var shooterBody:name_271 = this.chassisComponent.getBody();
this.targetingSystem.name_527(shooterBody,muzzlePosition,barrelOrigin,gunDirection,barrelLength,gunElevationAxis,name_501.BIG_VALUE,shotDirection);
var round:IGenericRound = this.ammunition.getRound();
round.method_372(this.gameKernel,shotId,shooterBody,barrelOrigin,barrelLength,shotDirection,muzzlePosition);
}
public function get name_308() : Boolean
{
return this.var_439;
}
public function set name_308(value:Boolean) : void
{
if(this.var_439 != value)
{
this.var_439 = value;
if(this.var_439)
{
if(this.var_438)
{
this.enableLogic();
}
}
else
{
this.disableLogic();
}
}
}
public function method_416() : void
{
this.var_445.getGunData(BARREL_INDEX,barrelOrigin,gunDirection,gunElevationAxis);
muzzlePosition.copy(barrelOrigin).method_362(this.var_445.getBarrelLength(BARREL_INDEX),gunDirection);
this.doShowShotEffects(barrelOrigin,muzzlePosition,gunDirection,gunElevationAxis);
}
private function doShowShotEffects(barrelOrigin:name_194, muzzlePosition:name_194, gunDirection:name_194, gunElevationAxis:name_194) : void
{
recoilForceVector.copy(gunDirection).scale(-this.recoilForce);
this.chassisComponent.getBody().name_525(barrelOrigin,recoilForceVector);
this.var_447.method_411(BARREL_INDEX,barrelOrigin,muzzlePosition,gunDirection,gunElevationAxis);
}
private function enableLogic() : void
{
if(!this.var_441)
{
this.var_441 = true;
this.var_440.addLogicUnit(this);
}
}
private function disableLogic() : void
{
if(this.var_441)
{
this.var_441 = false;
this.var_440.removeLogicUnit(this);
}
}
}
}

View File

@@ -0,0 +1,21 @@
package alternativa.tanks.game.weapons
{
import package_79.name_326;
import package_92.name_271;
public class SimpleTargetEvaluator implements name_326
{
public static const INSTANCE:SimpleTargetEvaluator = new SimpleTargetEvaluator();
public function SimpleTargetEvaluator()
{
super();
}
public function name_541(shooter:name_271, target:name_271, distance:Number, angle:Number) : Number
{
return 1;
}
}
}

View File

@@ -0,0 +1,13 @@
package alternativa.tanks.game.weapons
{
public class WeaponConst
{
public static const BASE_FORCE:Number = 5000000;
public function WeaponConst()
{
super();
}
}
}

View File

@@ -0,0 +1,29 @@
package alternativa.tanks.game.weapons
{
import package_46.name_194;
import package_92.name_271;
public class WeaponHit
{
public var distance:Number;
public var body:name_271;
public var position:name_194 = new name_194();
public var direction:name_194 = new name_194();
public var normal:name_194 = new name_194();
public function WeaponHit()
{
super();
}
public function toString() : String
{
return "[WeaponHit distance=" + this.distance + ", body=" + this.body + ", position=" + this.position + ", direction=" + this.direction + ", normal=" + this.normal + "]";
}
}
}