Пример #1
0
    //funcion que swithchea dependiendo del input recibido para  targetear enemigo
    //EnemyPosition.close: es para el  enemigo que este mas cerca
    void NewTarget(EnemyPosition findPosition)
    {
        if (enemiesClose.Count == 0)
        {
            ExitBattleMode();
            return;
        }
        _thresholdEnemy = 200;
        switch (findPosition)
        {
        case EnemyPosition.right:
            TargetNewEnemyLeftOrRight(findPosition);
            break;

        case EnemyPosition.left:
            TargetNewEnemyLeftOrRight(findPosition);
            break;

        case EnemyPosition.close:
            TargetNewEnemy();
            break;

        case EnemyPosition.up:
            TargetNewEnemyUpOrDown(findPosition);
            break;

        case EnemyPosition.down:
            TargetNewEnemyUpOrDown(findPosition);
            break;

        default:
            break;
        }
    }
Пример #2
0
    //obtiene el enemigo mas cercano dependiendo del movimiento (derecha o izquierda) recibido por el joystick derecho
    void TargetNewEnemyLeftOrRight(EnemyPosition findPosition)
    {
        //calculamos un punto donde mira saru para poder calcular su vector
        Vector2 positionLook = new Vector2(playerModel.transform.forward.x + transform.position.x, playerModel.transform.forward.z + transform.position.z);
        //calculamos el vector hacia donde mira saru desde su ubicacion
        Vector2 actualLookAt = new Vector2(positionLook.x - transform.position.x, positionLook.y - transform.position.z);
        //esta variable sirve para guardar el enemigo que tenemos tarjeteado antes de comprobar todos ya que _enemytarget cambia dentro del foreach
        Transform actualTarget = _enemyTarget;

        foreach (Transform enemy in enemiesClose)
        {
            if (actualTarget == enemy)
            {
                continue;
            }
            //calculamos el vector hacia donde esta el enemigo desde la posicion de Saru
            Vector2 enemyPlayerPosition = new Vector2(enemy.position.x - transform.position.x, enemy.position.z - transform.position.z);
            float   leftOrRight         = actualLookAt.x * enemyPlayerPosition.y - actualLookAt.y * enemyPlayerPosition.x;
            if ((leftOrRight > 0 && findPosition == EnemyPosition.right) || (leftOrRight < 0 && findPosition == EnemyPosition.left))
            {
                float threshold = Vector2.Angle(actualLookAt, enemyPlayerPosition);
                if (_thresholdEnemy > threshold)
                {
                    NextTarget(leftOrRight, enemy);
                }
            }
        }
        if (actualTarget != _enemyTarget)
        {
            _actualTimeTargetEnemyWithDirection = _timeToTargetNewEnemy;
        }
    }
Пример #3
0
    //obtiene el enemigo mas cercano dependiendo del movimiento (arriba o abajo) recibido por el joystick derecho
    void TargetNewEnemyUpOrDown(EnemyPosition findPosition)
    {
        //esta variable sirve para guardar el enemigo que tenemos tarjeteado antes de comprobar todos ya que _enemytarget cambia dentro del foreach
        Transform actualTarget = _enemyTarget;
        //variable necesaria para que el mismo codigo funcione para up y para down
        int upOrDown = findPosition == EnemyPosition.up? -1 : 1;

        _thresholdEnemy = (transform.position - _enemyTarget.position).magnitude * upOrDown;

        float distance;
        float lastDistance = -100;

        foreach (Transform enemy in enemiesClose)
        {
            if (actualTarget == enemy)
            {
                continue;
            }
            //calculamos el vector hacia donde esta el enemigo desde la posicion de Saru
            distance = (transform.position - enemy.position).magnitude * upOrDown;

            if ((distance < _thresholdEnemy) && (distance > lastDistance))
            {
                NextTarget(distance, enemy);
                lastDistance = distance;
                _actualTimeTargetEnemyWithDirection = _timeToTargetNewEnemy;
            }
        }
        if (actualTarget != _enemyTarget)
        {
            _actualTimeTargetEnemyWithDirection = _timeToTargetNewEnemy;
            target.transform.localScale         = new Vector3(.2f, .2f, .2f);
        }
    }
