コード例 #1
0
    public override void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.GetComponent <Enemy.Enemy>() != null)
        {
            //If Collided with Enemy Unit
            //Reduce Enemy HP (currently no function for that)
            Enemy.Enemy enemy = other.gameObject.GetComponent <Enemy.Enemy>();

            if (prevTarget && enemy != prevTarget)
            {
                enemy.Injure(Damage);
                prevTarget = enemy;
            }
            else
            {
                prevTarget = enemy;
            }
        }
        else if (other.gameObject.GetComponent <RPGPlayer>() != null)
        {
            // Collision handled by player
        }
        else if (other.gameObject.GetComponent <Projectile>() != null)
        {
            // Do not allow collisions with self
            return;
        }
        else
        {
            Disable();
        }
    }
コード例 #2
0
    void UpdateTarget()
    {
        GameObject[] enemies          = GameObject.FindGameObjectsWithTag(enemyTag);
        float        shortestDistance = Mathf.Infinity;
        GameObject   nearestEnemy     = null;

        foreach (GameObject enemy in enemies)
        {
            float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position);
            if (distanceToEnemy < shortestDistance)
            {
                shortestDistance = distanceToEnemy;
                nearestEnemy     = enemy;
            }
        }

        if (nearestEnemy != null && shortestDistance <= range)
        {
            target       = nearestEnemy.transform;
            _targetEnemy = target.GetComponent <Enemy.Enemy>();
        }
        else
        {
            target = null;
        }
    }
コード例 #3
0
ファイル: FlyingSword.cs プロジェクト: Pycorax/SP4Unity
    public override void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.GetComponent<Enemy.Enemy>() != null)
        {
            //If Collided with Enemy Unit
            //Reduce Enemy HP (currently no function for that)
            Enemy.Enemy enemy = other.gameObject.GetComponent<Enemy.Enemy>();

            if (prevTarget && enemy != prevTarget)
            {
                enemy.Injure(Damage);
                prevTarget = enemy;
            }
            else
            {
                prevTarget = enemy;
            }
        }
        else if (other.gameObject.GetComponent<RPGPlayer>() != null)
        {
            // Collision handled by player
        }
        else if (other.gameObject.GetComponent<Projectile>() != null)
        {
            // Do not allow collisions with self
            return;
        }
        else
        {
            Disable();
        }
    }
コード例 #4
0
 private void Damage(Transform enemy)
 {
     Enemy.Enemy e = enemy.GetComponent <Enemy.Enemy>();
     if (e != null)
     {
         e.TakeDamage(damage);
     }
 }
コード例 #5
0
 public virtual void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.gameObject.GetComponent <Enemy.Enemy>() != null)
     {
         //If Collided with Enemy Unit
         //Reduce Enemy HP (currently no function for that)
         Enemy.Enemy enemy = collision.gameObject.GetComponent <Enemy.Enemy>();
         enemy.Injure(Damage);
     }
 }
コード例 #6
0
 private void setCommonData(GameObject go)
 {
     Enemy.Enemy e = go.GetComponent <Enemy.Enemy>();
     if (e)
     {
         e.Manager     = this;
         e.WaypointMap = WaypointMap;
         e.PlayerList.Add(RefPlayer1.gameObject);
         e.PlayerList.Add(RefPlayer2.gameObject);
         e.transform.localScale = RefPlayer1.transform.localScale;
     }
 }
コード例 #7
0
ファイル: Lightning.cs プロジェクト: Pycorax/SP4Unity
    private Enemy.Enemy findNearestEnemy()
    {
        if (bounceCount >= MaxBounce)
        {
            return(null);
        }
        ++bounceCount;
        // TODO: Find new target
        float nearestDist = 0.0f;

        Enemy.Enemy nearestEnemy = null;
        float       range        = DetectionRadius * RefTileMap.TileSize;

        // Temp disable previous target collider so that raycast works
        prevTarget.GetComponent <BoxCollider2D>().enabled = false;

        foreach (GameObject go in RefEnemyManager.ActiveResourcesList)
        {
            Enemy.Enemy e = go.GetComponent <Enemy.Enemy>();
            // Cannot assign to the current enemy you're on and have to be within range specified
            if (go != prevTarget.gameObject /*(e.transform.position - transform.position).sqrMagnitude <= rangeSqr*/)
            {
                LayerMask    mask    = 1 << 12;
                RaycastHit2D raycast = Physics2D.Raycast(transform.position, (go.transform.position - transform.position).normalized, range, mask.value);
                if (raycast)
                {
                    // Within range and not on current collided enemy
                    if (nearestEnemy)
                    {
                        // Nearest exists, check distance
                        if (raycast.distance < nearestDist)
                        {
                            nearestDist  = raycast.distance;
                            nearestEnemy = raycast.collider.gameObject.GetComponent <Enemy.Enemy>();
                        }
                    }
                    else
                    {
                        // Nearest does not exists, direct assign
                        nearestDist  = raycast.distance;
                        nearestEnemy = raycast.collider.gameObject.GetComponent <Enemy.Enemy>();
                    }
                }
            }
        }
        // Enable previous target collider so that everything is back to normal
        prevTarget.GetComponent <BoxCollider2D>().enabled = true;

        return(nearestEnemy);
    }
