//---------------------------------------------------------------------------------
// Ported to the Atomic Game Engine
// Originally written for XNA by Michael Hoffman
// Find the full tutorial at: http://gamedev.tutsplus.com/series/vector-shooter-xna/
//----------------------------------------------------------------------------------
using System;
using System.IO;
using AtomicEngine;
namespace AtomicBlaster
{
static class ShipInput
{
private static bool isAimingWithMouse = false;
static IntVector2 lastTouchPos = IntVector2.Zero;
public static void Update()
{
isAimingWithMouse = true;
}
public static Vector2 GetMovementDirection()
{
var input = AtomicNET.GetSubsystem();
Vector2 direction = new Vector2(0, 0);
#if ATOMIC_DESKTOP
if (input.GetKeyDown((int) SDL.SDL_Keycode.SDLK_a))
direction.X -= 1;
if (input.GetKeyDown((int)SDL.SDL_Keycode.SDLK_d))
direction.X += 1;
if (input.GetKeyDown((int)SDL.SDL_Keycode.SDLK_s))
direction.Y -= 1;
if (input.GetKeyDown((int)SDL.SDL_Keycode.SDLK_w))
direction.Y += 1;
#endif
#if ATOMIC_MOBILE
var touchPos = lastTouchPos;
if (input.NumTouches == 1)
{
touchPos = input.GetTouchPosition(0);
lastTouchPos = touchPos;
}
if (touchPos != IntVector2.Zero)
{
direction = new Vector2((float)touchPos.X, (float)touchPos.Y);
}
Vector2 shipPos = PlayerShip.Instance.Position;
shipPos.Y = GameRoot.ScreenBounds.Height - shipPos.Y;
direction -= shipPos;
direction.Y = -direction.Y;
if (touchPos == IntVector2.Zero || direction.Length < 4.0f)
direction = Vector2.Zero;
#endif
#if ATOMIC_IOS
uint numJoySticks = 0;
#else
uint numJoySticks = input.GetNumJoysticks();
#endif
if (numJoySticks > 0)
{
var state = input.GetJoystickByIndex(0);
float x = state.GetAxisPosition(0);
float y = state.GetAxisPosition(1);
if (x < -0.15f)
direction.X = x;
if (x > 0.15f)
direction.X = x;
if (y < -0.15f)
direction.Y = -y;
if (y > 0.15f)
direction.Y = -y;
}
// Clamp the length of the vector to a maximum of 1.
if (direction.LengthSquared > 1)
direction.Normalize();
return direction;
}
public static Vector2 GetAimDirection()
{
return GetMouseAimDirection();
}
private static Vector2 GetMouseAimDirection()
{
var input = AtomicNET.GetSubsystem();
Vector2 direction = new Vector2();
#if ATOMIC_DESKTOP
direction = new Vector2((float)input.GetMousePosition().X, (float)input.GetMousePosition().Y);
#endif
#if ATOMIC_IOS
uint numJoySticks = 0;
#else
uint numJoySticks = input.GetNumJoysticks();
#endif
if (numJoySticks > 0)
{
Vector2 dir = new Vector2(0, 0);
var state = input.GetJoystickByIndex(0);
float x = state.GetAxisPosition(0);
float y = state.GetAxisPosition(1);
if (x < -0.15f)
dir.X = x;
if (x > 0.15f)
dir.X = x;
if (y < -0.15f)
dir.Y = -y;
if (y > 0.15f)
dir.Y = -y;
// Clamp the length of the vector to a maximum of 1.
if (dir.LengthSquared > 1)
dir.Normalize();
return dir;
}
#if !ATOMIC_MOBILE
direction = new Vector2((float)input.GetMousePosition().X, (float)input.GetMousePosition().Y);
#else
{
direction = PlayerShip.Instance.Velocity;
return Vector2.Normalize(direction);
}
#endif
Vector2 shipPos = PlayerShip.Instance.Position;
shipPos.Y = GameRoot.ScreenBounds.Height - shipPos.Y;
direction -= shipPos;
direction.Y = -direction.Y;
if (direction == Vector2.Zero)
return Vector2.Zero;
else
return Vector2.Normalize(direction);
}
public static bool WasBombButtonPressed()
{
var input = AtomicNET.GetSubsystem();
return input.GetKeyPress((int)SDL.SDL_Keycode.SDLK_SPACE);
}
}
}