Пример #4
0
 public override Quaternion RotationTransform(EnemyPosition position, float deltaTime)
 {
     var playerPosition = GameObject.Find("player").transform;
     var vectorToTarget = playerPosition.position - position.Center;
     var angle = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg;
     var q = Quaternion.AngleAxis(angle, Vector3.forward);
     return Quaternion.Slerp(position.Rotation, q, Time.deltaTime);
 }
Пример #5
0
 void Start()
 {
     animator        = GetComponent <Animator> ();
     player          = GameObject.FindGameObjectWithTag("Player");
     playerHealth    = player.GetComponent <PlayerHealth> ();
     position        = GetComponent <EnemyPosition>();
     canAttackPlayer = true;
 }
 protected virtual void BeginAttack()
 {
     enemyPosition     = GetComponentInParent <EnemyPosition>();
     enemyMove         = GetComponentInParent <EnemyMove>();
     attackBoxVector   = enemyPosition.GetEnemyPosition();
     directionModifier = 1;
     this.gameObject.SetActive(false);
 }
Пример #7
0
    public override Quaternion RotationTransform(EnemyPosition position, float deltaTime)
    {
        var playerPosition = GameObject.Find("player").transform;
        var vectorToTarget = playerPosition.position - position.Center;
        var angle          = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg;
        var q = Quaternion.AngleAxis(angle, Vector3.forward);

        return(Quaternion.Slerp(position.Rotation, q, Time.deltaTime));
    }
Пример #8
0
 protected override void OnAwake()
 {
     _health                   = 30f + UnityEngine.Random.value * 20f;
     _movePosition             = GetComponent <EnemyPosition>();
     _baseSpeed                = _movePosition.speed;
     animation["gothit"].layer = 20;
     animation["die"].layer    = 20;
     animation["attack"].layer = 10;
     _hipPosition              = hips.localPosition;
     _emitter                  = GetComponentInChildren <ParticleEmitter>();
     _emitter.emit             = false;
 }
Пример #9
0
	protected override void OnAwake()
	{
		_health = 30f + UnityEngine.Random.value * 20f;
		_movePosition = GetComponent<EnemyPosition>();
		_baseSpeed = _movePosition.speed;
		animation["gothit"].layer = 20;
		animation["die"].layer = 20;
		animation["attack"].layer = 10;
		_hipPosition = hips.localPosition;
		_emitter = GetComponentInChildren<ParticleEmitter>();
		_emitter.emit = false;
	}
Пример #10
0
 public override Vector3 PositionTransform(EnemyPosition position, float deltaTime)
 {
     Vector3 perpendicular = new Vector3(up.y, -up.x, 0);
     Vector3 x = up * deltaTime;
     Vector3 t = x + (perpendicular * Time.deltaTime * ZigZagLength * Direction);
     TimeSinceLastChange += deltaTime;
     if (TimeSinceLastChange >= SecondsToSwitch)
     {
         TimeSinceLastChange = 0;
         Direction = -Direction;
     }
     return t;
 }
Пример #11
0
    public override Vector3 PositionTransform(EnemyPosition position, float deltaTime)
    {
        Vector3 perpendicular = new Vector3(up.y, -up.x, 0);
        Vector3 x             = up * deltaTime;
        Vector3 t             = x + (perpendicular * Time.deltaTime * ZigZagLength * Direction);

        TimeSinceLastChange += deltaTime;
        if (TimeSinceLastChange >= SecondsToSwitch)
        {
            TimeSinceLastChange = 0;
            Direction           = -Direction;
        }
        return(t);
    }
Пример #12
0
 public void TelekinesiaAttack(GameObject target)
 {
     if (playerHealth.canCastSpell(telekinesiaCost) && target != null)
     {
         playerHealth.castSpell(telekinesiaCost);
         switchTarget(target);
         transform.forward = -target.transform.position;
         animator.SetTrigger("DirectSpell");
         Object        spell         = Instantiate(telekinesia, target.transform.position, target.transform.rotation);
         EnemyPosition enemyPosition = target.GetComponent <EnemyPosition>();
         enemyPosition.Rotate();
         Destroy(spell, 1f);
     }
 }
