コード例 #1
0
    protected override void _OnTarget(Gunner target, Vector3 hitPos)
    {
        RaycastHit2D[] hits = Physics2D.CircleCastAll(m_trsf.position, m_splashRadius, Vector2.zero);

        foreach (RaycastHit2D hit in hits)
        {
            if (hit.collider.gameObject == gameObject)
            {
                continue;
            }

            if (hit.collider.tag == "SPACESHIP_NORMAL")
            {
                SpaceShipCtrl ctrl = hit.collider.gameObject.GetComponent <SpaceShipCtrl>();

                ctrl.Hit(m_splashDamage);

                PlayEffect(m_effect_explosion, ctrl.Position);
            }
            else if (hit.collider.tag == "SPACESHIP_DUMMY")
            {
                SpaceShipCtrl ctrl = hit.collider.gameObject.GetComponent <SpaceShipCtrl>();

                ctrl.Hit(m_splashDamage);

                PlayEffect(m_effect_explosion, ctrl.Position);
            }
        }

        base._OnTarget(target, hitPos);
    }
コード例 #2
0
    public SpaceShipData[] GetSourceSpaceShipDatas()
    {
        // TEMP
        //if (m_sourceSpaceShips.Count < (int)MobType.End)
        //{
        //    Debug.LogError("The sourc turrets is less than Turret.End");
        //    return null;
        //}

        SpaceShipData[] datas = new SpaceShipData[(int)MobType.End];

        for (int i = 0; i < (int)MobType.End; ++i)
        {
            string key = EnumToStr((MobType)i);

            GameObject source = null;

            if (false == m_sourceSpaceShips.TryGetValue(key, out source))
            {
                datas[i] = null;
                continue;
            }

            SpaceShipCtrl ctrl = source.GetComponent <SpaceShipCtrl>();

            datas[i] = ctrl.SpaceShipData;
        }

        return(datas);
    }
コード例 #3
0
    private Gunner FindMinHPTargetInList(GameObject[] spaceShipList, float refAngle, float fanAngle, Vector3 from, float minDist)
    {
        if (spaceShipList == null)
        {
            return(null);
        }

        float halfAngle = fanAngle * 0.5f;

        float  minHP      = float.MaxValue;
        Gunner targetCtrl = null;


        foreach (GameObject spcShip in spaceShipList)
        {
            SpaceShipCtrl ctrl = spcShip.GetComponent <SpaceShipCtrl>();

            if ((ctrl.Position - from).magnitude < minDist)
            {
                continue;
            }

            SpaceShip_GhostCtrl ghost = ctrl as SpaceShip_GhostCtrl;

            if (ghost != null)
            {
                if (ghost.Visible == false)
                {
                    continue;
                }
            }

            if (refAngle == 0)
            {
                if (0 <= ctrl.AngleFromPlanetUp && (halfAngle > ctrl.AngleFromPlanetUp || 360f - halfAngle < ctrl.AngleFromPlanetUp))
                {
                    if (ctrl.CurHP < minHP)
                    {
                        targetCtrl = ctrl;
                        minHP      = ctrl.CurHP;
                    }
                }
            }
            else
            {
                if (refAngle - halfAngle <= ctrl.AngleFromPlanetUp && refAngle + halfAngle > ctrl.AngleFromPlanetUp)
                {
                    if (ctrl.CurHP < minHP)
                    {
                        targetCtrl = ctrl;
                        minHP      = ctrl.CurHP;
                    }
                }
            }
        }

        return(targetCtrl);
    }
