private void Find(StateController p_controller) { Transform transform = p_controller.m_entity.transform; EntityRuntimeSet enemies = p_controller.m_enemyEntities; Look look = p_controller.m_look; if (!enemies) { return; } foreach (Entity enemy in enemies.m_items) { Transform enemyTransform = enemy.transform; float distance = Vector2.Distance(transform.position, enemyTransform.position); if (distance <= p_controller.m_look.m_lookRange) { Vector2 direction = enemyTransform.position - transform.position; float angle = Vector2.Angle(direction, transform.right); if (look.m_fieldOfView / 2 >= angle || distance <= look.m_lookSphereRadius) { RaycastHit2D hit = Physics2D.Raycast(transform.position, direction, distance + 1); if (hit.collider && hit.collider.gameObject == enemy.gameObject) { p_controller.m_target = enemy; return; } } } } }
private void OnTriggerEnter2D(Collider2D other) { EntityStats entityStats = other.GetComponent <EntityStats>(); if ((entityStats && EntityRuntimeSet.DetectArrayOverlap(projectileDamageSource.hostileTo, entityStats.myEntitySets)) || (other.gameObject.layer == levelLayer)) { //gameObject.SetActive(false); anim.Play("Impact", 0, 0); moving = false; col.enabled = false; } }
protected virtual void OnEnable() { if (myEntitySets != null) { for (int i = 0; i < myEntitySets.Count; i++) { myEntitySets[i].Add(this); } } //backup original sets to recover after changes originalMySets = EntityRuntimeSet.CopySetArray(myEntitySets); originalEnemySets = EntityRuntimeSet.CopySetArray(enemyEntitySets); }
private void OnTriggerEnter2D(Collider2D other) { EntityStats entityStats = other.GetComponent <EntityStats>(); if (entityStats && EntityRuntimeSet.DetectArrayOverlap(projectileDamageSource.hostileTo, entityStats.myEntitySets)) { gameObject.SetActive(false); } else if (!entityStats) { gameObject.SetActive(false); } }
private void OnTriggerEnter2D(Collider2D other) { EntityStats entityStats = other.GetComponent <EntityStats>(); if ((entityStats && EntityRuntimeSet.DetectArrayOverlap(projectileDamageSource.hostileTo, entityStats.myEntitySets))) { //gameObject.SetActive(false); enemiesAlreadyHit.Add(entityStats.gameObject.GetInstanceID()); anim.Play("Impact", 0, 0); //moving = false; //col.enabled = false; } }
public static bool SetArrayContainSet(List <EntityRuntimeSet> targetArray, EntityRuntimeSet targetSet) { if (targetArray == null) { return(false); } for (int i = 0; i < targetArray.Count; i++) { if (targetArray[i] == targetSet) { return(true); } } return(false); }
private void OnTriggerEnter2D(Collider2D other) { EntityStats entityStats = other.GetComponent <EntityStats>(); if ((entityStats && EntityRuntimeSet.DetectArrayOverlap(projectileDamageSource.hostileTo, entityStats.myEntitySets))) { //gameObject.SetActive(false); victim = entityStats; tickTimer = latchedTickRate; offsetFromVictim = transform.position - victim.transform.position; anim.Play("Locked", 0, 0); moving = false; col.enabled = false; } else if (other.gameObject.layer == levelLayer) { gameObject.SetActive(false); moving = false; col.enabled = false; } }
public bool canOtherEnemiesAttackMinion = true; //se por algum motivo os demais inimigos tenham que ignorar o afetado public override void InitState(EntityStats receiver, EntityStats applier = null) { if (applier == null) { return; //no minion master } StateStack ss = receiver.GetStack(this); if (ss == null) { ss = new StateStack(this, duration, 1, 1, applier); receiver.states.Add(ss); //decide enemies if (canAttackMaster) { EntityRuntimeSet.CopySetArray(applier.enemyEntitySets, ref receiver.enemyEntitySets, false); } else { EntityRuntimeSet.CopySetArray(applier.enemyEntitySets, ref receiver.enemyEntitySets); } //deciding possible damage if (canOtherEnemiesAttackMinion) { EntityRuntimeSet.CopySetArray(applier.myEntitySets, ref receiver.myEntitySets, false); } if (!masterCanDamageMinion) { EntityRuntimeSet.RemoveSetOverlap(applier.enemyEntitySets, ref receiver.myEntitySets); } } else { ss.ResetTimer(); } }
private void OnTriggerEnter2D(Collider2D other) { EntityStats entityStats = other.GetComponent <EntityStats>(); if (entityStats && EntityRuntimeSet.DetectArrayOverlap(hostileTo, entityStats.myEntitySets) && entityStats != owner) { OnHitEntity?.Invoke(); if (onHitShake) { //Debug.Log("Shaking"); Shaker.ShakeAll(onHitShake); } if (onHitSound) { EazySoundManager.PlaySound(onHitSound, 0.13f); } ApplyDamage(entityStats); if (owner != null) { owner.ChangeMana(manaReplenishAmount); } } }
public override void ConcludeState(EntityStats receiver) { EntityRuntimeSet.CopySetArray(receiver.originalEnemySets, ref receiver.enemyEntitySets); EntityRuntimeSet.CopySetArray(receiver.originalMySets, ref receiver.myEntitySets); }