PDA

View Full Version : Limiting the zoom range of a weapon?



legacy-Ciced
08-08-2003, 07:25 AM
I want the zoom range to be about half the zoom of the sniper however I'm a little stuck as to how to do this.
I've come to the conclusion it's DesiredFOV that sets the range but I can't see where it's being set.

Here's the code I have so far.


class AssualtRifle extends Weapon
config(user);

var(FirstPerson) float NewEffectOffset;
var(Gfx) float testX;
var(Gfx) float testY;

var(Gfx) float borderX;
var(Gfx) float borderY;

var(Gfx) float focusX;
var(Gfx) float focusY;
var(Gfx) float innerArrowsX;
var(Gfx) float innerArrowsY;
var(Gfx) Color ArrowColor;
var(Gfx) Color TargetColor;
var(Gfx) Color NoTargetColor;
var(Gfx) Color FocusColor;

var transient float LastFOV;
var() bool zoomed;
var() xEmitter chargeEmitter;

simulated function vector GetEffectStart()
{
local Vector X,Y,Z;

if ( Instigator.IsFirstPerson() && (Hand == 0) )
{
GetViewAxes(X, Y, Z);
if ( class'PlayerController'.Default.bSmallWeapons || Level.bClassicView )
return (Instigator.Location +
Instigator.CalcDrawOffset(self) +
SmallEffectOffset.X * X +
SmallEffectOffset.Y * Y * Hand -
NewEffectOffset * Z);
else
return (Instigator.Location +
Instigator.CalcDrawOffset(self) +
EffectOffset.X * X +
EffectOffset.Y * Y * Hand +
EffectOffset.Z * Z);
}
return Super.GetEffectStart();
}

simulated function SetZoomBlendColor(Canvas c)
{
local Byte val;
local Color clr;
local Color fog;

clr.R = 255;
clr.G = 255;
clr.B = 255;
clr.A = 255;

if( Instigator.Region.Zone.bDistanceFog )
{
fog = Instigator.Region.Zone.DistanceFogColor;
val = 0;
val = Max( val, fog.R);
val = Max( val, fog.G);
val = Max( val, fog.B);

if( val > 128 )
{
val -= 128;
clr.R -= val;
clr.G -= val;
clr.B -= val;
}
}
c.DrawColor = clr;
}

simulated event RenderOverlays( Canvas Canvas )
{
local float tileScaleX;
local float tileScaleY;
local float bX;
local float bY;
local float fX;
local float fY;

local float tX;
local float tY;


if ( LastFOV > PlayerController(Instigator.Controller).DesiredFOV )
{
PlaySound(Sound'WeaponSounds.LightningGun.Lightnin gZoomIn', SLOT_Misc,,,,,false);
}
else if ( LastFOV < PlayerController(Instigator.Controller).DesiredFOV )
{
PlaySound(Sound'WeaponSounds.LightningGun.Lightnin gZoomOut', SLOT_Misc,,,,,false);
}
LastFOV = PlayerController(Instigator.Controller).DesiredFOV ;

if ( (PlayerController(Instigator.Controller).DesiredFO V == PlayerController(Instigator.Controller).DefaultFOV )
|| (Level.bClassicView && (PlayerController(Instigator.Controller).DesiredFO V == 90)) )
{
Super.RenderOverlays(Canvas);
zoomed=false;
}
else
{

tileScaleX = Canvas.SizeX / 640.0f;
tileScaleY = Canvas.SizeY / 480.0f;

bX = borderX * tileScaleX;
bY = borderY * tileScaleY;
fX = focusX * tileScaleX;
fY = focusY * tileScaleX;

tX = testX * tileScaleX;
tY = testY * tileScaleX;

Canvas.Style = 255;
Canvas.SetPos(0,0);
Canvas.DrawTile( Material'ZoomFB', Canvas.SizeX, Canvas.SizeY, 0.0, 0.0, 512, 512 ); // !! hardcoded size

Canvas.DrawColor = FocusColor;
Canvas.DrawColor.A = 255; // 255 was the original -asp. WTF??!?!?!
Canvas.Style = ERenderStyle.STY_Alpha;

Canvas.SetPos((Canvas.SizeX*0.5)-fX,(Canvas.SizeY*0.5)-fY);
Canvas.DrawTile( Texture'SniperFocus', fX*2.0, fY*2.0, 0.0, 0.0, Texture'SniperFocus'.USize, Texture'SniperFocus'.VSize );

fX = innerArrowsX * tileScaleX;
fY = innerArrowsY * tileScaleY;

Canvas.DrawColor = ArrowColor;
Canvas.SetPos((Canvas.SizeX*0.5)-fX,(Canvas.SizeY*0.5)-fY);
Canvas.DrawTile( Texture'SniperArrows', fX*2.0, fY*2.0, 0.0, 0.0, Texture'SniperArrows'.USize, Texture'SniperArrows'.VSize );

}
}

