package_18 alternativa.tanks.game.subsystems.rendersystem

This commit is contained in:
Pyogenics
2025-01-29 19:07:58 +00:00
parent 549f73b4c9
commit bbf438a33f
59 changed files with 341 additions and 340 deletions

View File

@@ -8,7 +8,7 @@ package alternativa.tanks
import alternativa.tanks.config.BlobGroup;
import alternativa.tanks.config.BlobCategory;
import alternativa.utils.ByteArrayMap;
import package_18.name_44;
import alternativa.tanks.game.subsystems.rendersystem.RenderSystem;
import package_19.name_53;
import alternativa.tanks.game.entities.map.A3DMapComponent;
import alternativa.tanks.game.camera.FreeCameraController;
@@ -34,7 +34,7 @@ package alternativa.tanks
override public function run() : void
{
var _loc1_:name_44 = this.gameKernel.name_5();
var _loc1_:RenderSystem = this.gameKernel.name_5();
var _loc2_:FreeCameraController = new FreeCameraController(_loc1_.name_27(),this.gameKernel.name_66());
_loc1_.name_63(_loc2_);
_loc2_.name_75(0,0,1000);

View File

@@ -16,8 +16,8 @@ package alternativa.tanks
import alternativa.tanks.config.Config;
import alternativa.utils.ColorUtils;
import alternativa.utils.ByteArrayMap;
import package_18.name_102;
import package_18.name_44;
import alternativa.tanks.game.subsystems.rendersystem.ICameraController;
import alternativa.tanks.game.subsystems.rendersystem.RenderSystem;
import alternativa.tanks.game.subsystems.eventsystem.IGameEventListener;
import alternativa.tanks.game.subsystems.eventsystem.IEventSystem;
import package_21.name_77;
@@ -150,7 +150,7 @@ package alternativa.tanks
private var freeCameraController:FreeCameraController;
private var var_68:name_102;
private var var_68:ICameraController;
private var var_81:name_290;
@@ -289,7 +289,7 @@ package alternativa.tanks
private function onKeyDown(param1:KeyboardEventType, param2:uint) : void
{
var _loc3_:name_44 = null;
var _loc3_:RenderSystem = null;
var _loc4_:int = 0;
switch(param2)
{
@@ -380,7 +380,7 @@ package alternativa.tanks
var _loc5_:int = 0;
var _loc8_:class_5 = null;
var _loc1_:Vector.<name_129> = this.var_64.getFrames("thunder/explosion");
var _loc2_:name_44 = this.gameKernel.name_5();
var _loc2_:RenderSystem = this.gameKernel.name_5();
for each(_loc3_ in _loc1_)
{
_loc2_.method_29(_loc3_);
@@ -404,7 +404,7 @@ package alternativa.tanks
{
var _loc1_:name_129 = this.var_61.getResource("smoky/diffuse");
var _loc2_:name_129 = this.var_61.getResource("smoky/opacity");
var _loc3_:name_44 = this.gameKernel.name_5();
var _loc3_:RenderSystem = this.gameKernel.name_5();
_loc3_.method_29(_loc1_);
_loc3_.method_29(_loc2_);
var _loc4_:name_266 = name_266(this.gameKernel.method_108().name_110(name_266));
@@ -677,7 +677,7 @@ package alternativa.tanks
var _loc9_:Array = null;
var _loc1_:name_129 = this.var_61.getResource("fire/diffuse");
var _loc2_:name_129 = this.var_61.getResource("fire/opacity");
var _loc3_:name_44 = this.gameKernel.name_5();
var _loc3_:RenderSystem = this.gameKernel.name_5();
_loc3_.method_29(_loc1_);
_loc3_.method_29(_loc2_);
this.var_74 = new name_250(_loc1_,_loc2_,8,8,0,16,30,true);
@@ -744,7 +744,7 @@ package alternativa.tanks
_loc6_.name_310(this.gameKernel.method_112().name_246().collisionDetector);
_loc6_.name_303(new SimpleTargetEvaluator());
var _loc7_:Vector.<name_129> = this.var_64.getFrames("thunder/explosion");
var _loc8_:name_44 = this.gameKernel.name_5();
var _loc8_:RenderSystem = this.gameKernel.name_5();
for each(_loc9_ in _loc7_)
{
_loc8_.method_29(_loc9_);
@@ -786,7 +786,7 @@ package alternativa.tanks
_loc6_.name_310(this.gameKernel.method_112().name_246().collisionDetector);
_loc6_.name_303(new SimpleTargetEvaluator());
var _loc7_:Vector.<name_129> = this.var_64.getFrames("thunder/explosion");
var _loc8_:name_44 = this.gameKernel.name_5();
var _loc8_:RenderSystem = this.gameKernel.name_5();
for each(_loc9_ in _loc7_)
{
_loc8_.method_29(_loc9_);
@@ -857,7 +857,7 @@ package alternativa.tanks
var _loc10_:name_262 = this.getFlamethrowerSFXData();
var _loc11_:name_265 = new name_265(3000,_loc7_,20,3000,_loc10_);
param1.name_60(_loc11_);
var _loc16_:name_44 = this.gameKernel.name_5();
var _loc16_:RenderSystem = this.gameKernel.name_5();
var _loc17_:name_129 = this.var_61.getResource("firebird/diffuse");
var _loc18_:name_129 = this.var_61.getResource("firebird/opacity");
_loc16_.method_29(_loc17_);
@@ -917,7 +917,7 @@ package alternativa.tanks
}
}
private function setCameraController(param1:name_102) : void
private function setCameraController(param1:ICameraController) : void
{
if(this.activeTank != null)
{
@@ -942,7 +942,7 @@ package alternativa.tanks
{
var _loc15_:name_249 = null;
var _loc16_:name_318 = null;
var _loc6_:name_44 = this.gameKernel.name_5();
var _loc6_:RenderSystem = this.gameKernel.name_5();
var _loc7_:ByteArrayMap = param1.textureData;
var _loc8_:name_241 = this.var_65.name_254(_loc7_.name_248(name_258.KEY_DIFFUSE_MAP));
var _loc9_:name_241 = this.var_65.name_254(_loc7_.name_248(name_258.KEY_NORMAL_MAP));
@@ -1166,7 +1166,7 @@ import alternativa.tanks.game.GameKernel;
import package_101.name_304;
import alternativa.tanks.config.TextureLibrary;
import alternativa.utils.ColorUtils;
import package_18.name_44;
import alternativa.tanks.game.subsystems.rendersystem.RenderSystem;
import package_28.name_129;
import package_28.name_241;
import package_28.name_93;
@@ -1191,7 +1191,7 @@ class FrameMaterialsFactory implements class_13
{
public static const INSTANCE:FrameMaterialsFactory = new FrameMaterialsFactory();
public var renderSystem:name_44;
public var renderSystem:RenderSystem;
public function FrameMaterialsFactory()
{

View File

@@ -1,7 +1,7 @@
package alternativa.tanks.game
{
import flash.display.Stage;
import package_18.name_44;
import alternativa.tanks.game.subsystems.rendersystem.RenderSystem;
import alternativa.tanks.game.subsystems.eventsystem.EventSystem;
import alternativa.tanks.game.subsystems.eventsystem.IEventSystem;
import alternativa.tanks.game.subsystems.inputsystem.InputSystem;
@@ -55,7 +55,7 @@ package alternativa.tanks.game
private var physicsSystem:name_178;
private var renderSystem:name_44;
private var renderSystem:RenderSystem;
private var var_42:name_183;
@@ -85,7 +85,7 @@ package alternativa.tanks.game
this.var_4.addTask(this.logicSystem2);
this.physicsSystem = new name_178(PHYSICS_SYSTEM_PRIORITY,this.var_40);
this.var_4.addTask(this.physicsSystem);
this.renderSystem = new name_44(RENDER_SYSTEM_PRIORITY,stage);
this.renderSystem = new RenderSystem(RENDER_SYSTEM_PRIORITY,stage);
this.var_4.addTask(this.renderSystem);
this.var_42 = new name_183(CLEANUP_SYSTEM_PRIORITY);
this.var_4.addTask(this.var_42);
@@ -183,7 +183,7 @@ package alternativa.tanks.game
return this.physicsSystem;
}
public function name_5() : name_44
public function name_5() : RenderSystem
{
return this.renderSystem;
}

View File

@@ -1,7 +1,7 @@
package alternativa.tanks.game.camera
{
import flash.display.Shape;
import package_18.name_90;
import alternativa.tanks.game.subsystems.rendersystem.GameCamera;
public class AxisIndicator extends Shape
{
@@ -15,7 +15,7 @@ package alternativa.tanks.game.camera
this.var_32 = size;
}
public function update(camera:name_90) : void
public function update(camera:GameCamera) : void
{
var kx:Number = NaN;
var ky:Number = NaN;

View File

@@ -1,11 +1,11 @@
package alternativa.tanks.game.camera
{
import package_18.name_90;
import alternativa.tanks.game.subsystems.rendersystem.GameCamera;
import package_46.name_194;
public class CameraControllerBase
{
protected var camera:name_90;
protected var camera:GameCamera;
public function CameraControllerBase()
{

View File

@@ -5,8 +5,8 @@ package alternativa.tanks.game.camera
import alternativa.osgi.service.console.variables.ConsoleVarFloat;
import alternativa.osgi.service.console.variables.ConsoleVarInt;
import alternativa.tanks.game.Entity;
import package_18.name_102;
import package_18.name_90;
import alternativa.tanks.game.subsystems.rendersystem.ICameraController;
import alternativa.tanks.game.subsystems.rendersystem.GameCamera;
import package_19.name_380;
import package_21.name_78;
import alternativa.tanks.game.subsystems.inputsystem.IInput;
@@ -19,7 +19,7 @@ package alternativa.tanks.game.camera
import package_76.name_256;
import package_90.name_273;
public class FollowCameraController extends CameraControllerBase implements name_102
public class FollowCameraController extends CameraControllerBase implements ICameraController
{
private static var parentMatrix:Matrix4 = new Matrix4();
@@ -117,7 +117,7 @@ package alternativa.tanks.game.camera
private var var_515:name_380;
public function FollowCameraController(camera:name_90, collisionDetector:name_256, collisionMask:int, input:IInput)
public function FollowCameraController(camera:GameCamera, collisionDetector:name_256, collisionMask:int, input:IInput)
{
super();
this.camera = camera;

View File

@@ -4,8 +4,8 @@ package alternativa.tanks.game.camera
import alternativa.tanks.game.ObjectController;
import alternativa.tanks.game.Entity;
import alternativa.utils.KeyboardUtils;
import package_18.name_102;
import package_18.name_90;
import alternativa.tanks.game.subsystems.rendersystem.ICameraController;
import alternativa.tanks.game.subsystems.rendersystem.GameCamera;
import package_21.name_78;
import alternativa.tanks.game.subsystems.inputsystem.IInput;
import package_45.name_182;
@@ -14,7 +14,7 @@ package alternativa.tanks.game.camera
import package_46.name_194;
import package_47.name_193;
public class FreeCameraController implements name_102
public class FreeCameraController implements ICameraController
{
public static var smoothing:Number = 20;
@@ -62,7 +62,7 @@ package alternativa.tanks.game.camera
private var var_45:Matrix4 = new Matrix4();
public function FreeCameraController(camera:name_90, input:IInput)
public function FreeCameraController(camera:GameCamera, input:IInput)
{
super();
this.input = input;

View File

@@ -5,8 +5,8 @@ package alternativa.tanks.game.camera
import alternativa.osgi.service.console.variables.ConsoleVarFloat;
import alternativa.osgi.service.console.variables.ConsoleVarInt;
import alternativa.tanks.game.Entity;
import package_18.name_102;
import package_18.name_90;
import alternativa.tanks.game.subsystems.rendersystem.ICameraController;
import alternativa.tanks.game.subsystems.rendersystem.GameCamera;
import package_19.name_380;
import package_21.name_78;
import alternativa.tanks.game.subsystems.inputsystem.IInput;
@@ -19,7 +19,7 @@ package alternativa.tanks.game.camera
import package_76.name_256;
import package_90.name_273;
public class OrbitCameraController extends CameraControllerBase implements name_102
public class OrbitCameraController extends CameraControllerBase implements ICameraController
{
private static var parentMatrix:Matrix4 = new Matrix4();
@@ -137,7 +137,7 @@ package alternativa.tanks.game.camera
private var var_523:name_194 = new name_194();
public function OrbitCameraController(camera:name_90, collisionDetector:name_256, collisionMask:int, input:IInput)
public function OrbitCameraController(camera:GameCamera, collisionDetector:name_256, collisionMask:int, input:IInput)
{
super();
this.camera = camera;

View File

@@ -12,9 +12,9 @@ package alternativa.tanks.game.entities.map
import package_109.name_378;
import package_109.name_381;
import alternativa.utils.ByteArrayMap;
import package_18.name_44;
import package_18.name_79;
import package_18.name_89;
import alternativa.tanks.game.subsystems.rendersystem.RenderSystem;
import alternativa.tanks.game.subsystems.rendersystem.SkyMaterial;
import alternativa.tanks.game.subsystems.rendersystem.Lights;
import package_19.name_380;
import package_19.name_53;
import package_19.name_91;
@@ -96,7 +96,7 @@ package alternativa.tanks.game.entities.map
var skyBox:name_53 = null;
var surfaceIds:Array = null;
var surfaceId:String = null;
var renderSystem:name_44 = null;
var renderSystem:RenderSystem = null;
var container:name_78 = null;
var texture:ByteArray = null;
var textureResource:name_241 = null;
@@ -108,11 +108,11 @@ package alternativa.tanks.game.entities.map
{
texture = this.skyboxFiles.name_248(surfaceId);
textureResource = new name_241(texture);
skyBox.name_383(surfaceId).material = new name_79(textureResource);
skyBox.name_383(surfaceId).material = new SkyMaterial(textureResource);
}
renderSystem = this.gameKernel.name_5();
renderSystem.method_32(skyBox.getResources(true));
container = renderSystem.method_40(name_44.SKYBOX_CONTAINER_ID);
container = renderSystem.method_40(RenderSystem.SKYBOX_CONTAINER_ID);
container.addChild(skyBox);
}
}
@@ -120,9 +120,9 @@ package alternativa.tanks.game.entities.map
override public function removeFromGame(gameKernel:GameKernel) : void
{
var object:name_78 = null;
var lights:name_89 = null;
var lights:Lights = null;
var light:name_116 = null;
var renderSystem:name_44 = gameKernel.name_5();
var renderSystem:RenderSystem = gameKernel.name_5();
var mapGeometryContainer:name_78 = renderSystem.method_68();
for each(object in this.var_89.objects)
{
@@ -186,8 +186,8 @@ package alternativa.tanks.game.entities.map
this.initFakeLight();
return null;
}
var renderSystem:name_44 = this.gameKernel.name_5();
var lights:name_89 = renderSystem.lights;
var renderSystem:RenderSystem = this.gameKernel.name_5();
var lights:Lights = renderSystem.lights;
for each(light in this.var_89.lights)
{
if(light is DirectionalLight)
@@ -234,7 +234,7 @@ package alternativa.tanks.game.entities.map
private function initGraphics(staticShadowLight:DirectionalLight) : void
{
var object:name_78 = null;
var renderSystem:name_44 = this.gameKernel.name_5();
var renderSystem:RenderSystem = this.gameKernel.name_5();
var mapGeometryContainer:name_78 = renderSystem.method_68();
for each(object in this.var_89.objects)
{
@@ -249,7 +249,7 @@ package alternativa.tanks.game.entities.map
private function initPhysics() : void
{
var renderSystem:name_44 = null;
var renderSystem:RenderSystem = null;
var physicsContainer:name_78 = null;
var physicsSystem:name_178 = this.gameKernel.method_112();
physicsSystem.name_382(this.var_89.collisionPrimitives);
@@ -341,8 +341,8 @@ package alternativa.tanks.game.entities.map
var collisionRect:name_381 = new name_381(new name_194(20000,20000),1,255);
var collisionPrimitives:Vector.<name_235> = Vector.<name_235>([collisionRect]);
this.gameKernel.method_112().name_382(collisionPrimitives);
var renderSystem:name_44 = this.gameKernel.name_5();
renderSystem.method_40(name_44.LIGHTS_CONTAINER_ID).addChild(new name_376(16777215));
var renderSystem:RenderSystem = this.gameKernel.name_5();
renderSystem.method_40(RenderSystem.LIGHTS_CONTAINER_ID).addChild(new name_376(16777215));
this.addZeroMarker(renderSystem);
var bitmapData:BitmapData = new BitmapData(512,512);
bitmapData.perlinNoise(10,10,3,13,false,true);
@@ -355,7 +355,7 @@ package alternativa.tanks.game.entities.map
setTimeout(this.complete,0);
}
private function addZeroMarker(renderSystem:name_44) : void
private function addZeroMarker(renderSystem:RenderSystem) : void
{
var resource:name_77 = null;
var box:name_279 = new name_279(50,50,50);

View File

@@ -0,0 +1,31 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import alternativa.engine3d.alternativa3d;
import package_19.name_117;
import package_21.name_116;
import package_21.name_124;
import package_28.name_119;
import package_28.name_129;
import package_4.class_5;
use namespace alternativa3d;
public class BlendedMaterial extends class_5
{
public var blendModeSource:String = "one";
public var blendModeDestination:String = "zero";
public function BlendedMaterial(diffuseMap:name_129 = null, opacityMap:name_129 = null, alpha:Number = 1, blendModeSource:String = "one", blendModeDestination:String = "zero")
{
super(diffuseMap,opacityMap,alpha);
this.blendModeSource = blendModeSource;
this.blendModeDestination = blendModeDestination;
}
override alternativa3d function collectDraws(camera:name_124, surface:name_117, geometry:name_119, lights:Vector.<name_116>, lightsLength:int, objectRenderPriority:int = -1) : void
{
}
}
}

View File

@@ -0,0 +1,54 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import package_21.name_78;
import package_24.DirectionalLight;
public class DirectionalLightList
{
private var container:name_78;
private var var_16:Vector.<DirectionalLight>;
public function DirectionalLightList(container:name_78)
{
super();
this.container = container;
this.var_16 = new Vector.<DirectionalLight>();
}
public function add(light:DirectionalLight) : void
{
if(this.var_16.indexOf(light) < 0)
{
this.var_16.push(light);
this.container.addChild(light);
}
}
public function remove(light:DirectionalLight) : void
{
var index:int = int(this.var_16.indexOf(light));
if(index >= 0)
{
this.var_16[index] = this.var_16[this.var_16.length - 1];
this.var_16.length -= 1;
}
}
public function get size() : int
{
return this.var_16.length;
}
public function get lights() : Vector.<DirectionalLight>
{
return Vector.<DirectionalLight>(this.var_16);
}
public function method_645(i:int) : DirectionalLight
{
return this.var_16[i];
}
}
}

View File

@@ -0,0 +1,25 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import flash.display.BitmapData;
import flash.display.Stage3D;
public class FogInitializator implements IDeferredAction
{
private var fogBitmap:BitmapData;
private var renderSystem:RenderSystem;
public function FogInitializator(fogBitmap:BitmapData, renderSystem:RenderSystem)
{
super();
this.fogBitmap = fogBitmap;
this.renderSystem = renderSystem;
}
public function execute(stage3d:Stage3D) : void
{
this.renderSystem.method_33(this.fogBitmap);
}
}
}

View File

@@ -0,0 +1,42 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import package_21.name_124;
import package_46.Matrix3;
import package_46.name_194;
public class GameCamera extends name_124
{
private static var matrix3:Matrix3 = new Matrix3();
public var position:name_194 = new name_194();
public var xAxis:name_194 = new name_194();
public var yAxis:name_194 = new name_194();
public var zAxis:name_194 = new name_194();
public function GameCamera(nearClipping:Number, farClipping:Number)
{
super(nearClipping,farClipping);
}
public function name_112() : void
{
matrix3.name_196(rotationX,rotationY,rotationZ);
this.position.x = x;
this.position.y = y;
this.position.z = z;
this.xAxis.x = matrix3.a;
this.xAxis.y = matrix3.e;
this.xAxis.z = matrix3.i;
this.yAxis.x = matrix3.b;
this.yAxis.y = matrix3.f;
this.yAxis.z = matrix3.j;
this.zAxis.x = matrix3.c;
this.zAxis.y = matrix3.g;
this.zAxis.z = matrix3.k;
}
}
}

View File

@@ -0,0 +1,10 @@
package alternativa.tanks.game.subsystems.rendersystem
{
public interface ICameraController
{
function update() : void;
function name_108() : void;
}
}

View File

@@ -0,0 +1,10 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import flash.display.Stage3D;
public interface IDeferredAction
{
function execute(param1:Stage3D) : void;
}
}

View File

@@ -0,0 +1,12 @@
package alternativa.tanks.game.subsystems.rendersystem
{
public interface IGraphicEffect
{
function addedToRenderSystem(param1:RenderSystem) : void;
function play(param1:GameCamera) : Boolean;
function destroy() : void;
}
}

View File

@@ -0,0 +1,8 @@
package alternativa.tanks.game.subsystems.rendersystem
{
public interface IRenderer
{
function render() : void;
}
}

View File

@@ -0,0 +1,18 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import package_21.name_77;
public interface IResourceManager
{
function method_29(param1:name_77) : void;
function method_32(param1:Vector.<name_77>) : void;
function method_28(param1:name_77) : void;
function method_31(param1:Vector.<name_77>) : void;
function method_30(param1:name_77) : void;
}
}

View File

@@ -0,0 +1,8 @@
package alternativa.tanks.game.subsystems.rendersystem
{
public interface IShadowRendererConstructor
{
function name_111() : void;
}
}

View File

@@ -0,0 +1,64 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import package_21.name_78;
import package_24.name_376;
public class Lights
{
private var container:name_78;
private var var_142:name_376;
private var var_143:DirectionalLightList;
private var var_144:OmniLightList;
private var var_145:SpotLightList;
public function Lights(container:name_78)
{
super();
this.container = container;
this.var_143 = new DirectionalLightList(container);
this.var_144 = new OmniLightList(container);
this.var_145 = new SpotLightList(container);
}
public function set ambientLight(light:name_376) : void
{
if(this.var_142 != light)
{
if(this.var_142 != null)
{
this.container.removeChild(this.var_142);
}
this.var_142 = light;
if(this.var_142 != null)
{
this.container.addChild(this.var_142);
}
}
}
public function get ambientLight() : name_376
{
return this.var_142;
}
public function get directionalLigths() : DirectionalLightList
{
return this.var_143;
}
public function get omniLigths() : OmniLightList
{
return this.var_144;
}
public function get spotLights() : SpotLightList
{
return this.var_145;
}
}
}

View File

@@ -0,0 +1,54 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import package_21.name_78;
import package_24.OmniLight;
public class OmniLightList
{
private var container:name_78;
private var var_16:Vector.<OmniLight>;
public function OmniLightList(container:name_78)
{
super();
this.container = container;
this.var_16 = new Vector.<OmniLight>();
}
public function add(light:OmniLight) : void
{
if(this.var_16.indexOf(light) < 0)
{
this.var_16.push(light);
this.container.addChild(light);
}
}
public function remove(light:OmniLight) : void
{
var index:int = int(this.var_16.indexOf(light));
if(index >= 0)
{
this.var_16[index] = this.var_16[this.var_16.length - 1];
this.var_16.length -= 1;
}
}
public function get size() : int
{
return this.var_16.length;
}
public function get lights() : Vector.<OmniLight>
{
return Vector.<OmniLight>(this.var_16);
}
public function method_645(i:int) : OmniLight
{
return this.var_16[i];
}
}
}

View File

@@ -0,0 +1,797 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import alternativa.engine3d.alternativa3d;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.Stage3D;
import flash.display3D.Context3D;
import flash.display3D.Context3DRenderMode;
import flash.events.Event;
import flash.geom.Vector3D;
import flash.ui.Keyboard;
import alternativa.tanks.game.GameTask;
import package_19.name_91;
import alternativa.tanks.game.entities.map.MapMaterial;
import package_21.name_77;
import package_21.name_78;
import package_21.name_81;
import alternativa.tanks.game.subsystems.inputsystem.KeyboardEventType;
import alternativa.tanks.game.subsystems.inputsystem.IInput;
import package_23.name_103;
import package_23.name_92;
import package_23.name_97;
import package_24.DirectionalLight;
import package_25.name_113;
import package_25.name_98;
import alternativa.tanks.game.utils.objectpool.ObjectPoolManager;
import package_27.name_95;
import package_28.name_93;
import package_29.MouseEvent3D;
import alternativa.tanks.game.entities.tank.graphics.materials.TankMaterial2;
import alternativa.tanks.game.entities.tank.graphics.materials.TreesMaterial;
import alternativa.tanks.game.entities.tank.graphics.materials.GiShadowMaterial;
import alternativa.tanks.game.entities.tank.graphics.materials.TracksMaterial2;
import alternativa.tanks.game.entities.tank.graphics.materials.TankMaterial;
import alternativa.tanks.game.camera.AxisIndicator;
use namespace alternativa3d;
public class RenderSystem extends GameTask implements IResourceManager
{
public static const SKYBOX_CONTAINER_ID:String = "skyboxContainer";
public static const MAP_GEOMETRY_CONTAINER_ID:String = "mapGeometryContainer";
public static const LIGHTS_CONTAINER_ID:String = "lightsContainer";
public static const DYNAMIC_OBJECTS_CONTAINER_ID:String = "dynamicObjectsContainer";
public static const EFFECTS_CONTAINER_ID:String = "effectsContainer";
private static const BIT_DEBUG_GEOMETRY:int = 1;
private static const BIT_DEBUG_LIGHTS:int = 1 << 1;
private var rootContainer:name_78;
private var skyboxContainer:name_78;
private var mapGeometryContainer:name_78;
private var lightsContainer:name_78;
private var dynamicObjectsContainer:name_78;
private var effectsContainer:name_78;
private var var_12:Object = {};
private var view:name_81;
private var camera:GameCamera;
private var var_13:ICameraController;
private var axisIndicator:AxisIndicator;
private var renderers:RendererList;
private var var_11:RendererList;
private var effects:Vector.<IGraphicEffect>;
private var numEffects:int;
private var var_14:Boolean = true;
private var var_8:Object = {};
private var var_16:Lights;
private var var_20:Boolean;
private var var_18:Boolean;
private var objectPoolManager:ObjectPoolManager = new ObjectPoolManager();
private var var_19:Vector.<TextMarker>;
private var var_17:name_95 = new name_95();
private var stage:Stage;
private var stage3d:Stage3D;
private var resourceManager:ResourceManager;
private var var_9:name_92;
private var staticShadowRenderer:name_97;
private var var_10:Vector.<IDeferredAction>;
private var var_7:Vector.<IShadowRendererConstructor>;
private var var_15:Boolean;
private var var_6:name_93;
private var var_5:name_98;
public function RenderSystem(priority:int, stage:Stage)
{
super(priority);
this.stage = stage;
this.renderers = new RendererList();
this.var_11 = new RendererList();
this.effects = new Vector.<IGraphicEffect>();
this.rootContainer = new name_78();
this.rootContainer.name = "root";
this.skyboxContainer = this.createContainer(SKYBOX_CONTAINER_ID);
this.mapGeometryContainer = this.createContainer(MAP_GEOMETRY_CONTAINER_ID);
this.lightsContainer = this.createContainer(LIGHTS_CONTAINER_ID);
this.dynamicObjectsContainer = this.createContainer(DYNAMIC_OBJECTS_CONTAINER_ID);
this.effectsContainer = this.createContainer(EFFECTS_CONTAINER_ID);
this.var_16 = new Lights(this.lightsContainer);
this.view = new name_81(100,100,false,6710886,1,4);
this.view.name_106();
this.camera = new GameCamera(10,50000);
this.camera.nearClipping = 1;
this.camera.view = this.view;
this.rootContainer.addChild(this.camera);
var giLight:DirectionalLight = new DirectionalLight(9222892);
giLight.intensity = 0.5;
giLight.rotationX = Math.PI;
this.var_5 = new name_98();
this.var_5.gravity = new Vector3D(0,0,-1);
this.var_5.wind = new Vector3D(1,0,0);
this.rootContainer.addChild(this.var_5);
this.axisIndicator = new AxisIndicator(100);
this.resourceManager = new ResourceManager();
this.var_9 = new name_92();
this.staticShadowRenderer = new name_97(null,1024,4);
this.var_10 = new Vector.<IDeferredAction>();
this.rootContainer.addEventListener(MouseEvent3D.CLICK,this.onClick);
}
private function onClick(e:MouseEvent3D) : void
{
if(e.target is name_91)
{
trace(e.target,e.target.name,name_91(e.target).offset,e.target.scaleX,e.target.scaleY,e.target.scaleZ);
}
else
{
trace(e.target,e.target.name);
}
}
public function get lights() : Lights
{
return this.var_16;
}
public function name_41(mode:int) : void
{
MapMaterial.fogMode = mode;
TankMaterial.fogMode = mode;
TankMaterial2.fogMode = mode;
TracksMaterial2.fogMode = mode;
TreesMaterial.fogMode = mode;
SkyMaterial.fogMode = mode;
GiShadowMaterial.fogMode = mode;
if(mode == 1)
{
this.var_5.fogFar = MapMaterial.fogFar;
}
else
{
this.var_5.fogFar = 0;
}
}
public function name_47(value:Number) : void
{
MapMaterial.fogNear = value;
TankMaterial.fogNear = value;
TankMaterial2.fogNear = value;
TracksMaterial2.fogNear = value;
TreesMaterial.fogNear = value;
GiShadowMaterial.fogNear = value;
this.var_5.fogNear = value;
}
public function name_48(value:Number) : void
{
MapMaterial.fogFar = value;
TankMaterial.fogFar = value;
TankMaterial2.fogFar = value;
TracksMaterial2.fogFar = value;
TreesMaterial.fogFar = value;
GiShadowMaterial.fogFar = value;
this.var_5.fogFar = value;
}
public function name_49(value:Number) : void
{
MapMaterial.fogMaxDensity = value;
TankMaterial.fogMaxDensity = value;
TankMaterial2.fogMaxDensity = value;
TracksMaterial2.fogMaxDensity = value;
TreesMaterial.fogMaxDensity = value;
SkyMaterial.fogMaxDensity = value;
GiShadowMaterial.fogMaxDensity = value;
this.var_5.fogMaxDensity = value;
}
public function name_40(color:uint) : void
{
var r:Number = (color >> 16 & 0xFF) / 255;
var g:Number = (color >> 8 & 0xFF) / 255;
var b:Number = (color & 0xFF) / 255;
MapMaterial.fogColorR = r;
MapMaterial.fogColorG = g;
MapMaterial.fogColorB = b;
TankMaterial.fogColorR = r;
TankMaterial.fogColorG = g;
TankMaterial.fogColorB = b;
TankMaterial2.fogColorR = r;
TankMaterial2.fogColorG = g;
TankMaterial2.fogColorB = b;
TracksMaterial2.fogColorR = r;
TracksMaterial2.fogColorG = g;
TracksMaterial2.fogColorB = b;
TreesMaterial.fogColorR = r;
TreesMaterial.fogColorG = g;
TreesMaterial.fogColorB = b;
SkyMaterial.fogColorR = r;
SkyMaterial.fogColorG = g;
SkyMaterial.fogColorB = b;
GiShadowMaterial.fogColorR = r;
GiShadowMaterial.fogColorG = g;
GiShadowMaterial.fogColorB = b;
this.var_5.name_107 = color;
}
public function name_38(value:Number) : void
{
SkyMaterial.fogHeight = value;
}
public function name_34(value:Number) : void
{
SkyMaterial.fogOffset = value;
}
public function name_36(textureParams:String) : void
{
var fogBitmap:BitmapData = RenderUtils.name_109(textureParams,128);
var fogInitializator:FogInitializator = new FogInitializator(fogBitmap,this);
if(this.isContext3DAvailable())
{
fogInitializator.execute(this.stage3d);
}
else
{
this.var_10.push(fogInitializator);
}
}
public function method_33(bitmapData:BitmapData) : void
{
if(!this.isContext3DAvailable())
{
throw new Error("Context3D is not available. Use setFogTextureParams() instead.");
}
if(this.var_6 != null)
{
this.method_28(this.var_6);
}
this.var_6 = new name_93(bitmapData);
this.method_29(this.var_6);
MapMaterial.method_33(this.var_6);
TankMaterial.method_33(this.var_6);
TankMaterial2.method_33(this.var_6);
GiShadowMaterial.method_33(this.var_6);
TracksMaterial2.method_33(this.var_6);
TreesMaterial.method_33(this.var_6);
SkyMaterial.method_33(this.var_6);
}
public function method_57() : Boolean
{
return this.var_15;
}
public function method_58() : void
{
var shadowRendererConstructor:IShadowRendererConstructor = null;
this.var_15 = true;
if(this.var_7 != null)
{
for each(shadowRendererConstructor in this.var_7)
{
shadowRendererConstructor.name_111();
}
this.var_7 = null;
}
}
public function method_59(shadowRendererConstructor:IShadowRendererConstructor) : void
{
if(shadowRendererConstructor == null)
{
throw new ArgumentError("Parameter shadowRendererConstructor is null");
}
if(this.var_15)
{
throw new Error("Cannot add constructor: shadow system is ready");
}
if(this.var_7 == null)
{
this.var_7 = new Vector.<IShadowRendererConstructor>();
}
var index:int = int(this.var_7.indexOf(shadowRendererConstructor));
if(index < 0)
{
this.var_7.push(shadowRendererConstructor);
}
}
public function method_49(shadowRendererConstructor:IShadowRendererConstructor) : void
{
var index:int = 0;
if(this.var_7 != null)
{
index = int(this.var_7.indexOf(shadowRendererConstructor));
if(index >= 0)
{
this.var_7.splice(index,1);
}
}
}
public function method_55() : name_92
{
return this.var_9;
}
public function method_54(value:int) : void
{
this.view.antiAlias = value;
}
public function method_72() : int
{
return this.view.antiAlias;
}
public function method_70(renderer:name_103) : void
{
if(renderer == null)
{
throw new ArgumentError("Parameter renderer is null");
}
if(this.var_9.renderers.indexOf(renderer) < 0)
{
this.var_9.renderers.push(renderer);
}
}
public function method_65(renderer:name_103) : void
{
var index:int = int(this.var_9.renderers.indexOf(renderer));
if(index >= 0)
{
this.var_9.renderers.splice(index,1);
}
}
public function name_37(stage3d:Stage3D) : void
{
this.stage3d = stage3d;
this.initContext(stage3d.context3D);
}
public function requestContext3D() : void
{
this.stage3d = this.stage.stage3Ds[0];
this.stage3d.addEventListener(Event.CONTEXT3D_CREATE,this.onContext3DCreate);
this.stage3d.requestContext3D(Context3DRenderMode.AUTO);
}
public function method_29(resource:name_77) : void
{
this.resourceManager.method_29(resource);
}
public function method_32(resources:Vector.<name_77>) : void
{
this.resourceManager.method_32(resources);
}
public function method_28(resource:name_77) : void
{
this.resourceManager.method_28(resource);
}
public function method_31(resources:Vector.<name_77>) : void
{
this.resourceManager.method_31(resources);
}
public function clear() : void
{
}
public function method_62() : name_78
{
return this.rootContainer;
}
public function method_68() : name_78
{
return this.mapGeometryContainer;
}
public function method_46() : name_78
{
return this.dynamicObjectsContainer;
}
public function method_60() : name_78
{
return this.effectsContainer;
}
public function method_40(containerId:String) : name_78
{
return this.var_12[containerId];
}
public function method_30(resource:name_77) : void
{
this.resourceManager.method_30(resource);
}
public function method_47(containerId:String, container:name_78, uploadResources:Boolean) : void
{
if(this.method_40(containerId) != null)
{
throw new Error("Container with id \"" + containerId + "\" already exists");
}
this.var_12[containerId] = container;
this.rootContainer.addChild(container);
if(uploadResources)
{
this.resourceManager.method_32(container.getResources(true));
}
}
public function name_42() : AxisIndicator
{
return this.axisIndicator;
}
public function method_41(name:String) : Sprite
{
var view:name_81 = null;
var overlay:Sprite = this.var_8[name];
if(overlay == null)
{
overlay = new Sprite();
this.var_8[name] = overlay;
view = this.camera.view;
overlay.x = view.x + (view.width >> 1);
overlay.y = view.y + (view.height >> 1);
view.parent.addChild(overlay);
}
return overlay;
}
public function method_51(name:String) : void
{
var overlay:Sprite = this.var_8[name];
if(overlay != null)
{
delete this.var_8[name];
overlay.parent.removeChild(overlay);
}
}
public function addObject(object:name_78) : void
{
this.rootContainer.addChild(object);
this.resourceManager.method_32(object.getResources());
}
public function name_71() : name_81
{
return this.view;
}
public function name_39() : DisplayObject
{
return this.camera.diagram;
}
public function method_43(objects:Vector.<name_78>) : void
{
var object3D:name_78 = null;
for each(object3D in objects)
{
}
}
public function method_63(renderer:IRenderer) : void
{
this.renderers.add(renderer);
}
public function method_64(renderer:IRenderer) : void
{
this.renderers.remove(renderer);
}
public function method_56(renderer:IRenderer) : void
{
this.var_11.add(renderer);
}
public function method_53(renderer:IRenderer) : void
{
this.var_11.remove(renderer);
}
public function method_37(effect:IGraphicEffect) : void
{
if(this.effects.indexOf(effect) >= 0)
{
throw new Error("Effect " + effect + " already exists");
}
var _loc2_:* = this.numEffects++;
this.effects[_loc2_] = effect;
effect.addedToRenderSystem(this);
}
public function method_48(effect:name_113) : void
{
this.var_5.method_37(effect);
}
public function name_63(controller:ICameraController) : void
{
if(this.var_13 == controller)
{
return;
}
this.var_13 = controller;
controller.name_108();
}
public function name_27() : GameCamera
{
return this.camera;
}
public function method_45() : void
{
this.var_14 = false;
false;
}
public function method_69() : void
{
this.var_14 = true;
true;
}
public function name_46(x:int, y:int, width:int, height:int) : void
{
var overlay:Sprite = null;
var view:name_81 = this.camera.view;
view.x = x;
view.y = y;
view.width = width;
view.height = height;
for each(var _loc9_ in this.var_8)
{
overlay = _loc9_;
_loc9_;
overlay.x = x + (width >> 1);
overlay.y = y + (height >> 1);
}
}
public function method_42() : Context3D
{
return this.stage3d.context3D;
}
override public function start() : void
{
var input:IInput = IInput(var_4.getTaskInterface(IInput));
input.name_94(KeyboardEventType.KEY_DOWN,this.onToggleDebugKey,Keyboard.F7);
input.name_94(KeyboardEventType.KEY_DOWN,this.onToggleDebugKey,Keyboard.F8);
input.name_94(KeyboardEventType.KEY_DOWN,this.onToggleDebugKey,Keyboard.TAB);
}
override public function stop() : void
{
var overlay:Sprite = null;
for each(var _loc4_ in this.var_8)
{
overlay = _loc4_;
_loc4_;
overlay.parent.removeChild(overlay);
}
this.stage3d.context3D.clear(0,0,0,1,1,0,4294967295);
this.stage3d.context3D.present();
this.resourceManager.clear();
this.staticShadowRenderer.dispose();
}
override public function run() : void
{
var i:int = 0;
var overlay:Sprite = null;
var renderer:IRenderer = null;
var effect:IGraphicEffect = null;
if(this.stage3d == null || this.stage3d.context3D == null)
{
return;
}
for each(var _loc7_ in this.var_8)
{
overlay = _loc7_;
_loc7_;
overlay.graphics.clear();
}
for(i = 0; i < this.renderers.numRenderers; i++)
{
renderer = this.renderers.renderers[i];
renderer.render();
}
if(this.var_13 != null && this.var_14)
{
this.var_13.update();
}
this.camera.name_112();
for(i = 0; i < this.var_11.numRenderers; i++)
{
renderer = this.var_11.renderers[i];
renderer.render();
}
for(i = 0; i < this.numEffects; )
{
effect = this.effects[i];
if(!effect.play(this.camera))
{
this.effects[i] = this.effects[--this.numEffects];
this.effects[this.numEffects] = null;
effect.destroy();
i--;
}
i++;
}
if(this.axisIndicator.parent != null)
{
this.axisIndicator.update(this.camera);
}
this.camera.startTimer();
this.var_9.update(this.rootContainer);
this.camera.render(this.stage3d);
this.camera.stopTimer();
}
public function method_71(mainDirectionalLight:DirectionalLight) : void
{
var staticShadowInitializer:StaticShadowInitializer = new StaticShadowInitializer(this.staticShadowRenderer,this.mapGeometryContainer,mainDirectionalLight);
if(this.isContext3DAvailable())
{
staticShadowInitializer.execute(this.method_42());
}
else
{
this.var_10.push(staticShadowInitializer);
}
}
private function isContext3DAvailable() : Boolean
{
return this.stage3d != null && this.stage3d.context3D != null;
}
private function createContainer(id:String) : name_78
{
var container:name_78 = new name_78();
container.name = id;
this.var_12[id] = container;
this.rootContainer.addChild(container);
return container;
}
private function onContext3DCreate(event:Event) : void
{
this.initContext(this.stage3d.context3D);
}
private function initContext(context3D:Context3D) : void
{
var deferredAction:IDeferredAction = null;
context3D.enableErrorChecking = false;
this.resourceManager.name_105(context3D);
this.staticShadowRenderer.context = context3D;
for each(var _loc5_ in this.var_10)
{
deferredAction = _loc5_;
_loc5_;
deferredAction.execute(this.stage3d);
}
this.var_10 = null;
}
private function onToggleDebugKey(eventType:KeyboardEventType, keyCode:uint) : void
{
switch(keyCode)
{
case Keyboard.F7:
case Keyboard.F8:
case Keyboard.TAB:
}
}
private function addObject3DMarkers(objects:Vector.<name_78>) : Vector.<TextMarker>
{
var object:name_78 = null;
var textMarker:TextMarker = null;
if(objects == null)
{
return new Vector.<TextMarker>();
}
var markers:Vector.<TextMarker> = new Vector.<TextMarker>(objects.length);
for(var i:int = 0; i < objects.length; i++)
{
object = objects[i];
textMarker = TextMarker(this.objectPoolManager.name_110(TextMarker));
textMarker.init(this.method_41("markers"),object.name || "[none]",object);
this.method_37(textMarker);
markers[i] = textMarker;
}
return markers;
}
private function switchMapView() : void
{
}
private function updateDebugMode() : void
{
this.camera.debug = this.var_17.flags != 0;
}
private function toggleLightDebug() : void
{
}
private function toggleGraphicsDebug() : void
{
}
public function method_66() : void
{
if(this.stage3d != null)
{
this.stage3d.context3D.clear(51 / 255,48 / 255,38 / 255);
this.stage3d.context3D.present();
}
}
public function method_52() : void
{
}
}
}

View File

@@ -0,0 +1,108 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import flash.display.BitmapData;
public class RenderUtils
{
public function RenderUtils()
{
super();
}
public static function name_109(textureParams:String, textureWidth:int) : BitmapData
{
var i:int = 0;
var angle:Number = NaN;
var color:uint = 0;
var bitmapData:BitmapData = null;
var angles:Vector.<Number> = null;
var colors:Vector.<uint> = null;
var paramValues:Array = textureParams.split(" ");
if(paramValues.length > 1)
{
bitmapData = new BitmapData(textureWidth,1,false,16777215);
paramValues.sort(compareByAngle);
angles = new Vector.<Number>(paramValues.length);
colors = new Vector.<uint>(paramValues.length);
for(i = 0; i < paramValues.length; i++)
{
angle = Number(parseFloat(paramValues[i].substr(0,paramValues[i].indexOf(":"))));
color = uint(parseInt(paramValues[i].substr(paramValues[i].indexOf(":") + 1),16));
angles[i] = angle;
colors[i] = color;
}
for(i = 0; i < textureWidth; i++)
{
angle = i / textureWidth * 360;
color = getColor(angle,angles,colors);
bitmapData.setPixel(i,0,color);
}
}
else
{
color = uint(parseInt(paramValues[0].substr(paramValues[0].indexOf(":") + 1),16));
bitmapData = new BitmapData(1,1,false,color);
}
return bitmapData;
}
private static function compareByAngle(a:String, b:String) : int
{
var valA:Number = Number(parseFloat(a.substr(0,a.indexOf(":"))));
var valB:Number = Number(parseFloat(b.substr(0,b.indexOf(":"))));
return valA > valB ? 1 : (valA < valB ? -1 : 0);
}
private static function getColor(currAngle:Number, angles:Vector.<Number>, colors:Vector.<uint>) : uint
{
var leftAngle:Number = NaN;
var rightAngle:Number = NaN;
var leftColor:uint = 0;
var rightColor:uint = 0;
var weight:Number = NaN;
var i:int = 0;
if(currAngle <= angles[0] || currAngle >= angles[angles.length - 1])
{
leftAngle = angles[angles.length - 1];
leftColor = colors[angles.length - 1];
rightAngle = angles[0];
rightColor = colors[0];
if(currAngle <= rightAngle)
{
weight = 1 - (rightAngle - currAngle) / (rightAngle - leftAngle + 360);
}
else
{
weight = (currAngle - leftAngle) / (rightAngle - leftAngle + 360);
}
}
else
{
leftAngle = angles[0];
for(i = 1; i < angles.length; i++)
{
rightAngle = angles[i];
if(currAngle >= leftAngle && currAngle <= rightAngle)
{
leftColor = colors[i - 1];
rightColor = colors[i];
weight = (currAngle - leftAngle) / (rightAngle - leftAngle);
break;
}
leftAngle = rightAngle;
}
}
var lR:uint = uint(leftColor >> 16 & 0xFF);
var lG:uint = uint(leftColor >> 8 & 0xFF);
var lB:uint = uint(leftColor & 0xFF);
var rR:uint = uint(rightColor >> 16 & 0xFF);
var rG:uint = uint(rightColor >> 8 & 0xFF);
var rB:uint = uint(rightColor & 0xFF);
var r:uint = rR * weight + lR * (1 - weight);
var g:uint = rG * weight + lG * (1 - weight);
var b:uint = rB * weight + lB * (1 - weight);
return r << 16 | g << 8 | b;
}
}
}

View File

@@ -0,0 +1,36 @@
package alternativa.tanks.game.subsystems.rendersystem
{
public class RendererList
{
public var renderers:Vector.<IRenderer> = new Vector.<IRenderer>();
public var numRenderers:int;
public function RendererList()
{
super();
}
public function add(renderer:IRenderer) : void
{
if(this.renderers.indexOf(renderer) >= 0)
{
throw new Error("Renderer " + renderer + " already exists");
}
var _loc2_:* = this.numRenderers++;
this.renderers[_loc2_] = renderer;
}
public function remove(renderer:IRenderer) : void
{
var index:int = int(this.renderers.indexOf(renderer));
if(index < 0)
{
throw new Error("Renderer " + renderer + " not found");
}
this.renderers[index] = this.renderers[--this.numRenderers];
this.renderers[this.numRenderers] = null;
}
}
}

View File

@@ -0,0 +1,159 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import flash.display3D.Context3D;
import flash.utils.Dictionary;
import package_21.name_77;
public class ResourceManager implements IResourceManager
{
private var context:Context3D;
private var var_106:Dictionary;
private var var_105:Vector.<name_77>;
public function ResourceManager()
{
super();
this.var_106 = new Dictionary();
}
public function method_29(resource:name_77) : void
{
if(this.context == null)
{
if(this.getQueuedIndex(resource) < 0)
{
this.queue(resource);
}
}
else
{
resource.upload(this.context);
}
var refCount:int = int(this.var_106[resource]);
this.var_106[resource] = refCount + 1;
}
public function method_32(resources:Vector.<name_77>) : void
{
var resource:name_77 = null;
for each(resource in resources)
{
this.method_29(resource);
}
}
public function method_28(resource:name_77) : void
{
var refCount:int = int(this.var_106[resource]);
if(refCount > 0)
{
if(refCount == 1)
{
this.doRelease(resource);
}
else
{
this.var_106[resource] = refCount - 1;
}
}
}
public function method_31(resources:Vector.<name_77>) : void
{
var resource:name_77 = null;
for each(resource in resources)
{
this.method_28(resource);
}
}
public function method_30(resource:name_77) : void
{
if(this.context == null)
{
this.queue(resource);
}
else
{
resource.upload(this.context);
}
}
public function name_105(context:Context3D) : void
{
var resource:name_77 = null;
this.context = context;
if(this.var_105 != null)
{
for each(resource in this.var_105)
{
resource.upload(context);
}
this.var_105 = null;
}
}
public function clear() : void
{
var resource:* = undefined;
if(this.context != null)
{
for(resource in this.var_106)
{
name_77(resource).dispose();
}
}
this.var_105 = null;
this.var_106 = new Dictionary();
}
private function doRelease(resource:name_77) : void
{
var index:int = 0;
var num:int = 0;
if(this.context == null)
{
index = this.getQueuedIndex(resource);
if(index >= 0)
{
num = int(this.var_105.length);
if(num == 1)
{
this.var_105 = null;
}
else
{
this.var_105[index] = this.var_105[--num];
this.var_105.length = num;
}
}
}
else
{
resource.dispose();
delete this.var_106[resource];
}
}
private function getQueuedIndex(resource:name_77) : int
{
if(this.var_105 == null)
{
return -1;
}
return this.var_105.indexOf(resource);
}
private function queue(resource:name_77) : void
{
if(this.var_105 == null)
{
this.var_105 = new Vector.<name_77>();
}
this.var_105.push(resource);
}
}
}

View File

@@ -0,0 +1,293 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import alternativa.engine3d.alternativa3d;
import flash.display.BitmapData;
import flash.display3D.Context3DBlendFactor;
import flash.display3D.Context3DProgramType;
import flash.display3D.VertexBuffer3D;
import flash.utils.Dictionary;
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;
import package_19.name_117;
import package_21.name_116;
import package_21.name_124;
import package_21.name_126;
import package_21.name_128;
import package_21.name_135;
import package_21.name_139;
import package_21.name_78;
import package_28.name_119;
import package_28.name_129;
import package_28.name_93;
import package_30.name_114;
import package_30.name_115;
import package_30.name_121;
import package_4.class_4;
import package_4.name_127;
import package_4.name_28;
use namespace alternativa3d;
public class SkyMaterial extends class_4
{
private static var fogTexture:name_129;
public static const DISABLED:int = 0;
public static const SIMPLE:int = 1;
public static const ADVANCED:int = 2;
public static var fogMode:int = DISABLED;
public static var fogOffset:Number = 0;
public static var fogHeight:Number = 5000;
public static var fogMaxDensity:Number = 1;
public static var fogColorR:Number = 200 / 255;
public static var fogColorG:Number = 162 / 255;
public static var fogColorB:Number = 200 / 255;
alternativa3d static const _samplerSetProcedure:name_114 = new name_114(["#v0=vUV","#s0=sTexture","#c0=cAlpha","tex t0, v0, s0 <2d, linear,clamp, miplinear>","mov t0.w, c0.w","mov o0, t0"]);
alternativa3d static const _samplerSetProcedureOpacity:name_114 = new name_114(["#v0=vUV","#s0=sTexture","#s1=sOpacity","#c0=cAlpha","tex t0, v0, s0 <2d, linear,clamp, miplinear>","tex t1, v0, s1 <2d, linear,clamp, miplinear>","mov t0.w, t1.x","mul t0.w, t0.w, c0.w","mov o0, t0"]);
alternativa3d static const _samplerSetProcedureDiffuseAlpha:name_114 = new name_114(["#v0=vUV","#s0=sTexture","#c0=cAlpha","tex t0, v0, s0 <2d, linear,clamp, miplinear>","mul t0.w, t0.w, c0.w","mov o0, t0"]);
alternativa3d static const _passUVProcedure:name_114 = new name_114(["#v0=vUV","#a0=aUV","mov v0, a0"]);
private static const passSimpleFogConstProcedure:name_114 = new name_114(["#v0=vZDistance","#c0=cFogSpace","dp4 t0.z, i0, c0","mov v0, t0.zzzz","sub v0.y, i0.w, t0.z"],"passSimpleFogConst");
private static const outputWithSimpleFogProcedure:name_114 = new name_114(["#v0=vZDistance","#c0=cFogColor","#c1=cFogRange","min t0.xy, v0.xy, c1.xy","max t0.xy, t0.xy, c1.zw","mul i0.xyz, i0.xyz, t0.y","mul t0.xyz, c0.xyz, t0.x","add i0.xyz, i0.xyz, t0.xyz","mov o0, i0"],"outputWithSimpleFog");
private static const postPassAdvancedFogConstProcedure:name_114 = new name_114(["#v0=vZDistance","#c0=cFogSpace","dp4 t0.z, i0, c0","mov v0, t0.zzzz","sub v0.y, i0.w, t0.z","mov v0.zw, i1.xwxw","mov o0, i1"],"postPassAdvancedFogConst");
private static const outputWithAdvancedFogProcedure:name_114 = new name_114(["#v0=vZDistance","#c0=cFogConsts","#c1=cFogRange","#s0=sFogTexture","min t0.xy, v0.xy, c1.xy","max t0.xy, t0.xy, c1.zw","mul i0.xyz, i0.xyz, t0.y","mov t1.xyzw, c0.yyzw","div t0.z, v0.z, v0.w","mul t0.z, t0.z, c0.x","add t1.x, t1.x, t0.z","tex t1, t1, s0 <2d, repeat, linear, miplinear>","mul t0.xyz, t1.xyz, t0.x","add i0.xyz, i0.xyz, t0.xyz","mov o0, i0"],"outputWithAdvancedFog");
private static var _programs:Dictionary = new Dictionary();
public var diffuseMap:name_129;
public var opacityMap:name_129;
public var alpha:Number = 1;
public var var_21:Boolean = false;
public function SkyMaterial(diffuseMap:name_129 = null, opacityMap:name_129 = null, alpha:Number = 1)
{
super();
this.diffuseMap = diffuseMap;
this.opacityMap = opacityMap;
this.alpha = alpha;
}
public static function method_33(texture:name_129) : void
{
fogTexture = texture;
}
override alternativa3d function fillResources(resources:Dictionary, resourceType:Class) : void
{
super.alternativa3d::fillResources(resources,resourceType);
if(this.diffuseMap != null && Boolean(name_28.alternativa3d::name_131(getDefinitionByName(getQualifiedClassName(this.diffuseMap)) as Class,resourceType)))
{
resources[this.diffuseMap] = true;
}
if(this.opacityMap != null && Boolean(name_28.alternativa3d::name_131(getDefinitionByName(getQualifiedClassName(this.opacityMap)) as Class,resourceType)))
{
resources[this.opacityMap] = true;
}
}
private function setupProgram(targetObject:name_78, key:int, fogMode:int) : name_127
{
var outputProcedure:name_114 = null;
var vertexLinker:name_121 = new name_121(Context3DProgramType.VERTEX);
var positionVar:String = "aPosition";
vertexLinker.name_120(positionVar,name_115.ATTRIBUTE);
if(targetObject.alternativa3d::transformProcedure != null)
{
positionVar = alternativa3d::method_74(targetObject.alternativa3d::transformProcedure,vertexLinker);
}
vertexLinker.name_123(alternativa3d::_projectProcedure);
vertexLinker.name_118(alternativa3d::_projectProcedure,positionVar);
vertexLinker.name_123(alternativa3d::_passUVProcedure);
var fragmentLinker:name_121 = new name_121(Context3DProgramType.FRAGMENT);
if(key == 0)
{
outputProcedure = alternativa3d::_samplerSetProcedure;
}
else if(key == 1)
{
outputProcedure = alternativa3d::_samplerSetProcedureOpacity;
}
else
{
outputProcedure = alternativa3d::_samplerSetProcedureDiffuseAlpha;
}
fragmentLinker.name_123(outputProcedure);
if(fogMode == SIMPLE)
{
vertexLinker.name_123(passSimpleFogConstProcedure);
vertexLinker.name_118(passSimpleFogConstProcedure,positionVar);
fragmentLinker.name_120("outColor");
fragmentLinker.name_125(outputProcedure,"outColor");
fragmentLinker.name_123(outputWithSimpleFogProcedure);
fragmentLinker.name_118(outputWithSimpleFogProcedure,"outColor");
}
else if(fogMode == ADVANCED)
{
vertexLinker.name_120("tProjected");
vertexLinker.name_125(alternativa3d::_projectProcedure,"tProjected");
vertexLinker.name_123(postPassAdvancedFogConstProcedure);
vertexLinker.name_118(postPassAdvancedFogConstProcedure,positionVar,"tProjected");
fragmentLinker.name_120("outColor");
fragmentLinker.name_125(outputProcedure,"outColor");
fragmentLinker.name_123(outputWithAdvancedFogProcedure);
fragmentLinker.name_118(outputWithAdvancedFogProcedure,"outColor");
}
vertexLinker.name_142();
fragmentLinker.name_133(vertexLinker);
fragmentLinker.name_142();
return new name_127(vertexLinker,fragmentLinker);
}
override alternativa3d function collectDraws(camera:name_124, surface:name_117, geometry:name_119, lights:Vector.<name_116>, lightsLength:int, objectRenderPriority:int = -1) : void
{
var program:name_127 = null;
var key:int = 0;
var gM:name_139 = null;
var dist:Number = NaN;
var cLocal:name_139 = null;
var halfW:Number = NaN;
var leftX:Number = NaN;
var leftY:Number = NaN;
var rightX:Number = NaN;
var rightY:Number = NaN;
var angle:Number = NaN;
var dx:Number = NaN;
var dy:Number = NaN;
var len:Number = NaN;
var uScale:Number = NaN;
var uRight:Number = NaN;
var bmd:BitmapData = null;
var i:int = 0;
if(this.diffuseMap == null || this.diffuseMap.alternativa3d::_texture == null)
{
return;
}
if(!this.var_21 && this.opacityMap != null && this.opacityMap.alternativa3d::_texture == null)
{
return;
}
var object:name_78 = surface.alternativa3d::object;
var positionBuffer:VertexBuffer3D = geometry.alternativa3d::getVertexBuffer(name_126.POSITION);
var uvBuffer:VertexBuffer3D = geometry.alternativa3d::getVertexBuffer(name_126.TEXCOORDS[0]);
if(positionBuffer == null || uvBuffer == null)
{
return;
}
var optionsPrograms:Array = _programs[object.alternativa3d::transformProcedure];
if(optionsPrograms == null)
{
optionsPrograms = [];
_programs[object.alternativa3d::transformProcedure] = optionsPrograms;
}
if(!this.var_21 && !this.opacityMap)
{
key = 0;
}
else if(!this.var_21 && Boolean(this.opacityMap))
{
key = 1;
}
else if(this.var_21)
{
key = 2;
}
key += 3 * fogMode;
program = optionsPrograms[key];
if(program == null)
{
program = this.setupProgram(object,key,fogMode);
program.upload(camera.alternativa3d::context3D);
optionsPrograms[key] = program;
}
var drawUnit:name_135 = camera.alternativa3d::renderer.alternativa3d::name_137(object,program.program,geometry.alternativa3d::name_132,surface.indexBegin,surface.numTriangles,program);
drawUnit.alternativa3d::setVertexBufferAt(program.vertexShader.getVariableIndex("aPosition"),positionBuffer,geometry.alternativa3d::_attributesOffsets[name_126.POSITION],name_126.alternativa3d::FORMATS[name_126.POSITION]);
drawUnit.alternativa3d::setVertexBufferAt(program.vertexShader.getVariableIndex("aUV"),uvBuffer,geometry.alternativa3d::_attributesOffsets[name_126.TEXCOORDS[0]],name_126.alternativa3d::FORMATS[name_126.TEXCOORDS[0]]);
object.alternativa3d::setTransformConstants(drawUnit,surface,program.vertexShader,camera);
drawUnit.alternativa3d::name_136(camera,program.vertexShader.getVariableIndex("cProjMatrix"),object.alternativa3d::localToCameraTransform);
drawUnit.alternativa3d::name_134(program.fragmentShader.getVariableIndex("cAlpha"),0,0,0,this.alpha);
drawUnit.alternativa3d::setTextureAt(program.fragmentShader.getVariableIndex("sTexture"),this.diffuseMap.alternativa3d::_texture);
if(Boolean(this.opacityMap) && !this.var_21)
{
drawUnit.alternativa3d::setTextureAt(program.fragmentShader.getVariableIndex("sOpacity"),this.opacityMap.alternativa3d::_texture);
}
if(fogMode == SIMPLE || fogMode == ADVANCED)
{
gM = new name_139();
gM.copy(object.alternativa3d::localToCameraTransform);
gM.append(camera.alternativa3d::localToGlobalTransform);
dist = fogHeight;
drawUnit.alternativa3d::name_144(program.vertexShader.getVariableIndex("cFogSpace"),-gM.i / dist,-gM.j / dist,-gM.k / dist,(camera.alternativa3d::localToGlobalTransform.l + gM.l + fogOffset + fogHeight) / dist);
drawUnit.alternativa3d::name_134(program.fragmentShader.getVariableIndex("cFogRange"),fogMaxDensity,1,0,1 - fogMaxDensity);
}
if(fogMode == SIMPLE)
{
drawUnit.alternativa3d::name_134(program.fragmentShader.getVariableIndex("cFogColor"),fogColorR,fogColorG,fogColorB);
}
if(fogMode == ADVANCED)
{
if(fogTexture == null)
{
bmd = new BitmapData(32,1,false,16711680);
for(i = 0; i < 32; i++)
{
bmd.setPixel(i,0,i / 32 * 255 << 16);
}
fogTexture = new name_93(bmd);
fogTexture.upload(camera.alternativa3d::context3D);
}
cLocal = camera.alternativa3d::localToGlobalTransform;
halfW = camera.view.width / 2;
leftX = -halfW * cLocal.a + camera.alternativa3d::focalLength * cLocal.c;
leftY = -halfW * cLocal.e + camera.alternativa3d::focalLength * cLocal.g;
rightX = halfW * cLocal.a + camera.alternativa3d::focalLength * cLocal.c;
rightY = halfW * cLocal.e + camera.alternativa3d::focalLength * cLocal.g;
angle = Math.atan2(leftY,leftX) - Math.PI / 2;
if(angle < 0)
{
angle += Math.PI * 2;
}
dx = rightX - leftX;
dy = rightY - leftY;
len = Number(Math.sqrt(dx * dx + dy * dy));
leftX /= len;
leftY /= len;
rightX /= len;
rightY /= len;
uScale = Math.acos(leftX * rightX + leftY * rightY) / Math.PI / 2;
uRight = angle / Math.PI / 2;
drawUnit.alternativa3d::name_134(program.fragmentShader.getVariableIndex("cFogConsts"),0.5 * uScale,0.5 - uRight,0);
drawUnit.alternativa3d::setTextureAt(program.fragmentShader.getVariableIndex("sFogTexture"),fogTexture.alternativa3d::_texture);
}
if(this.var_21 || this.opacityMap != null || this.alpha < 1)
{
drawUnit.alternativa3d::blendSource = Context3DBlendFactor.SOURCE_ALPHA;
drawUnit.alternativa3d::blendDestination = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA;
camera.alternativa3d::renderer.alternativa3d::name_130(drawUnit,objectRenderPriority >= 0 ? objectRenderPriority : name_128.TRANSPARENT_SORT);
}
else
{
camera.alternativa3d::renderer.alternativa3d::name_130(drawUnit,objectRenderPriority >= 0 ? objectRenderPriority : name_128.OPAQUE);
}
}
}
}

View File

@@ -0,0 +1,54 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import package_21.name_78;
import package_24.SpotLight;
public class SpotLightList
{
private var container:name_78;
private var var_16:Vector.<SpotLight>;
public function SpotLightList(container:name_78)
{
super();
this.container = container;
this.var_16 = new Vector.<SpotLight>();
}
public function add(light:SpotLight) : void
{
if(this.var_16.indexOf(light) < 0)
{
this.var_16.push(light);
this.container.addChild(light);
}
}
public function remove(light:SpotLight) : void
{
var index:int = int(this.var_16.indexOf(light));
if(index >= 0)
{
this.var_16[index] = this.var_16[this.var_16.length - 1];
this.var_16.length -= 1;
}
}
public function get size() : int
{
return this.var_16.length;
}
public function get lights() : Vector.<SpotLight>
{
return Vector.<SpotLight>(this.var_16);
}
public function method_645(i:int) : SpotLight
{
return this.var_16[i];
}
}
}

View File

@@ -0,0 +1,32 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import flash.display3D.Context3D;
import package_21.name_78;
import package_23.name_97;
import package_24.DirectionalLight;
public class StaticShadowInitializer
{
private var staticShadowRenderer:name_97;
private var container:name_78;
private var light:DirectionalLight;
public function StaticShadowInitializer(staticShadowRenderer:name_97, container:name_78, light:DirectionalLight)
{
super();
this.staticShadowRenderer = staticShadowRenderer;
this.container = container;
this.light = light;
}
public function execute(context3D:Context3D) : void
{
context3D.configureBackBuffer(50,50,0);
this.staticShadowRenderer.name_401(this.container,this.light,5,3,1000);
this.light.shadow = this.staticShadowRenderer;
}
}
}

View File

@@ -0,0 +1,82 @@
package alternativa.tanks.game.subsystems.rendersystem
{
import flash.display.DisplayObjectContainer;
import flash.geom.Vector3D;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import package_21.name_78;
import alternativa.tanks.game.utils.objectpool.PooledObject;
import alternativa.tanks.game.utils.objectpool.ObjectPool;
public class TextMarker extends PooledObject implements IGraphicEffect
{
private static const DEFAULT_TEXT_FORMAT:TextFormat = new TextFormat("Tahoma",12,16777215);
private static var point1:Vector3D = new Vector3D();
private static var point2:Vector3D = new Vector3D();
private var tf:TextField;
private var var_146:Boolean;
private var anchor:name_78;
public function TextMarker(objectPool:ObjectPool)
{
super(objectPool);
this.tf = new TextField();
this.tf.defaultTextFormat = DEFAULT_TEXT_FORMAT;
this.tf.autoSize = TextFieldAutoSize.LEFT;
}
public function init(overlay:DisplayObjectContainer, text:String, anchor:name_78) : void
{
overlay.addChild(this.tf);
this.tf.visible = false;
this.anchor = anchor;
this.tf.text = text;
this.var_146 = true;
}
public function method_255() : void
{
this.var_146 = false;
}
public function play(camera:GameCamera) : Boolean
{
point1.x = this.anchor.x;
point1.y = this.anchor.y;
point1.z = this.anchor.z;
if(point2.z > 0 && point2.z > camera.nearClipping)
{
this.tf.x = point2.x;
this.tf.y = point2.y;
this.tf.visible = true;
}
else
{
this.tf.visible = false;
}
return this.var_146;
}
public function addedToRenderSystem(system:RenderSystem) : void
{
}
public function destroy() : void
{
if(this.tf.parent != null)
{
this.tf.parent.removeChild(this.tf);
}
this.anchor = null;
this.tf.text = "";
method_254();
}
}
}

View File

@@ -6,15 +6,15 @@ package alternativa.tanks.game.usertitle.component
import alternativa.tanks.game.EntityComponent;
import alternativa.tanks.game.GameKernel;
import package_114.name_488;
import package_18.name_44;
import package_18.name_82;
import alternativa.tanks.game.subsystems.rendersystem.RenderSystem;
import alternativa.tanks.game.subsystems.rendersystem.IRenderer;
import package_45.name_182;
import package_46.name_194;
import package_71.name_252;
import alternativa.tanks.game.weapons.IWeapon;
import package_75.name_236;
public class name_245 extends EntityComponent implements name_82
public class name_245 extends EntityComponent implements IRenderer
{
private static const REMOTE_LABEL_OFFSET_Z:int = 200;
@@ -107,7 +107,7 @@ package alternativa.tanks.game.usertitle.component
public function addToScene() : void
{
var renderSystem:name_44 = null;
var renderSystem:RenderSystem = null;
if(!this.var_426)
{
renderSystem = this.gameKernel.name_5();

View File

@@ -8,7 +8,7 @@ package alternativa.tanks.game.usertitle
import flash.geom.Rectangle;
import flash.utils.Dictionary;
import package_126.name_723;
import package_18.class_3;
import alternativa.tanks.game.subsystems.rendersystem.IResourceManager;
import package_19.name_494;
import package_21.name_78;
import package_28.name_93;
@@ -121,7 +121,7 @@ package alternativa.tanks.game.usertitle
private var teamType:name_723 = name_723.NONE;
private var resourceManager:class_3;
private var resourceManager:IResourceManager;
public function name_607(maxHealth:int, rankIcon:name_613, label:name_617)
{
@@ -139,7 +139,7 @@ package alternativa.tanks.game.usertitle
this.setDeadState();
}
public function name_612(resourceManager:class_3) : void
public function name_612(resourceManager:IResourceManager) : void
{
this.resourceManager = resourceManager;
}