using UnityEngine;
using UnityEngine.UI;
public class Player_SC : MonoBehaviour {
public Texture2D leftArrowButtonTexture;
private Rect leftArrowButtonRect;
public Texture2D rightArrowButtonTexture;
private Rect rightArrowButtonRect;
public Texture2D fireButtonTexture;
private Rect fireButtonRect;
public Texture2D startButtonTexture;
private Rect startButtonRect;
public int health;
private Text healthLabel;
public static int levelTimeDuration = 180;
public AudioClip lowHealth;
private bool lowHealthIsPlaying = false;
private bool levelIsCompleted = false;
private float maxAcceleration = 2f;
private float fireSpeed = 5f;
private float xMin, xMax, offsetSpace = 1f;
private GameObject playerProjectiles_GO;
public GameObject projectile_GO;
public AudioClip fireSound;
private GameManager_SC gameManager_SC;
private float ratioX, ratioY;
// Use this for initialization
void Start() {
computePlayersMaxPosition();
generateUiButtons();
playerProjectiles_GO = GameObject.Find("PlayerProjectiles");
healthLabel = GameObject.Find("Life").GetComponent<Text>();
gameManager_SC = GameObject.Find("GameManager_GO").GetComponent<GameMana
ger_SC>();
healthLabel.text = health.ToString();
gameManager_SC.getDifficultyIndex();
}
// Update is called once per frame
void Update() {
playerMovementController(KeyCode.F15);
playerMovementByDefault2(1.5f);
controllUiButtons();
fireController();
playerIsDead();
updateHealthLabel();
checkLowHealth();
levelCompeted();
}
private void computePlayersMaxPosition() {
Debug.Log("Computing max X and Y for the player");
float distance = transform.position.z - Camera.main.transform.position.z
;
Vector3 maxLeft = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, dis
tance));
xMin = maxLeft.x + offsetSpace;
Vector3 maxRight = Camera.main.ViewportToWorldPoint(new Vector3(1, 0, di
stance));
xMax = maxRight.x - offsetSpace;
}
public void playerMovementController(KeyCode keyCode) {
if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A) || keyCod
e == KeyCode.A) {
changePlayerPosition(Vector3.left, maxAcceleration);
} else if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D) |
| keyCode == KeyCode.D) {
changePlayerPosition(Vector3.right, maxAcceleration);
}
if (Input.GetKeyDown(KeyCode.KeypadEnter) || Input.GetKeyDown(KeyCode.Re
turn)) {
liftOffButtonPressed();
}
}
private void changePlayerPosition(Vector3 vector3, float speed) {
transform.position += vector3 * speed * Time.deltaTime;
float newX = Mathf.Clamp(transform.position.x, xMin, xMax);
transform.position = new Vector3(newX, transform.position.y, transform.p
osition.z);
}
private void playerMovementByDefault2(float levelRunningSpeed) {
changePlayerPosition(new Vector3(0,levelRunningSpeed, 0), levelRunningSp
eed);
}
private void fireController() {
if (Input.GetKeyDown(KeyCode.Space)) {
InvokeRepeating("fire", 0.001f, 0.5f);
}
if (Input.GetKeyUp(KeyCode.Space)) {
CancelInvoke("fire");
}
}
public void fire() {
GameObject fire = Instantiate(projectile_GO, new Vector3(transform.posit
ion.x, transform.position.y, 0), Quaternion.identity) as GameObject;
fire.transform.parent = playerProjectiles_GO.transform;
fire.GetComponent<Rigidbody2D>().velocity = new Vector2(0, fireSpeed);
AudioSource.PlayClipAtPoint(fireSound, transform.position);
}
private
private
private
private
int[]
int[]
int[]
int[]
leftArrowButtonProperties;
rightArrowButtonProperties;
fireButtonProperties;
startButtonProperties;
void controllUiButtons() {
foreach (Touch touch in Input.touches) {
if ((touch.phase == TouchPhase.Began) || (touch.phase == TouchPhase.
Stationary)) {
if (verifyTouchedButton(touch, leftArrowButtonProperties)) {
Debug.Log("LEFT ARROW PRESSED");
playerMovementController(KeyCode.A);
} else {
if (verifyTouchedButton(touch, rightArrowButtonProperties))
{
Debug.Log("RIGHT ARROW PRESSED");
playerMovementController(KeyCode.D);
}
}
}
// FIRE ZONE
if (verifyTouchedButton(touch, fireButtonProperties)) {
if (touch.phase == TouchPhase.Began) {
fire();
}
}
// START BUTTON ZONE
if (levelCompeted()) {
if (verifyTouchedButton(touch, startButtonProperties)) {
if (touch.phase == TouchPhase.Began) {
Debug.Log("LIFT OFF button PRESSED");
liftOffButtonPressed();
}
}
}
}
}
private void liftOffButtonPressed() {
gameManager_SC.loadLevel("04_WinScene");
}
private bool verifyTouchedButton(Touch currentTouch, int[] buttonProperties)
{
int
int
int
int
xStartPosition
xEndPosition =
yStartPosition
yEndPosition =
= buttonProperties[0];
buttonProperties[0] + buttonProperties[2];
= buttonProperties[1];
buttonProperties[1] + buttonProperties[3];
health -= missle.getDamage();
Destroy(collider.gameObject);
}
}
private void playerIsDead() {
if (health <= 0) {
Debug.Log("Player dead!");
Destroy(gameObject);
gameManager_SC.loadLevel("05_LoseScene");
}
}
private void updateHealthLabel() {
if (health < 0) {
health = 0;
}
healthLabel.text = health.ToString();
if (health <= 40) {
healthLabel.color = Color.red;
} else {
if (health > 40) {
healthLabel.color = Color.green;
}
}
}
public void addHealth(int value) {
health += value;
}
private void checkLowHealth() {
if (health <= 40) {
if (!lowHealthIsPlaying) {
lowHealthIsPlaying = true;
AudioSource.PlayClipAtPoint(lowHealth, transform.position);
}
} else if (health > 40) {
if (lowHealthIsPlaying) {
lowHealthIsPlaying = false;
}
}
}
private Boolean levelCompeted() {
if (Time.timeSinceLevelLoad >= levelTimeDuration) {
levelIsCompleted = true;
return true;
}
return false;
}
}