Пример #13
0
    public void alertOthers()
    {
        Collider[] hitColliders = Physics.OverlapSphere(gameObject.transform.position, 5f);
        int        i            = 0;

        while (i < hitColliders.Length)
        {
            if (hitColliders[i].tag == "Enemy" &&
                Vector3.Distance(gameObject.transform.position, hitColliders[i].transform.position) < 1.7f &&
                hitColliders[i].GetType() == typeof(BoxCollider))
            {
                EnemyPosition enemyPosition = hitColliders[i].GetComponent <EnemyPosition>();
                enemyPosition.Rotate();
            }
            i++;
        }
    }
Пример #14
0
 public void Update(GameObject obj, float deltaTime)
 {
     if (IsOutOfView(obj.transform.position))
     {
         GameObject.DestroyImmediate(obj);
         Spawner.EnemyDied();     // TODO move enemy count into some controlled global state
         if (!HealthBar.IsDead()) // TODO health does not make sense to be on a healthbar but instead a player a part of the global state
         {
             GameStats.points++;
         }
     }
     else
     {
         var position = EnemyPosition.FromTransform(obj.transform);
         obj.transform.position += EnemyMovement.PositionTransform(position, deltaTime) * EnemyMovement.speed * GetSpeedMultiplier();
         obj.transform.rotation  = EnemyMovement.RotationTransform(position, deltaTime);
     }
 }
Пример #15
0
    public override void setPosition(EnemyPosition pos)
    {
        base.setPosition(pos);
        switch (pos)
        {
        case EnemyPosition.LEFT_2:
        case EnemyPosition.LEFT_3:
            HPtrans.anchoredPosition = new Vector3(-268f, HPtrans.anchoredPosition.y, -14f);
            break;

        case EnemyPosition.RIGHT_2:
        case EnemyPosition.RIGHT_3:
            HPtrans.anchoredPosition = new Vector3(267f, HPtrans.anchoredPosition.y, -14f);
            break;

        default: break;
        }
    }
