// 检查周围可以吸附的道具 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); } }
public void AddDefaultSmartTerrainEventHandler(GameObject go, PropBehaviour prop, SurfaceBehaviour primarySurface) { var handler = go.AddComponent <DefaultSmartTerrainEventHandler>(); handler.PropTemplate = prop.GetComponent <PropBehaviour>(); handler.SurfaceTemplate = primarySurface.GetComponent <SurfaceBehaviour>(); }
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); } }
private void Awake() { footCollider = GetComponent <BoxCollider2D>(); controller = GetComponent <PlayerController>(); ri = GetComponent <Rigidbody2D>(); sightChecker = GetComponentInChildren <SightChecker>(); ani = playerRenderer.GetComponent <Animator>(); propBehaviour = GetComponent <PropBehaviour>(); }
// 道具是否可以被吸附 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); }
/// <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); }
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 }
// 销毁普通道具 public void AddDespawnNormal(PropBehaviour pb) { DespawnPropList.Add(pb); }
public void AddDefaultSmartTerrainEventHandler(GameObject go, PropBehaviour propBehaviour, SurfaceBehaviour surfaceBehaviour) { throw new System.NotImplementedException(); }
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; } } }