Exemplo n.º 1
0
    // 检查周围可以吸附的道具
    private void Check()
    {
        Collider[] colliders = Physics.OverlapSphere(transform.position, 50);
        if (colliders.Length == 0)
        {
            return;
        }
        for (int i = 0; i < colliders.Length; ++i)
        {
            if (colliders[i].transform.parent == null)
            {
                continue;
            }
            PropBehaviour pb = colliders[i].transform.parent.GetComponent <PropBehaviour>();
            if (pb == null)
            {
                continue;
            }
            if (IsEnemy(pb))
            {
                continue;
            }

            pb.SetMoveToTargetTransform(transform);
        }
    }
Exemplo n.º 2
0
        public void AddDefaultSmartTerrainEventHandler(GameObject go, PropBehaviour prop,
                                                       SurfaceBehaviour primarySurface)
        {
            var handler = go.AddComponent <DefaultSmartTerrainEventHandler>();

            handler.PropTemplate    = prop.GetComponent <PropBehaviour>();
            handler.SurfaceTemplate = primarySurface.GetComponent <SurfaceBehaviour>();
        }
Exemplo n.º 3
0
    void OnTriggerEnter(Collider other)
    {
        // Mini怪物发射的
        if (Owner == GameTag.Enemy)
        {
            return;
        }

        if (Owner == GameTag.Boss)
        {
            return;
        }

        // 武器打到道具
        if (other.tag.Equals(GameTag.Props) && type != WeaponType.Stone)
        {
            PropBehaviour pb = other.transform.parent.GetComponent <PropBehaviour>();
            if (pb == null)
            {
                pb = other.transform.parent.parent.GetComponent <PropBehaviour>();
            }
            if (
                //pb.Type == PropType.Bat ||
                //pb.Type == PropType.FeiQi ||
                pb.Type == PropType.Mine)
            {
                Trigger();
                if (Owner == GameTag.Player)
                {
                    pb.Trigger(true);
                }
                WeaponManager.Instance.AddDespawnWeapon(this);
                pb.PlayDestroyEffect();
                PropsManager.Instance.AddDespawnNormal(pb);
                return;
            }
        }

        // 打到武器道具
        if (other.tag.Equals(GameTag.Weapon))
        {
            WeaponBehaviour wb = other.gameObject.GetComponent <WeaponBehaviour>();
            if (wb.Assaultable)
            {
                Trigger();
                WeaponManager.Instance.AddDespawnWeapon(this);
                WeaponManager.Instance.AddDespawnWeapon(wb);
            }
        }

        if (other.tag.Equals(GameTag.Bug))
        {
            Trigger();
            BugAttack ba = other.GetComponent <BugAttack>();
            ba.OnHurt(damageValue);
        }
    }
Exemplo n.º 4
0
 private void Awake()
 {
     footCollider  = GetComponent <BoxCollider2D>();
     controller    = GetComponent <PlayerController>();
     ri            = GetComponent <Rigidbody2D>();
     sightChecker  = GetComponentInChildren <SightChecker>();
     ani           = playerRenderer.GetComponent <Animator>();
     propBehaviour = GetComponent <PropBehaviour>();
 }
Exemplo n.º 5
0
 // 道具是否可以被吸附
 private bool IsEnemy(PropBehaviour pb)
 {
     switch (pb.Type)
     {
     case PropType.Coin:
     case PropType.Diamond:
     case PropType.Fuel:
     case PropType.Magnet:
     case PropType.Shield:
     case PropType.Engine:
     case PropType.Missile:
     case PropType.Fix:
         return(false);
     }
     return(true);
 }
