package_9 alternativa.tanks.game.camera

This commit is contained in:
Pyogenics
2025-01-27 18:00:14 +00:00
parent 37b64f353c
commit 608f91dc7a
10 changed files with 86 additions and 85 deletions

View File

@@ -5,6 +5,7 @@ package_5 alternativa.osgi
package_6 alternativa.osgi.service.console
package_7 alternativa.tanks
package_8 alternativa.startup
package_9 alternativa.tanks.game.camera
package_10 alternativa.tanks.game
package_11 alternativa
package_13 alternativa.tanks.config

View File

@@ -40,8 +40,8 @@ package
import alternativa.tanks.TankTestTask;
import alternativa.startup.LibraryInfo;
import alternativa.startup.ConnectionParameters;
import package_9.name_20;
import package_9.name_23;
import alternativa.tanks.game.camera.FreeCameraController;
import alternativa.tanks.game.camera.AxisIndicator;
[SWF(backgroundColor="#333333",frameRate="100",width="1024",height="768")]
public class TanksTestingTool extends Sprite
@@ -119,7 +119,7 @@ package
private function onControllerSettingsChange(param1:ConsoleVarFloat) : void
{
name_20.smoothing = param1.value;
FreeCameraController.smoothing = param1.value;
}
private function onLightSettingsChange(param1:ConsoleVar) : void
@@ -282,7 +282,7 @@ package
private function onResize(param1:Event) : void
{
var _loc2_:name_23 = null;
var _loc2_:AxisIndicator = null;
if(this.gameKernel != null)
{
this.gameKernel.name_5().name_46(0,0,stage.stageWidth,stage.stageHeight);

View File

@@ -11,7 +11,7 @@ package alternativa.tanks
import package_18.name_44;
import package_19.name_53;
import alternativa.tanks.game.entities.map.A3DMapComponent;
import package_9.name_20;
import alternativa.tanks.game.camera.FreeCameraController;
public class InitBattleTask extends GameTask
{
@@ -35,7 +35,7 @@ package alternativa.tanks
override public function run() : void
{
var _loc1_:name_44 = this.gameKernel.name_5();
var _loc2_:name_20 = new name_20(_loc1_.name_27(),this.gameKernel.name_66());
var _loc2_:FreeCameraController = new FreeCameraController(_loc1_.name_27(),this.gameKernel.name_66());
_loc1_.name_63(_loc2_);
_loc2_.name_75(0,0,1000);
_loc2_.name_76(0,2000,0);

View File

@@ -93,9 +93,9 @@ package alternativa.tanks
import package_87.name_267;
import package_88.name_268;
import package_89.name_266;
import package_9.name_20;
import package_9.name_298;
import package_9.name_299;
import alternativa.tanks.game.camera.FreeCameraController;
import alternativa.tanks.game.camera.OrbitCameraController;
import alternativa.tanks.game.camera.FollowCameraController;
import package_90.name_273;
import package_91.name_296;
import package_91.name_349;
@@ -144,11 +144,11 @@ package alternativa.tanks
private var var_73:BitmapData;
private var var_67:name_299;
private var var_67:FollowCameraController;
private var var_69:name_298;
private var var_69:OrbitCameraController;
private var freeCameraController:name_20;
private var freeCameraController:FreeCameraController;
private var var_68:name_102;
@@ -178,7 +178,7 @@ package alternativa.tanks
private var var_80:name_293 = new name_293();
public function TankTestTask(param1:int, param2:Config, param3:GameKernel, param4:name_20, param5:Preloader)
public function TankTestTask(param1:int, param2:Config, param3:GameKernel, param4:FreeCameraController, param5:Preloader)
{
super(param1);
this.preloader = param5;
@@ -202,8 +202,8 @@ package alternativa.tanks
_loc1_.name_94(KeyboardEventType.KEY_DOWN,this.onKeyDown);
var _loc2_:name_56 = name_56(var_4.getTaskInterface(name_56));
_loc2_.addEventListener(name_253.TANK_CLICK,this);
this.var_67 = new name_299(this.gameKernel.name_5().name_27(),this.gameKernel.method_112().name_246().collisionDetector,name_257.STATIC,_loc1_);
this.var_69 = new name_298(this.gameKernel.name_5().name_27(),this.gameKernel.method_112().name_246().collisionDetector,name_257.STATIC,_loc1_);
this.var_67 = new FollowCameraController(this.gameKernel.name_5().name_27(),this.gameKernel.method_112().name_246().collisionDetector,name_257.STATIC,_loc1_);
this.var_69 = new OrbitCameraController(this.gameKernel.name_5().name_27(),this.gameKernel.method_112().name_246().collisionDetector,name_257.STATIC,_loc1_);
this.var_81 = new name_290(this.gameKernel.name_5());
this.var_75 = new name_285();
this.gameKernel.stage.addChild(this.var_75);
@@ -305,10 +305,10 @@ package alternativa.tanks
case Keyboard.N:
if(this.var_68 == this.freeCameraController)
{
name_20.targeted = !name_20.targeted;
FreeCameraController.targeted = !FreeCameraController.targeted;
break;
}
name_20.targeted = true;
FreeCameraController.targeted = true;
this.setCameraController(this.freeCameraController);
break;
case Keyboard.ENTER:

View File

@@ -1,15 +1,15 @@
package package_9
package alternativa.tanks.game.camera
{
import flash.display.Shape;
import package_18.name_90;
public class name_23 extends Shape
public class AxisIndicator extends Shape
{
private var var_32:int;
private var axis:Vector.<Number> = Vector.<Number>([0,0,0,0,0,0]);
public function name_23(size:int)
public function AxisIndicator(size:int)
{
super();
this.var_32 = size;

View File

@@ -1,13 +1,13 @@
package package_9
package alternativa.tanks.game.camera
{
import package_18.name_90;
import package_46.name_194;
public class class_32
public class CameraControllerBase
{
protected var camera:name_90;
public function class_32()
public function CameraControllerBase()
{
super();
}

View File

@@ -1,4 +1,4 @@
package package_9
package alternativa.tanks.game.camera
{
import flash.ui.Keyboard;
import flash.utils.getTimer;
@@ -19,7 +19,7 @@ package package_9
import package_76.name_256;
import package_90.name_273;
public class name_299 extends class_32 implements name_102
public class FollowCameraController extends CameraControllerBase implements name_102
{
private static var parentMatrix:Matrix4 = new Matrix4();
@@ -117,7 +117,7 @@ package package_9
private var var_515:name_380;
public function name_299(camera:name_90, collisionDetector:name_256, collisionMask:int, input:IInput)
public function FollowCameraController(camera:name_90, collisionDetector:name_256, collisionMask:int, input:IInput)
{
super();
this.camera = camera;
@@ -162,9 +162,9 @@ package package_9
this.targetPosition.copy(targetPosition);
this.targetDirection.copy(targetDirection);
this.var_522 = 0;
this.method_540(targetPosition,targetDirection,false,10000,this.cameraPositionData);
this.getCameraPositionData(targetPosition,targetDirection,false,10000,this.cameraPositionData);
this.position.copy(this.cameraPositionData.position);
this.rotation.x = this.method_542(this.cameraPositionData) - 0.5 * Math.PI;
this.rotation.x = this.getPitchAngle(this.cameraPositionData) - 0.5 * Math.PI;
this.rotation.z = Math.atan2(-targetDirection.x,targetDirection.y);
name_201(this.position);
name_352(this.rotation);
@@ -191,17 +191,17 @@ package package_9
{
dt = 0.1;
}
this.method_538();
this.updateHeight();
if(!this.locked)
{
this.method_114();
this.updateTargetState();
}
this.method_540(this.targetPosition,this.targetDirection,true,dt,this.cameraPositionData);
this.getCameraPositionData(this.targetPosition,this.targetDirection,true,dt,this.cameraPositionData);
positionDelta.method_366(this.cameraPositionData.position,this.position);
var positionError:Number = positionDelta.length();
if(positionError > maxPositionError)
{
this.var_526 = this.method_539(positionError - maxPositionError);
this.var_526 = this.getLinearSpeed(positionError - maxPositionError);
}
var distance:Number = this.var_526 * dt;
if(distance > positionError)
@@ -209,27 +209,27 @@ package package_9
distance = positionError;
}
positionDelta.normalize().scale(distance);
var targetPitchAngle:Number = this.method_542(this.cameraPositionData);
var targetPitchAngle:Number = this.getPitchAngle(this.cameraPositionData);
var targetYawAngle:Number = Number(Math.atan2(-this.targetDirection.x,this.targetDirection.y));
var currentPitchAngle:Number = name_501.name_506(this.rotation.x + 0.5 * Math.PI);
var currentYawAngle:Number = name_501.name_506(this.rotation.z);
var pitchError:Number = name_501.name_628(targetPitchAngle - currentPitchAngle);
this.var_525 = this.method_537(pitchError,this.var_525);
this.var_525 = this.getAngularSpeed(pitchError,this.var_525);
var deltaPitch:Number = this.var_525 * dt;
if(pitchError > 0 && deltaPitch > pitchError || pitchError < 0 && deltaPitch < pitchError)
{
deltaPitch = pitchError;
}
var yawError:Number = name_501.name_628(targetYawAngle - currentYawAngle);
this.var_527 = this.method_537(yawError,this.var_527);
this.var_527 = this.getAngularSpeed(yawError,this.var_527);
var deltaYaw:Number = this.var_527 * dt;
if(yawError > 0 && deltaYaw > yawError || yawError < 0 && deltaYaw < yawError)
{
deltaYaw = yawError;
}
this.var_526 = this.method_541(this.var_526,0,camSpeedThreshold);
this.var_525 = this.method_541(this.var_525,0,camSpeedThreshold);
this.var_527 = this.method_541(this.var_527,0,camSpeedThreshold);
this.var_526 = this.snap(this.var_526,0,camSpeedThreshold);
this.var_525 = this.snap(this.var_525,0,camSpeedThreshold);
this.var_527 = this.snap(this.var_527,0,camSpeedThreshold);
this.position.add(positionDelta);
this.rotation.x += deltaPitch;
this.rotation.z += deltaYaw;
@@ -252,7 +252,7 @@ package package_9
public function set method_534(value:Number) : void
{
this.var_510 = name_501.clamp(value,MIN_HEIGHT,MAX_HEIGHT);
var d:Number = this.method_535(this.var_510);
var d:Number = this.getCamDistance(this.var_510);
this.var_521 = Math.atan2(this.var_510,d);
this.var_511 = Math.sqrt(this.var_510 * this.var_510 + d * d);
this.var_522 = 0;
@@ -260,13 +260,13 @@ package package_9
public function method_546(targetPosition:name_194, targetDirection:name_194, resultingPosition:name_194, resultingAngles:name_194) : void
{
this.method_540(targetPosition,targetDirection,false,10000,this.cameraPositionData);
resultingAngles.x = this.method_542(this.cameraPositionData) - 0.5 * Math.PI;
this.getCameraPositionData(targetPosition,targetDirection,false,10000,this.cameraPositionData);
resultingAngles.x = this.getPitchAngle(this.cameraPositionData) - 0.5 * Math.PI;
resultingAngles.z = Math.atan2(-targetDirection.x,targetDirection.y);
resultingPosition.copy(this.cameraPositionData.position);
}
private function method_540(targetPosition:name_194, targetDirection:name_194, useReboundDelay:Boolean, dt:Number, result:CameraPositionData) : void
private function getCameraPositionData(targetPosition:name_194, targetDirection:name_194, useReboundDelay:Boolean, dt:Number, result:CameraPositionData) : void
{
var angle:Number = NaN;
var now:int = 0;
@@ -295,7 +295,7 @@ package package_9
{
rotationMatrix.method_344(axis,-angle);
rotationMatrix.method_345(flatDirection,rayDirection);
minCollisionDistance = this.method_543(rayOrigin,rayDirection,this.var_511,minCollisionDistance);
minCollisionDistance = this.getCollisionDistance(rayOrigin,rayDirection,this.var_511,minCollisionDistance);
}
if(useReboundDelay)
{
@@ -342,7 +342,7 @@ package package_9
}
}
private function method_543(rayOrigin:name_194, rayDirection:name_194, rayLength:Number, minCollisionDistance:Number) : Number
private function getCollisionDistance(rayOrigin:name_194, rayDirection:name_194, rayLength:Number, minCollisionDistance:Number) : Number
{
var distance:Number = NaN;
if(this.collisionDetector.raycast(rayOrigin,rayDirection,this.collisionMask,rayLength,null,rayHit))
@@ -364,7 +364,7 @@ package package_9
return minCollisionDistance;
}
private function method_114() : void
private function updateTargetState() : void
{
this.setMatrix(this.var_515.parent,parentMatrix);
this.setMatrix(this.var_515,matrix);
@@ -379,7 +379,7 @@ package package_9
matrix.name_75(object.x,object.y,object.z);
}
private function method_538() : void
private function updateHeight() : void
{
var heightChangeDir:int = this.input.name_192(KEY_CAMERA_UP) - this.input.name_192(KEY_CAMERA_DOWN);
if(heightChangeDir != 0)
@@ -388,7 +388,7 @@ package package_9
}
}
private function method_535(h:Number) : Number
private function getCamDistance(h:Number) : Number
{
var hMid:Number = 0.5 * (3300 + 200);
var a:Number = hMid;
@@ -397,12 +397,12 @@ package package_9
return -k * (h - a) * (h - a) + 1300;
}
private function method_539(positionError:Number) : Number
private function getLinearSpeed(positionError:Number) : Number
{
return 3 * positionError;
}
private function method_537(angleError:Number, currentSpeed:Number) : Number
private function getAngularSpeed(angleError:Number, currentSpeed:Number) : Number
{
if(angleError < -maxAngleError)
{
@@ -415,7 +415,7 @@ package package_9
return currentSpeed;
}
private function method_541(value:Number, snapValue:Number, epsilon:Number) : Number
private function snap(value:Number, snapValue:Number, epsilon:Number) : Number
{
if(value > snapValue - epsilon && value < snapValue + epsilon)
{
@@ -424,7 +424,7 @@ package package_9
return value;
}
private function method_542(cameraPositionData:CameraPositionData) : Number
private function getPitchAngle(cameraPositionData:CameraPositionData) : Number
{
var angle:Number = this.var_521 - fixedPitch.value;
if(angle < 0)
@@ -439,7 +439,7 @@ package package_9
return cameraPositionData.extraPitch - Math.atan2(t * this.var_510,pitchCorrectionCoeff.value * this.var_510 * (1 / Math.tan(angle) - (1 - t) / Math.tan(this.var_521)));
}
private function method_547(value:Number, targetValue:Number, delta:Number) : Number
private function moveValueTowards(value:Number, targetValue:Number, delta:Number) : Number
{
if(value < targetValue)
{

View File

@@ -1,4 +1,4 @@
package package_9
package alternativa.tanks.game.camera
{
import flash.geom.Vector3D;
import alternativa.tanks.game.ObjectController;
@@ -14,7 +14,7 @@ package package_9
import package_46.name_194;
import package_47.name_193;
public class name_20 implements name_102
public class FreeCameraController implements name_102
{
public static var smoothing:Number = 20;
@@ -62,7 +62,7 @@ package package_9
private var var_45:Matrix4 = new Matrix4();
public function name_20(camera:name_90, input:IInput)
public function FreeCameraController(camera:name_90, input:IInput)
{
super();
this.input = input;
@@ -179,7 +179,7 @@ package package_9
}
if(targeted && this.target != null)
{
this.method_114();
this.updateTargetState();
dx = this.var_45.d - object.x;
dy = this.var_45.h - object.y;
dz = this.var_45.l - object.z;
@@ -189,14 +189,14 @@ package package_9
}
}
private function method_114() : void
private function updateTargetState() : void
{
this.method_113(this.target.parent,this.parentMatrix);
this.method_113(this.target,this.var_45);
this.setMatrixFromObject(this.target.parent,this.parentMatrix);
this.setMatrixFromObject(this.target,this.var_45);
this.var_45.append(this.parentMatrix);
}
private function method_113(object:name_78, matrix:Matrix4) : void
private function setMatrixFromObject(object:name_78, matrix:Matrix4) : void
{
matrix.name_196(object.rotationX,object.rotationY,object.rotationZ);
matrix.name_75(object.x,object.y,object.z);

View File

@@ -1,4 +1,4 @@
package package_9
package alternativa.tanks.game.camera
{
import flash.ui.Keyboard;
import flash.utils.getTimer;
@@ -19,7 +19,7 @@ package package_9
import package_76.name_256;
import package_90.name_273;
public class name_298 extends class_32 implements name_102
public class OrbitCameraController extends CameraControllerBase implements name_102
{
private static var parentMatrix:Matrix4 = new Matrix4();
@@ -137,7 +137,7 @@ package package_9
private var var_523:name_194 = new name_194();
public function name_298(camera:name_90, collisionDetector:name_256, collisionMask:int, input:IInput)
public function OrbitCameraController(camera:name_90, collisionDetector:name_256, collisionMask:int, input:IInput)
{
super();
this.camera = camera;
@@ -148,7 +148,7 @@ package package_9
this.collisionDetector = collisionDetector;
this.collisionMask = collisionMask;
this.input = input;
this.method_534 = 600;
this.cameraHeight = 600;
}
public function name_108() : void
@@ -182,7 +182,7 @@ package package_9
{
dt = 0.1;
}
this.method_114();
this.updateTargetState();
matrix.method_353(targetOffset,this.var_512);
var distanceChangeDir:int = this.input.name_192(KEY_CAMERA_UP) - this.input.name_192(KEY_CAMERA_DOWN) - this.input.method_261();
if(distanceChangeDir != 0)
@@ -244,16 +244,16 @@ package package_9
camera.rotationZ = -Math.atan2(dx,dy);
}
private function set method_534(value:Number) : void
private function set cameraHeight(value:Number) : void
{
this.var_510 = name_501.clamp(value,MIN_HEIGHT,MAX_HEIGHT);
var d:Number = this.method_535(this.var_510);
var d:Number = this.getCamDistance(this.var_510);
this.var_521 = Math.atan2(this.var_510,d);
this.var_511 = Math.sqrt(this.var_510 * this.var_510 + d * d);
this.var_522 = 0;
}
private function method_540(targetPosition:name_194, targetDirection:name_194, useReboundDelay:Boolean, dt:Number, result:CameraPositionData) : void
private function getCameraPositionData(targetPosition:name_194, targetDirection:name_194, useReboundDelay:Boolean, dt:Number, result:CameraPositionData) : void
{
var angle:Number = NaN;
var now:int = 0;
@@ -282,7 +282,7 @@ package package_9
{
this.rotationMatrix.method_344(axis,-angle);
this.rotationMatrix.method_345(flatDirection,rayDirection);
minCollisionDistance = this.method_536(rayOrigin,rayDirection,this.var_511,minCollisionDistance);
minCollisionDistance = this.getMinCollisionDistance(rayOrigin,rayDirection,this.var_511,minCollisionDistance);
}
if(useReboundDelay)
{
@@ -329,7 +329,7 @@ package package_9
}
}
private function method_536(rayOrigin:name_194, rayDirection:name_194, rayLength:Number, minCollisionDistance:Number) : Number
private function getMinCollisionDistance(rayOrigin:name_194, rayDirection:name_194, rayLength:Number, minCollisionDistance:Number) : Number
{
var distance:Number = NaN;
if(this.collisionDetector.raycast(rayOrigin,rayDirection,this.collisionMask,rayLength,null,rayHit))
@@ -351,43 +351,43 @@ package package_9
return minCollisionDistance;
}
private function method_114() : void
private function updateTargetState() : void
{
this.method_113(this.var_515.parent,parentMatrix);
this.method_113(this.var_515,matrix);
this.setMatrixFromObject(this.var_515.parent,parentMatrix);
this.setMatrixFromObject(this.var_515,matrix);
matrix.append(parentMatrix);
matrix.getAxis(3,this.targetPosition);
this.targetDirection.reset(matrix.b,matrix.f,matrix.j);
}
private function method_113(object:name_78, matrix:Matrix4) : void
private function setMatrixFromObject(object:name_78, matrix:Matrix4) : void
{
matrix.name_196(object.rotationX,object.rotationY,object.rotationZ);
matrix.name_75(object.x,object.y,object.z);
}
private function method_538() : void
private function updateHeight() : void
{
var heightChangeDir:int = this.input.name_192(KEY_CAMERA_UP) - this.input.name_192(KEY_CAMERA_DOWN);
if(heightChangeDir != 0)
{
this.method_534 = this.var_510 + heightChangeDir * HEIGHT_CHANGE_STEP;
this.cameraHeight = this.var_510 + heightChangeDir * HEIGHT_CHANGE_STEP;
}
}
private function method_535(h:Number) : Number
private function getCamDistance(h:Number) : Number
{
var v:Number = 200 - 1750;
var k:Number = (1300 - 600) / (v * v);
return -k * (h - 1750) * (h - 1750) + 1300;
}
private function method_539(positionError:Number) : Number
private function getLinearSpeed(positionError:Number) : Number
{
return 3 * positionError;
}
private function method_537(angleError:Number, currentSpeed:Number) : Number
private function getAngularSpeed(angleError:Number, currentSpeed:Number) : Number
{
if(angleError < -maxAngleError)
{
@@ -400,7 +400,7 @@ package package_9
return currentSpeed;
}
private function method_541(value:Number, snapValue:Number, epsilon:Number) : Number
private function snap(value:Number, snapValue:Number, epsilon:Number) : Number
{
if(value > snapValue - epsilon && value < snapValue + epsilon)
{
@@ -409,7 +409,7 @@ package package_9
return value;
}
private function method_542(cameraPositionData:CameraPositionData) : Number
private function getPitchAngle(cameraPositionData:CameraPositionData) : Number
{
var angle:Number = this.var_521 - fixedPitch.value;
if(angle < 0)

View File

@@ -34,7 +34,7 @@ package package_18
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 package_9.name_23;
import alternativa.tanks.game.camera.AxisIndicator;
use namespace alternativa3d;
@@ -74,7 +74,7 @@ package package_18
private var var_13:name_102;
private var axisIndicator:name_23;
private var axisIndicator:AxisIndicator;
private var renderers:name_86;
@@ -148,7 +148,7 @@ package package_18
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 name_23(100);
this.axisIndicator = new AxisIndicator(100);
this.resourceManager = new name_101();
this.var_9 = new name_92();
this.staticShadowRenderer = new name_97(null,1024,4);
@@ -470,7 +470,7 @@ package package_18
}
}
public function name_42() : name_23
public function name_42() : AxisIndicator
{
return this.axisIndicator;
}