Пример #16
0
    public void Init()
    {
        Player = GameObject.FindWithTag("Player").GetComponent <Player>();


        ConfirmButton      = GameObject.Find("ConfirmButton").GetComponent <Button>();
        _confirmEvent      = ConfirmButton.transform.GetComponent <ConfirmButtonEventManager>();
        _confirmButtonText = ConfirmButton.GetComponentsInChildren <Image>()[1];
        //_confirmCore = ConfirmButton.transform.parent.transform.Find("Core").GetComponent<Image>();
        ConfirmButton.onClick.AddListener(ConfirmEngines);
        ConfirmButton.gameObject.SetActive(false);
        _commenceAnim           = ConfirmButton.transform.parent.GetComponent <Animator>();
        _confirmButtonSprite[0] = Resources.Load <Sprite>("Sprites/Core/Gear");
        _confirmButtonSprite[1] = Resources.Load <Sprite>("Sprites/Core/Gear2");

        playerHealthBar = GameObject.Find("PlayerHealth").GetComponent <HealthBar>();
        enemyHealthBar  = GameObject.Find("EnemyHealth").GetComponent <HealthBar>();

        //_playerText = GameObject.Find("PlayerText").GetComponent<UIPopIn>();
        //_enemyText = GameObject.Find("EnemyText").GetComponent<UIPopIn>();
        //_resultText = GameObject.Find("ResultText").GetComponent<UIPopIn>();
        //_clashText = GameObject.Find("ClashText").GetComponent<UIPopIn>();
        //BattleState = BattleStates.MakingEngines;

        _playerAttack = null;

        Engines    = new Engine[3];
        Engines[0] = GameObject.Find("Engine1").GetComponent <Engine>();
        Engines[1] = GameObject.Find("Engine2").GetComponent <Engine>();
        Engines[2] = GameObject.Find("Engine3").GetComponent <Engine>();

        //GameManager.Instance.StartBattle();

        //get move UI
        _mainCanvas = GameObject.Find("MainCanvas").transform;
        Transform posPanel = _mainCanvas.Find("PositionsPanel");
        //get move set
        Transform moveSet = posPanel.transform.Find("MoveButton");

        _moveUI     = moveSet.GetComponent <MovePlayerDialog>();
        _moveUIAura = _moveUI.transform.parent.transform.Find("PlayerPos").GetComponentInChildren <Animator>();
        //get enemyPos
        enemyPos = posPanel.transform.Find("EnemyPos").GetComponent <EnemyPosition>();
    }
	/// <summary>
	/// Scans to find enemies and alliew within sight range, all enemies found are then added to the list and then any allies found are also scanned from
	/// </summary>
	/// <returns>The found enemies</returns>
	/// <param name="_actor">the actor scanning</param>
	private List<EnemyPosition> EnemyScan (AIActor _actor, List<EnemyPosition> _enemies, List<ActorBase> _allies)
	{
		List<EnemyPosition> enemyData = new List<EnemyPosition> ();

		//search all trocts within sight range of the actor.
		for (int i = 0; i < topology.Count; i++)
		{
			//if within range and not inFow & in the active list
			if (Vector3.Distance (_actor.gameObject.transform.position, topology [i].gameObject.transform.position) < _actor.viewDistance && !topology [i].GetComponent<TruncOct> ().inFow &&
				topology [i].GetComponent<TruncOct> ().containedActor != null)
			{
				ActorBase actorFound = topology [i].GetComponent<TruncOct> ().containedActor.GetComponent<ActorBase> ();

				//Test if the actor is on this team
				if (topology [i].GetComponent<TruncOct> ().containedActor.GetComponent<ActorBase> ().Team == _actor.Team)
				{
					//if so they are added to the allies list after seeing whether they have already been scanned
					if (!_allies.Contains (actorFound))
					{
						_allies.Add (actorFound);

						//scan the actorfound in this case
						_enemies.AddRange(EnemyScan(actorFound.gameObject.GetComponent<AIActor>(), _enemies, _allies));
					}
				}
				else
				{
					EnemyPosition enemy = new EnemyPosition ();

					enemy.enemy = actorFound;
					enemy.enemyLocation = actorFound.currentTrOct.GetComponent<TruncOct>();

					//if the found enemy is not currently in the list, add it in
					if (!_enemies.Contains(enemy))
					{
						_enemies.Add (enemy);
					}
				}
			}
		}
			
		return _enemies;
	}
Пример #18
0
    public virtual void setPosition(EnemyPosition pos)
    {
        float spriteX = 0f, spriteY = 95f, spriteZ = -9f;
        float UIx = 0, UIy = 165f, UIz = -14f;

        switch (pos)
        {
        case EnemyPosition.CENTER_1:
            /* Do nothing */
            break;

        case EnemyPosition.LEFT_2:
            spriteX = -48f;
            UIx     = -240f;
            break;

        case EnemyPosition.RIGHT_2:
            spriteX = 48f;
            UIx     = 240f;
            break;

        case EnemyPosition.LEFT_3:
            spriteX = -72f;
            UIx     = -300f;
            break;

        case EnemyPosition.CENTER_3:
            UIy = 785f;
            break;

        case EnemyPosition.RIGHT_3:
            spriteX = 72f;
            UIx     = 300;
            break;

        default: break;
        }
        trans.position = new Vector3(spriteX, spriteY, spriteZ);
        skillRectTrans.anchoredPosition = new Vector3(spriteX * 5, 335f, UIz);
        HPtrans.anchoredPosition        = new Vector3(UIx, UIy, UIz);
    }
Пример #19
0
 public override Quaternion RotationTransform(EnemyPosition position, float deltaTime)
 {
     return(position.Rotation.Rotate(0, 0, RotationInDegrees));
 }
 public EnemyInformation_V2(GameObject enemy, EnemyPositionState state, EnemyPosition script)
 {
     this.position = enemy;
     this.state = state;
     this.positionScript = script;
 }
 void Begin()
 {
     newEnemyPositionX = 0;
     direction         = false;
     enemyPosition     = GetComponent <EnemyPosition>();
 }