コード例 #4
0
    private Gunner FindBossTargetInList(GameObject[] spaceShipList, float refAngle, float fanAngle, Vector3 from, float minDist)
    {
        if (spaceShipList == null)
        {
            return(null);
        }

        float halfAngle = fanAngle * 0.5f;

        foreach (GameObject spcShip in spaceShipList)
        {
            SpaceShipCtrl ctrl = spcShip.GetComponent <SpaceShipCtrl>();

            if ((ctrl.Position - from).magnitude < minDist)
            {
                continue;
            }

            SpaceShip_GhostCtrl ghost = ctrl as SpaceShip_GhostCtrl;

            if (ghost != null)
            {
                if (ghost.Visible == false)
                {
                    continue;
                }
            }

            if (refAngle == 0)
            {
                if (0 <= ctrl.AngleFromPlanetUp && (halfAngle > ctrl.AngleFromPlanetUp || 360f - halfAngle < ctrl.AngleFromPlanetUp))
                {
                    if (ctrl.SpaceShipType == MobType.ZombieShip || ctrl.SpaceShipType == MobType.BattleShip || ctrl.SpaceShipType == MobType.GhostShip)
                    {
                        return(ctrl);
                    }
                }
            }
            else
            {
                if (refAngle - halfAngle <= ctrl.AngleFromPlanetUp && refAngle + halfAngle > ctrl.AngleFromPlanetUp)
                {
                    if (ctrl.SpaceShipType == MobType.ZombieShip || ctrl.SpaceShipType == MobType.BattleShip || ctrl.SpaceShipType == MobType.GhostShip)
                    {
                        return(ctrl);
                    }
                }
            }
        }

        return(null);
    }
コード例 #5
0
    private void CreateSpaceShip(GameObject source, Vector3 pos, Quaternion angle, Transform parentTrsf, int num, SpaceShipCtrl.STATE state = SpaceShipCtrl.STATE.FALLING)
    {
        GameObject    obj  = null;
        SpaceShipCtrl ctrl = null;

        obj = Instantiate(source, pos, angle, parentTrsf);
        obj.GetComponent <SpriteRenderer>().sortingOrder = num;
        ctrl = obj.GetComponent <SpaceShipCtrl>();
        ctrl.BulletPoolIdx = m_createdSpaceShipCnt;
        ctrl.Clone         = true;
        ctrl.FirstState    = state;

        m_createdSpaceShipCnt += 1;
    }
コード例 #6
0
    protected override void _OnTarget(Gunner target, Vector3 hitPos)
    {
        SpaceShipCtrl spaceShip = target as SpaceShipCtrl;

        if (spaceShip != null)
        {
            float rand = Random.Range(0, 1);

            if (rand <= m_probability)
            {
                target.StopFire(m_duration);
            }
        }

        base._OnTarget(target, hitPos);
    }
コード例 #7
0
    public void UpdateSpaceShipDatas()
    {
        GameObject[] dummyList = GameObject.FindGameObjectsWithTag("SPACESHIP_DUMMY");

        foreach (GameObject dummy in dummyList)
        {
            SpaceShipCtrl ctrl = dummy.GetComponent <SpaceShipCtrl>();

            ctrl.UpdateSpaceShipData();
        }

        GameObject[] normalList = GameObject.FindGameObjectsWithTag("SPACESHIP_NORMAL");

        foreach (GameObject normal in normalList)
        {
            SpaceShipCtrl ctrl = normal.GetComponent <SpaceShipCtrl>();

            ctrl.UpdateSpaceShipData();
        }
    }
コード例 #8
0
    protected override void _OnTarget(Gunner target, Vector3 hitPos)
    {
        SpaceShipCtrl _target = target as SpaceShipCtrl;

        if (_target != null)
        {
            if (_target.SpaceShipType == MobType.ZombieShip || _target.SpaceShipType == MobType.BattleShip || _target.SpaceShipType == MobType.GhostShip)
            {
                PlayEffect(m_effect_explosion, hitPos);
                target.Hit(m_damage * m_damageScaleToKing);
                gameObject.SetActive(false);
            }
            else
            {
                base._OnTarget(target, hitPos);
            }
        }
        else
        {
            base._OnTarget(target, hitPos);
        }
    }