コード例 #8
0
ファイル: Lightning.cs プロジェクト: Pycorax/SP4Unity
    // Update is called once per frame
    protected override void Update()
    {
        if (target)
        {
            // Move towards target
            transform.position = Vector3.MoveTowards(transform.position, target.transform.position, Speed * (float)TimeManager.GetDeltaTime(TimeManager.TimeType.Game));

            if (transform.position == target.transform.position)
            {
                // Projectile on target
                //Reduce Enemy HP (currently no function for that)

                // Find new target
                if (prevTarget && target != prevTarget)
                {
                    target.Injure(Damage);
                    prevTarget = target;
                    target     = findNearestEnemy();
                    if (!target)
                    {
                        // No new target found
                        Disable();
                    }
                }
                else if (!prevTarget)
                {
                    target.Injure(Damage);
                    prevTarget = target;
                    // No previous target
                    target = findNearestEnemy();
                    if (!target)
                    {
                        // No new target found
                        Disable();
                    }
                }
            }
        }
        else
        {
            base.Update();
        }
    }
コード例 #9
0
ファイル: Projectile.cs プロジェクト: Pycorax/SP4Unity
 /*
  * FUNCTION: OnCollisionEnter2D
  * params: Collision2D collision
  *
  * brief: Perform Collision functions
  */
 public virtual void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.gameObject.GetComponent <Enemy.Enemy>() != null)
     {
         //If Collided with Enemy Unit
         //Reduce Enemy HP (currently no function for that)
         Enemy.Enemy enemy = collision.gameObject.GetComponent <Enemy.Enemy>();
         enemy.Injure(Damage);
         Disable();
     }
     else if (collision.gameObject.GetComponent <RPGPlayer>() != null)
     {
         // Collision handled by player
     }
     else if (collision.gameObject.GetComponent <Projectile>() != null)
     {
         // Do not allow collisions with self
         return;
     }
     else
     {
         Disable();
     }
 }
コード例 #10
0
ファイル: Lightning.cs プロジェクト: Pycorax/SP4Unity
 public override void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.gameObject.GetComponent<Enemy.Enemy>() != null)
     {
         Enemy.Enemy enemy = collision.gameObject.GetComponent<Enemy.Enemy>();
         if (!target)
         {
             target = enemy;
             GetComponent<Rigidbody2D>().velocity = Vector2.zero;
         }
     }
     else if (collision.gameObject.GetComponent<RPGPlayer>() != null)
     {
         // Collision handled by player
     }
     else if (collision.gameObject.GetComponent<Projectile>() != null)
     {
         // Do not do collision against same type
     }
     else
     {
         Disable();
     }
 }
コード例 #11
0
ファイル: Lightning.cs プロジェクト: Pycorax/SP4Unity
 public override void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.gameObject.GetComponent <Enemy.Enemy>() != null)
     {
         Enemy.Enemy enemy = collision.gameObject.GetComponent <Enemy.Enemy>();
         if (!target)
         {
             target = enemy;
             GetComponent <Rigidbody2D>().velocity = Vector2.zero;
         }
     }
     else if (collision.gameObject.GetComponent <RPGPlayer>() != null)
     {
         // Collision handled by player
     }
     else if (collision.gameObject.GetComponent <Projectile>() != null)
     {
         // Do not do collision against same type
     }
     else
     {
         Disable();
     }
 }
コード例 #12
0
ファイル: Lightning.cs プロジェクト: Pycorax/SP4Unity
 public override void Disable()
 {
     base.Disable();
     bounceCount = 0;
     target = prevTarget = null;
 }
コード例 #13
0
ファイル: Lightning.cs プロジェクト: Pycorax/SP4Unity
    // Update is called once per frame
    protected override void Update()
    {
        if (target)
        {
            // Move towards target
            transform.position = Vector3.MoveTowards(transform.position, target.transform.position, Speed * (float)TimeManager.GetDeltaTime(TimeManager.TimeType.Game));

            if (transform.position == target.transform.position)
            {
                // Projectile on target
                //Reduce Enemy HP (currently no function for that)

                // Find new target
                if (prevTarget && target != prevTarget)
                {
                    target.Injure(Damage);
                    prevTarget = target;
                    target = findNearestEnemy();
                    if (!target)
                    {
                        // No new target found
                        Disable();
                    }
                }
                else if (!prevTarget)
                {
                    target.Injure(Damage);
                    prevTarget = target;
                    // No previous target
                    target = findNearestEnemy();
                    if (!target)
                    {
                        // No new target found
                        Disable();
                    }
                }
            }
        }
        else
        {
            base.Update();
        }
    }
コード例 #14
0
 public override void Disable()
 {
     prevTarget = null;
     Owner.gameObject.SetActive(true);
     base.Disable();
 }
コード例 #15
0
ファイル: Lightning.cs プロジェクト: Pycorax/SP4Unity
 public override void Disable()
 {
     base.Disable();
     bounceCount = 0;
     target      = prevTarget = null;
 }
コード例 #16
0
 private void Awake()
 {
     me = GetComponent <Enemy.Enemy>();
 }
コード例 #17
0
ファイル: FlyingSword.cs プロジェクト: Pycorax/SP4Unity
 public override void Disable()
 {
     prevTarget = null;
     Owner.gameObject.SetActive(true);
     base.Disable();
 }