Exemplo n.º 6
0
    /// <summary>
    /// 在指定位置生成指定类型道具
    /// </summary>
    /// <param name="type"></param>
    /// <param name="pos"></param>
    /// <param name="percent"></param>
    public void SpawnPropInPos(PropType type, Vector3 pos, float percent)
    {
        PropBehaviour pb = null;

        if (type == PropType.Coin)
        {
            GameObject obj = ioo.poolManager.Spawn(CoinPo.Name);
            pb      = obj.GetOrAddComponent <PropBehaviour>();
            pb.Type = PropType.Coin;
            pb.transform.position = pos;
            pb.LocalPercent       = percent;
            pb.Score          = CoinPo.Score;
            pb.Assaultable    = false;
            pb.BornVolumeName = CoinPo.BornVolumeName;
            pb.DieVolumeName  = CoinPo.DieVolumeName;
            pb.DamageValue    = CoinPo.Damage;
            pb.DamagePlane    = CoinPo.DamagePlane;
            pb.BornEffect     = CoinPo.BornEffect;
            pb.DieEffect      = CoinPo.DieEffect;
            pb.Owner          = string.Empty;
        }

        if (type == PropType.Diamond)
        {
            GameObject obj = ioo.poolManager.Spawn(DiamondPo.Name);
            pb      = obj.GetOrAddComponent <PropBehaviour>();
            pb.Type = PropType.Diamond;
            pb.transform.position = pos;
            pb.LocalPercent       = percent;
            pb.Score          = DiamondPo.Score;
            pb.Assaultable    = false;
            pb.BornVolumeName = DiamondPo.BornVolumeName;
            pb.DieVolumeName  = DiamondPo.DieVolumeName;
            pb.DamageValue    = DiamondPo.Damage;
            pb.DamagePlane    = DiamondPo.DamagePlane;
            pb.BornEffect     = DiamondPo.BornEffect;
            pb.DieEffect      = DiamondPo.DieEffect;
            pb.Owner          = string.Empty;
        }

        PropList.Add(pb);
    }
Exemplo n.º 7
0
    public void Update()
    {
        if (!CanUpdate)
        {
            return;
        }
        #region  路径下发道具
        float percent    = ioo.gameMode.GetPilotPrecent;
        int   frameCount = Mathf.FloorToInt(1 / Time.deltaTime);

        if (PosInfoList.Count > 0)
        {
            int updateCount = PosInfoList.Count * 5 / frameCount;
            for (int i = 0; i < updateCount; ++i)
            {
                if (_curIndex >= PosInfoList.Count)
                {
                    _curIndex = 0;
                    ResetPropInfo();
                }

                _updateInfo = PosInfoList[_curIndex];
                if (_updateInfo.LocatePercent <= percent + VisablePercent && _updateInfo.LocatePercent > percent)
                {
                    if (!_updateInfo.used)
                    {
                        if (ioo.gameMode.Boss != null && (
                                //_updateInfo.type == PropType.Engine   ||
                                //_updateInfo.type == PropType.Wall     ||
                                //_updateInfo.type == PropType.Shield   ||
                                //_updateInfo.type == PropType.Mine
                                _updateInfo.type == PropType.Coin ||
                                _updateInfo.type == PropType.Mine ||
                                _updateInfo.type == PropType.Engine
                                ))
                        {
                            _prop            = null;
                            _updateInfo.used = true;
                            GameObject obj = ioo.poolManager.Spawn(CoinPo.Name);
                            _prop = obj.GetOrAddComponent <PropBehaviour>();
                            //_prop.Type                  = (PropType)CoinPo.Type;
                            _prop.Type = _updateInfo.type;
                            _prop.transform.position = _updateInfo.pos;
                            //_prop.LocalPercent          = _updateInfo.LocatePercent;
                            _prop.LocalPercent   = _updateInfo.LocatePercent - 0.2f;
                            _prop.Score          = CoinPo.Score;
                            _prop.Assaultable    = CoinPo.IsEnermy == 1 ? true : false;
                            _prop.BornVolumeName = CoinPo.BornVolumeName;
                            _prop.DieVolumeName  = CoinPo.DieVolumeName;
                            _prop.DamageValue    = CoinPo.Damage;
                            _prop.DamagePlane    = CoinPo.DamagePlane;
                            _prop.BornEffect     = CoinPo.BornEffect;
                            _prop.DieEffect      = CoinPo.DieEffect;
                            _prop.Owner          = string.Empty;
                        }
                        else
                        {
                            _prop            = null;
                            _updateInfo.used = true;
                            GameObject obj = ioo.poolManager.Spawn(_updateInfo.name);
                            _prop      = obj.GetOrAddComponent <PropBehaviour>();
                            _prop.Type = _updateInfo.type;
                            _prop.transform.position = _updateInfo.pos;
                            _prop.LocalPercent       = _updateInfo.LocatePercent;
                            _prop.Score          = _updateInfo.score;
                            _prop.Assaultable    = _updateInfo.Assaultable;
                            _prop.BornVolumeName = _updateInfo.BornVolumeName;
                            _prop.DieVolumeName  = _updateInfo.DieVolumeName;
                            _prop.DamageValue    = _updateInfo.DamageValue;
                            _prop.DamagePlane    = _updateInfo.DamagePlane;
                            _prop.BornEffect     = _updateInfo.BornEffect;
                            _prop.DieEffect      = _updateInfo.DieEffect;
                            _prop.Owner          = string.Empty;
                        }

                        Vector3 rightPos = PathManager.Instance.PathInfo1.GetRightPos(_updateInfo.LocatePercent);
                        Vector2 upPos    = PathManager.Instance.PathInfo1.GetUpPos(_updateInfo.LocatePercent);

                        _prop.Spawn(rightPos, upPos, Count);
                        if (!_updateInfo.isMidle)
                        {
                            if (_updateInfo.isLeft)
                            {
                                _prop.LocateLeft();
                            }
                            else
                            {
                                _prop.LocateRight();
                            }
                        }

                        _prop.transform.LookAt(_updateInfo.nexPos);

                        PropList.Add(_prop);
                        ++Count;
                        Count %= 5;
                    }
                }
                else
                {
                    break;
                }
                _curIndex++;
                if (_curIndex >= PosInfoList.Count)
                {
                    _curIndex = 0;
                    ResetPropInfo();
                }
            }
        }

        for (int i = 0; i < PropList.Count; ++i)
        {
            if (PropList[i].LocalPercent < percent - 0.002f)
            {
                DespawnPropList.Add(PropList[i]);
            }
        }

        for (int i = 0; i < DespawnPropList.Count; ++i)
        {
            PropBehaviour pb = DespawnPropList[i];
            PropList.Remove(pb);
            pb.DeSpawn();
        }

        DespawnPropList.Clear();

        #endregion
    }
