mirror of
https://github.com/MapMakersAndProgrammers/TankiOnline2.0DemoClient.git
synced 2025-10-26 09:59:07 -07:00
package_74 alternativa.tanks.game.weapons
This commit is contained in:
299
src/alternativa/tanks/game/weapons/EnergyShotWeaponComponent.as
Normal file
299
src/alternativa/tanks/game/weapons/EnergyShotWeaponComponent.as
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user