simulated function ClientStartFire(int mode)
{
if (mode == 1)
{
FireMode[mode].bIsFiring = true;
if( Instigator.Controller.IsA( 'PlayerController' ) )
PlayerController(Instigator.Controller).ToggleZoom ();
}
else
{
Super.ClientStartFire(mode);
}
}

simulated function ClientStopFire(int mode)
{
if (mode == 1)
{
FireMode[mode].bIsFiring = false;
if( Instigator.Controller.IsA( 'PlayerController' ) )
PlayerController(Instigator.Controller).StopZoom() ;
}
else
{
Super.ClientStopFire(mode);
}
}

simulated function BringUp(optional Weapon PrevWeapon)
{
if ( PlayerController(Instigator.Controller) != None )
LastFOV = PlayerController(Instigator.Controller).DesiredFOV ;
Super.BringUp();
}

simulated function bool PutDown()
{
if( Instigator.Controller.IsA( 'PlayerController' ) )
PlayerController(Instigator.Controller).EndZoom();
if ( Super.PutDown() )
{
GotoState('');
return true;
}
return false;
}

defaultproperties
{
NewEffectOffset=5.000000
FireModeClass(0)=Class'BrightWaves.AssualtRifleFir e'
FireModeClass(1)=Class'BrightWaves.AssualtRifleAlt Fire'
PutDownAnim="PutDown"
IdleAnimRate=0.030000
SelectSound=Sound'WeaponSounds.LinkGun.SwitchToLin kGun'
SelectForce="SwitchToLinkGun"
AIRating=0.680000
CurrentRating=0.680000
bMatchWeapons=True
EffectOffset=(X=100.000000,Y=25.000000,Z=-3.000000)
DisplayFOV=60.000000
Priority=5
DefaultPriority=5
HudColor=(B=128,R=128)
SmallViewOffset=(X=10.000000,Y=4.000000,Z=-9.000000)
CenteredOffsetY=-12.000000
CenteredRoll=3000
CenteredYaw=-300
InventoryGroup=2
PickupClass=Class'BrightWaves.AssualtRiflePickup'
PlayerViewOffset=(X=-2.000000,Y=-2.000000,Z=-3.000000)
PlayerViewPivot=(Yaw=500)
BobDamping=1.575000
AttachmentClass=Class'BrightWaves.AssualtRifleAtta chment'
IconMaterial=Texture'InterfaceContent.HUD.SkinA'
IconCoords=(X1=200,Y1=190,X2=321,Y2=280)
ItemName="Support Rifle"
Mesh=SkeletalMesh'Weapons.LinkGun_1st'
UV2Texture=Shader'XGameShaders.WeaponShaders.Weapo nEnvShader'
testX=100.000000
testY=100.000000
borderX=60.000000
borderY=60.000000
focusX=135.000000
focusY=105.000000
innerArrowsX=42.000000
innerArrowsY=42.000000
ArrowColor=(R=255,A=255)
TargetColor=(B=255,G=255,R=255,A=255)
NoTargetColor=(B=200,G=200,R=200,A=255)
FocusColor=(B=126,G=90,R=71,A=215)
bSniping=True
}

Any help appreciated. :)

legacy-Mr Evil
08-08-2003, 07:28 AM
Have a look in PlayerController at the ToggleZoom/StartZoom/EndZoom functions and see what they are doing. Then it should become clear how DesiredFov is being set.

legacy-Ciced
08-08-2003, 07:08 PM
Ok so I had a peek and found this in the AdjustView function.


// adjust FOV for weapon zooming
if ( bZooming )
{
ZoomLevel += DeltaTime * 1.0;
if (ZoomLevel > 0.9)
ZoomLevel = 0.9;
DesiredFOV = FClamp(90.0 - (ZoomLevel * 88.0), 1, 170);
}
else if ( Level.bClassicView && (DesiredFOV == 85) && (DefaultFOV == 85) )
DesiredFOV = 90;

So it appears ZoomLevel is responsible for limiting the zoom. However it seems to be set to 0.9 which I can't really change unless I create a new PlayerController and over write the function.

Is this correct?

legacy-Mr Evil
08-08-2003, 07:13 PM
You can examine the PlayerController each tick from your weapon class and tell it to stop zooming when it reaches the required level.

legacy-Ciced
08-09-2003, 02:09 AM
Thanks for the help, I'll see what I can come up with. :)

legacy-Ciced
08-09-2003, 11:10 AM
Adding this to the RenderOverlay seems to work quite nicely. :)


if (PlayerController(Instigator.Controller).ZoomLevel > 0.4)
{
PlayerController(Instigator.Controller).ZoomLevel = 0.4;
PlayerController(Instigator.Controller).bZooming = false;
}

legacy-Kazuhiro
08-12-2003, 12:55 AM
i had a problem with zooming before... figured out you could do this
PlayerController(instigator.controller).SetFOV(30) ;
or whatever distance you want.