Exemplo n.º 8
0
 // 销毁普通道具
 public void AddDespawnNormal(PropBehaviour pb)
 {
     DespawnPropList.Add(pb);
 }
 public void AddDefaultSmartTerrainEventHandler(GameObject go, PropBehaviour propBehaviour, SurfaceBehaviour surfaceBehaviour)
 {
     throw new System.NotImplementedException();
 }
Exemplo n.º 10
0
    void OnTriggerEnter(Collider other)
    {
        if (_Player.BossStep)
        {
            return;
        }

        //  道具类
        if (other.tag.Equals(GameTag.Props))
        {
            PropBehaviour pb = other.transform.parent.GetComponent <PropBehaviour>();

            if (pb == null)
            {
                pb = other.transform.parent.parent.GetComponent <PropBehaviour>();
            }

            if (pb.Owner == GameTag.Player)
            {
                return;
            }

            float damage0 = pb.DamageValue;
            float damage1 = pb.DamagePlane;

            if (damage0 < 0 && (_Player.ShieldLife + damage0) < 0)
            {
                EventDispatcher.TriggerEvent(EventDefine.Event_Tips_Type_By_Int, 0, pb.transform.position, (int)(Mathf.Abs(_Player.ShieldLife + damage0)));
            }
            else if (damage0 > 0)
            {
                EventDispatcher.TriggerEvent(EventDefine.Event_Tips_Type_By_Int, 1, pb.transform.position, (int)(Mathf.Abs(damage0)));
            }

            _Player.OnDamage(damage0, damage1);

            pb.Trigger();

            switch (pb.Type)
            {
            case PropType.Coin:
                PropsManager.Instance.AddDespawnNormal(pb);
                _Player.OnCoin(pb.Score);
                break;

            case PropType.Fix:
                if (_Player.Data.ConditionRate < 0.9f)
                {
                    ioo.audioManager.PlayPersonSound("Person_Sound_Fix");
                }
                if (_Player.Data.ConditionRate < 1)
                {
                    _Player.EffectFixed.SetActive(true);
                }

                PropsManager.Instance.AddDespawnNormal(pb);
                _Player.OnFix(pb.Score);
                EventDispatcher.TriggerEvent(EventDefine.Event_Tips_Type_By_Int, 4, pb.transform.position, 0);
                break;

            case PropType.Diamond:
                PropsManager.Instance.AddDespawnNormal(pb);
                _Player.OnDiamond(pb.Score);
                break;

            case PropType.Fuel:
                ioo.audioManager.PlayPersonSound("Person_Sound_Time_Add");
                PropsManager.Instance.AddDespawnNormal(pb);
                _Player.OnFuel(pb.Score);
                break;

            case PropType.Shield:
                ioo.audioManager.PlayPersonSound("Person_Sound_Shield");
                PropsManager.Instance.AddDespawnNormal(pb);
                _Player.OnShield(pb.Score);
                EventDispatcher.TriggerEvent(EventDefine.Event_Tips_Type_By_Int, 2, pb.transform.position, 0);
                break;

            case PropType.Magnet:
                _MagnetTime    = 8;
                _AbilityMagnet = true;
                PropsManager.Instance.AddDespawnNormal(pb);
                _Player.OnMagnet(pb.Score);
                break;

            case PropType.Wall:
                EventDispatcher.TriggerEvent(EventDefine.Event_OnTrigger_Wall);
                _Player.OnWall(pb.Score);
                break;

            //case PropType.FeiQi:
            //    PropsManager.Instance.AddDespawnNormal(pb);
            //    break;
            //case PropType.Bat:
            //    PropsManager.Instance.AddDespawnNormal(pb);
            //    break;
            case PropType.Mine:
                PropsManager.Instance.AddDespawnNormal(pb);
                break;

            case PropType.Missile:
                ioo.audioManager.PlayPersonSound("Person_Sound_Missile");
                _AbilityMissile = true;
                _Player.AbilityMissile();
                PropsManager.Instance.AddDespawnNormal(pb);
                EventDispatcher.TriggerEvent(EventDefine.Event_Tips_Type_By_Int, 5, pb.transform.position, 0);
                break;

            case PropType.Engine:
                ioo.audioManager.PlayPersonSound("Person_Sound_Speed_Up");
                PropsManager.Instance.AddDespawnNormal(pb);
                EventDispatcher.TriggerEvent(EventDefine.Event_Tips_Type_By_Int, 3, pb.transform.position, 0);
                break;
            }
            SetFactorP(pb.Type);
        }

        // 武器类
        if (other.tag.Equals(GameTag.Weapon))
        {
            WeaponBehaviour wb = other.gameObject.GetComponent <WeaponBehaviour>();
            if (wb.Owner == GameTag.Player)
            {
                return;
            }

            _Player.OnDamage(wb.DamageValue, wb.DamagePlane);

            wb.Trigger();

            switch (wb.Type)
            {
            case WeaponType.Mine:
            case WeaponType.Missle:
            case WeaponType.Laser:
            case WeaponType.FireBal:
            case WeaponType.Missle2:
                WeaponManager.Instance.AddDespawnWeapon(wb);
                break;

            case WeaponType.Stone:
                _Player.ShackCameraByPosition(1);
                WeaponManager.Instance.AddDespawnWeapon(wb);
                EffectManager.Instance.Spawn(EffectName.Effect_Aerolite_baoz, wb.transform.position);
                if (_Player.ShieldLife + wb.DamageValue < 0)
                {
                    EventDispatcher.TriggerEvent(EventDefine.Event_Tips_Type_By_Int, 0, wb.transform.position, (int)(Mathf.Abs(_Player.ShieldLife + wb.DamageValue)));
                }
                break;
            }

            SetFactorW(wb.Type);
        }

        // 广告牌
        if (other.tag.Equals(GameTag.GuangGaoPai))
        {
            ioo.audioManager.PlaySound2D("SFX_Sound_GuangGao");
        }

        // 敌人
        if (other.tag.Equals(GameTag.Enemy))
        {
            _Player.OnDamage(-3, -3);
            _Player.ShackCameraByPosition(1);
        }

        // 加速环
        if (other.tag.Equals(GameTag.Glow))
        {
            // 和加速引擎道具一样的效果
            SetFactorP(PropType.Engine);
        }

        // 虫怪
        if (other.tag.Equals(GameTag.Bug))
        {
            _Player.OnDamage(-2, -2);
            SetFactorP(PropType.Bug);
            _Player.ShackCameraByPosition(0.2f);
            if (_Player.ShieldLife - 2 < 0)
            {
                EventDispatcher.TriggerEvent(EventDefine.Event_Tips_Type_By_Int, 0, other.transform.position, (int)Mathf.Abs(2 - _Player.ShieldLife));
            }
        }

        // 特效树
        if (other.tag.Equals(GameTag.Tree))
        {
            _Player.ShackCameraByPosition(1);
        }

        if (other.tag.Equals(GameTag.CameraStop))
        {
            if (ioo.gameMode.State == GameState.Back)
            {
                SlowDown = true;
            }
        }
    }