void GameControlsManager_GameControlsEvent( GameControlsEventData e )
{
//GameControlsKeyDownEventData
{
GameControlsKeyDownEventData evt = e as GameControlsKeyDownEventData;
if( evt != null )
{
if( GetControlKeyStrength( evt.ControlKey ) != evt.Strength )
{
ControlKeyPress( evt.ControlKey, evt.Strength );
//send to server
if( EntitySystemWorld.Instance.IsClientOnly() )
{
//send turnToPosition before fire
if( evt.ControlKey == GameControlKeys.Fire1 ||
evt.ControlKey == GameControlKeys.Fire2 )
{
if( Instance == this )//send message only to this player
{
Vec3 turnToPosition;
if( GetTurnToPosition( out turnToPosition ) )
Client_SendTurnToPositionToServer( turnToPosition );
}
}
Client_SendControlKeyPressToServer( evt.ControlKey, evt.Strength );
}
}
return;
}
}
//GameControlsKeyUpEventData
{
GameControlsKeyUpEventData evt = e as GameControlsKeyUpEventData;
if( evt != null )
{
if( IsControlKeyPressed( evt.ControlKey ) )
{
ControlKeyRelease( evt.ControlKey );
//send to server
if( EntitySystemWorld.Instance.IsClientOnly() )
Client_SendControlKeyReleaseToServer( evt.ControlKey );
}
return;
}
}
//TPS arcade specific (camera observe)
bool tpsArcade = GameMap.Instance != null &&
GameMap.Instance.GameType == GameMap.GameTypes.TPSArcade;
//GameControlsMouseMoveEventData
if( !tpsArcade )
{
GameControlsMouseMoveEventData evt = e as GameControlsMouseMoveEventData;
if( evt != null )
{
Vec2 sens = GameControlsManager.Instance.MouseSensitivity * 2;
lookDirection.Horizontal -= evt.MouseOffset.X * sens.X;
lookDirection.Vertical -= evt.MouseOffset.Y * sens.Y;
float limit = fpsCamera ? .1f : MathFunctions.PI / 8;
if( lookDirection.Vertical < -( MathFunctions.PI / 2 - limit ) )
lookDirection.Vertical = -( MathFunctions.PI / 2 - limit );
if( lookDirection.Vertical > ( MathFunctions.PI / 2 - limit ) )
lookDirection.Vertical = ( MathFunctions.PI / 2 - limit );
return;
}
}
//GameControlsTickEventData
if( !tpsArcade )
{
GameControlsTickEventData evt = e as GameControlsTickEventData;
if( evt != null )
{
Vec2 sensitivity = GameControlsManager.Instance.JoystickAxesSensitivity * 2;
Vec2 offset = Vec2.Zero;
offset.X -= GetControlKeyStrength( GameControlKeys.LookLeft );
offset.X += GetControlKeyStrength( GameControlKeys.LookRight );
offset.Y += GetControlKeyStrength( GameControlKeys.LookUp );
offset.Y -= GetControlKeyStrength( GameControlKeys.LookDown );
//Turret specific
if( ControlledObject != null && ControlledObject is Turret )
{
offset.X -= GetControlKeyStrength( GameControlKeys.Left );
offset.X += GetControlKeyStrength( GameControlKeys.Right );
offset.Y += GetControlKeyStrength( GameControlKeys.Forward );
offset.Y -= GetControlKeyStrength( GameControlKeys.Backward );
}
offset *= evt.Delta * sensitivity;
lookDirection.Horizontal -= offset.X;
lookDirection.Vertical += offset.Y;
float limit = fpsCamera ? .1f : MathFunctions.PI / 8;
if( lookDirection.Vertical < -( MathFunctions.PI / 2 - limit ) )
lookDirection.Vertical = -( MathFunctions.PI / 2 - limit );
if( lookDirection.Vertical > ( MathFunctions.PI / 2 - limit ) )
lookDirection.Vertical = ( MathFunctions.PI / 2 - limit );
return;
}
}
//..
}