1
0
Fork 0
This repository has been archived on 2024-01-06. You can view files and clone it, but cannot push or open issues or pull requests.
Global-Game-Jam-2019/Assets/Scripts/Ogres.cs
2019-01-27 14:54:55 +01:00

153 lines
6.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ogres : MonoBehaviour
{
public GameObject player;
public GameObject fire;
private float SPEED = 1;
private Direction currentDirection = Direction.DOWN;
private Animator animator;
private PlayerScript playerScript;
private Vector2 currentDestination;
private bool isAggro = false;
private bool fireSpotted = false;
private readonly int DISTANCE_TO_SPOT = 15;
// Start is called before the first frame update
void Start()
{
animator = GetComponent<Animator>();
playerScript = player.GetComponent<PlayerScript>();
}
// Update is called once per frame
void Update()
{
CheckAggro();
Vector2 direction = GetDirectionFromDestination(GetDestination());
if (direction.y > 0.1f && direction.x < -0.1f)
{
this.gameObject.transform.position = new Vector3(this.gameObject.transform.position.x - SPEED * Time.deltaTime * 0.70710678118655f, this.gameObject.transform.position.y + SPEED * Time.deltaTime * 0.70710678118655f, this.gameObject.transform.position.z);
animator.Play("OgresWalkLeft", 0);
currentDirection = Direction.UP_LEFT;
}
else if (direction.y > 0.1f && direction.x > 0.1f)
{
this.gameObject.transform.position = new Vector3(this.gameObject.transform.position.x + SPEED * Time.deltaTime * 0.70710678118655f, this.gameObject.transform.position.y + SPEED * Time.deltaTime * 0.70710678118655f, this.gameObject.transform.position.z);
animator.Play("OgresWalkRight", 0);
currentDirection = Direction.UP_RIGHT;
}
else if (direction.y < -0.1f && direction.x < -0.1f)
{
this.gameObject.transform.position = new Vector3(this.gameObject.transform.position.x - SPEED * Time.deltaTime * 0.70710678118655f, this.gameObject.transform.position.y - SPEED * Time.deltaTime * 0.70710678118655f, this.gameObject.transform.position.z);
animator.Play("OgresWalkLeft", 0);
currentDirection = Direction.DOWN_LEFT;
}
else if (direction.y < -0.1f && direction.x > 0.1f)
{
this.gameObject.transform.position = new Vector3(this.gameObject.transform.position.x + SPEED * Time.deltaTime * 0.70710678118655f, this.gameObject.transform.position.y - SPEED * Time.deltaTime * 0.70710678118655f, this.gameObject.transform.position.z);
animator.Play("OgresWalkRight", 0);
currentDirection = Direction.DOWN_RIGHT;
}
else if (direction.y > 0.1f)
{
this.gameObject.transform.position = new Vector3(this.gameObject.transform.position.x, this.gameObject.transform.position.y + SPEED * Time.deltaTime, this.gameObject.transform.position.z);
animator.Play("OgresWalkUp", 0);
currentDirection = Direction.UP;
}
else if (direction.y < -0.1f)
{
this.gameObject.transform.position = new Vector3(this.gameObject.transform.position.x, this.gameObject.transform.position.y - SPEED * Time.deltaTime, this.gameObject.transform.position.z);
animator.Play("OgresWalkDown", 0);
currentDirection = Direction.DOWN;
}
else if (direction.x < -0.1f)
{
this.gameObject.transform.position = new Vector3(this.gameObject.transform.position.x - SPEED * Time.deltaTime, this.gameObject.transform.position.y, this.gameObject.transform.position.z);
animator.Play("OgresWalkLeft", 0);
currentDirection = Direction.LEFT;
}
else if (direction.x > 0.1f)
{
this.gameObject.transform.position = new Vector3(this.gameObject.transform.position.x + SPEED * Time.deltaTime, this.gameObject.transform.position.y, this.gameObject.transform.position.z);
animator.Play("OgresWalkRight", 0);
currentDirection = Direction.RIGHT;
}
else
{
if (currentDirection == Direction.DOWN)
{
animator.Play("OgresStopDown", 0);
}
else if (currentDirection == Direction.UP)
{
animator.Play("OgresStopUp", 0);
}
else if (currentDirection == Direction.LEFT || currentDirection == Direction.UP_LEFT || currentDirection == Direction.DOWN_LEFT)
{
animator.Play("OgresStopLeft", 0);
}
else if (currentDirection == Direction.RIGHT || currentDirection == Direction.UP_RIGHT || currentDirection == Direction.DOWN_RIGHT)
{
animator.Play("OgresStopRight", 0);
}
else
{
animator.Play("OgresStopDown", 0);
}
}
}
void CheckAggro()
{
if (Vector2.Distance(this.transform.position, player.transform.position) < DISTANCE_TO_SPOT)
{
isAggro = true;
}
if (Vector2.Distance(this.transform.position, fire.transform.position) < DISTANCE_TO_SPOT)
{
fireSpotted = true;
}
}
Vector2 GetDestination()
{
if (!fireSpotted)
{
if (!isAggro)
{
if (Vector2.Distance(this.transform.position, currentDestination) < 4)
{
currentDestination = new Vector2(Random.Range(-20, 20), Random.Range(-20, 20));
}
return currentDestination;
}
else
{
if (Vector2.Distance(this.transform.position, player.transform.position) > DISTANCE_TO_SPOT * 5)
{
isAggro = false;
}
return player.transform.position;
}
}
else
{
if (Vector2.Distance(this.transform.position, fire.transform.position) < 4)
{
fire.GetComponent<FireScript>().DecrementIntensity(100);
Destroy(this.gameObject);
}
return fire.transform.position;
}
}
Vector2 GetDirectionFromDestination(Vector2 destination)
{
return new Vector2(destination.x - transform.position.x, destination.y - transform.position.y);
}
}