Пример #22
0
 public override Vector3 PositionTransform(EnemyPosition position, float deltaTime)
 {
     return position.Right * deltaTime;
 }
Пример #23
0
 public virtual Vector3 PositionTransform(EnemyPosition position, float deltaTime)
 {
     return(Vector3.zero);
 }
Пример #24
0
 public virtual Quaternion RotationTransform(EnemyPosition position, float deltaTime)
 {
     return(position.Rotation);
 }
Пример #25
0
    public void MoveToTarget()
    {
        enemyPathList.Clear();
        for (int i = 0; i < enemyAI.playersList.Count; i++)
        {
            if (target == enemyAI.playersList[i])
            {
                reassign = false;
                break;
            }
            else
            {
                reassign = true;
            }
        }

        if(reassign == true)
        {
            target = enemyAI.playersList[Random.Range(0, enemyAI.playersList.Count)];
        }
        CharacterMove targetMovement = GameObject.Find(target.name).GetComponent<CharacterMove>();
        moveCounter = charStat.GetMovementRange();
        movePathCounter = 0;
        targetFound = false;
        int nextRow = curRow;
        int nextCol = curCol;

        while (performMovement == false)
        {
            if (enemyPathList.Count == 0)
            {
                EnemyPosition firstPos = new EnemyPosition();
                firstPos.row = curRow;
                firstPos.col = curCol;
                enemyPathList.Add(firstPos);
            }

            if (CheckIfPlayerCharacterNear(nextRow, nextCol) == true)
            {
                targetFound = true;
                performMovement = true;
            }
            else if (moveCounter <= 0)
            {
                performMovement = true;
            }
            else
            {
                if (targetMovement.GetCurCol() < nextCol)
                {
                    EnemyPosition ep = new EnemyPosition();
                    ep.row = nextRow;
                    ep.col = nextCol - 1;
                    nextCol -= 1;
                    enemyPathList.Add(ep);
                    moveCounter--;
                }
                else if (targetMovement.GetCurCol() > nextCol)
                {
                    EnemyPosition ep = new EnemyPosition();
                    ep.row = nextRow;
                    ep.col = nextCol + 1;
                    nextCol += 1;
                    enemyPathList.Add(ep);
                    moveCounter--;
                }
                else if(targetMovement.GetCurRow() < nextRow)
                {
                    EnemyPosition ep = new EnemyPosition();
                    ep.row = nextRow - 1;
                    ep.col = nextCol;
                    nextRow -= 1;
                    enemyPathList.Add(ep);
                    moveCounter--;
                }
                else if (targetMovement.GetCurRow() > nextRow)
                {
                    EnemyPosition ep = new EnemyPosition();
                    ep.row = nextRow + 1;
                    ep.col = nextCol;
                    nextRow += 1;
                    enemyPathList.Add(ep);
                    moveCounter--;
                }
            }
        }
    }
Пример #26
0
 public override Quaternion RotationTransform(EnemyPosition position, float deltaTime)
 {
     return position.Rotation.Rotate(0, 0, 10 * deltaTime);
 }
Пример #27
0
 public EnemyInformation(GameObject enemy, EnemyType type, EnemyPosition script)
 {
     this.position       = enemy;
     this.type           = type;
     this.positionScript = script;
 }
Пример #28
0
 public override Vector3 PositionTransform(EnemyPosition position, float deltaTime)
 {
     up = Quaternion.Euler(0, 0, .1F) * up;
     return(up * deltaTime);
 }
Пример #29
0
 public override Vector3 PositionTransform(EnemyPosition position, float deltaTime)
 {
     return(position.Up * deltaTime);
 }
Пример #30
0
 void Begin()
 {
     enemyStates   = GetComponent <EnemyStates>();
     enemyPosition = GetComponent <EnemyPosition>();
 }
Пример #31
0
 public override Vector3 PositionTransform(EnemyPosition position, float deltaTime)
 {
     up = Quaternion.Euler(0, 0, .1F) * up;
     return up * deltaTime;
 }