//飞到目标点结束 private IEnumerator DropOverStay() { // 当掉落落地时,特效 if (mTableData != null && mTableData.Quality > 0 && !mEffect) { var resource = Table.GetClientConfig(600 + mTableData.Quality); if (!string.IsNullOrEmpty(resource.Value)) { CreateQualityEffect(resource.Value, o => { if (DropItemState.StayOnGround != mState && DropItemState.Droping != mState) { ComplexObjectPool.Release(o); mEffect = null; } }); } } yield return(new WaitForSeconds(DropOverDelayTime)); mState = DropItemState.StayOnGround; PlayDropSound(); }
//飞向玩家身上 public void FlyToPlayer() { //先把特效关掉 if (mEffect) { ComplexObjectPool.Release(mEffect); mEffect = null; } if (null != mController) { mController.ShowModel(false); mController.ShowEffect(true); } var myPos = ObjManager.Instance.MyPlayer.Position; var dir = (Position - myPos).normalized; mControlPoint = Position + dir * Random.Range(ControlPointOffsetDistanceMin, ControlPointOffsetDistanceMax); mControlPoint.y += Random.Range(ControlPointOffsetHeightMin, ControlPointOffsetHeightMax); mControlPointMoveSpeed = ControlPointSpeed; mMoveSpeed = MoveSpeed; mControlPointReached = false; mState = DropItemState.FlyToPlayer; }
//重置 public override void Reset() { base.Reset(); mState = DropItemState.Load; mLifeTime = DateTime.Now.AddSeconds(TotalLifeTime); mCanAutoPickup = false; mOwnerPickUpProtectionTime = Game.Instance.ServerTime; }
private void OnEquipRecycleSuccess(IEvent ievent) { if (DropItemState.Pickup == mState) { mState = DropItemState.StayOnGround; mCanAutoPickup = true; } }
//拾取 public void Pickup() { if (CanPickup()) { NetManager.Instance.SendPickUpItemRequest(GetObjId()); mState = DropItemState.Pickup; } mCanAutoPickup = false; }
public void Initialize(SpacecraftEntity mainPlayer, ulong uid, uint tid, uint item_tid, PackageBoxAttr?pb) { m_SpacecraftEntity = mainPlayer; m_UID = uid; m_ItemTid = item_tid; m_PackageBoxAttr = pb; m_DropItemState = DropItemState.Born; m_NpcVO = (GameFacade.Instance.RetrieveProxy(ProxyName.CfgEternityProxy) as CfgEternityProxy).GetNpcByKey(tid); }
//飞到目标点 private void DropToTargetPos() { mState = DropItemState.Droping; var paths = new Vector3[3]; paths[0] = Position; paths[1] = (mTargetPos + Position) / 2; paths[1].y = Position.y + DropHight; paths[2] = mTargetPos; iTween.MoveTo(gameObject, iTween.Hash("path", paths, "movetopath", true, "orienttopath", false, "time", DropTime, "easetype", iTween.EaseType.linear, "oncomplete", "DropOver")); }
private void LateUpdate() { if (m_SpacecraftEntity && m_DropItemState == DropItemState.Stay) { Vector3 playerPos = m_SpacecraftEntity.GetRootTransform().position; Vector3 currentPos = gameObject.transform.position; float square = GetInteractableDistanceSquare(); float dis = (playerPos - currentPos).sqrMagnitude; if (dis <= square) { /// 拾取 m_DropItemState = DropItemState.Gather; MineDropItemManager.Instance.AutoPickUp(m_UID); } } }
//掉落延迟 private IEnumerator Delay() { mState = DropItemState.Delay; if (null != mModel) { mModel.SetActive(false); } yield return(new WaitForSeconds(DelayTime)); if (null != mModel) { mModel.SetActive(true); } DropToTargetPos(); }
public void AddFlyEffect(float posX, float posY, float posZ) { CfgEternityProxy cfgEternityProxy = GameFacade.Instance.RetrieveProxy(ProxyName.CfgEternityProxy) as CfgEternityProxy; PackageItem packageItem = cfgEternityProxy.PackageItemsByKey(m_ItemTid); GameplayProxy gameplayProxy = GameFacade.Instance.RetrieveProxy(ProxyName.GameplayProxy) as GameplayProxy; Vector3 endPos = new Vector3(posX, posY, posZ); Vector3 clientPosition = gameplayProxy.ServerAreaOffsetToClientPosition(endPos); AddEffect(); float flyTime = Random.Range(packageItem.FlyTimeMin, packageItem.FlyTimeMax); gameObject.transform.DOMove(clientPosition, flyTime).SetEase((Ease)packageItem.FlySpeed).OnComplete( () => { m_DropItemState = DropItemState.Stay; AddEffect(); } ); }
private void Update() { #if !UNITY_EDITOR try { #endif if (State == ObjState.Deleted) { return; } if (State == ObjState.LogicDataInited) { if (ObjManager.Instance.CanLoad() && LoadResourceAction != null) { LoadResourceAction(); } } if (SafeMode) { if (DateTime.Now > mLifeTime) { //为了安全,怎么也该消失了 Logger.Warn("Drop item[{0}] stays too long", mObjId); mState = DropItemState.Destory; var obj = ObjManager.Instance.FindObjById(mObjId); if (null != obj && obj.Equals(this)) { ObjManager.Instance.RemoveObj(mObjId); } else { base.Destroy(); } return; } } var player = ObjManager.Instance.MyPlayer; if (null == player) { return; } if (DropItemState.StayOnGround == mState) { //如果是装备,装备包裹满了 if (null != mTableData) { var type = Shared.CheckGeneral.GetItemType(mTableData.Id); if (eItemType.Equip == type) { if (PlayerDataManager.Instance.GetRemaindCapacity(eBagType.Equip) <= 0) { if (PlayerDataManager.Instance.mPickIntervalTrigger == null) { PlayerDataManager.Instance.mPickIntervalTrigger = TimeManager.Instance.CreateTrigger(Game.Instance.ServerTime.AddSeconds(2f), () => { TimeManager.Instance.DeleteTrigger(PlayerDataManager.Instance.mPickIntervalTrigger); PlayerDataManager.Instance.mPickIntervalTrigger = null; //包裹已满提示 var e = new ShowUIHintBoard(302); EventDispatcher.Instance.DispatchEvent(e); }); } return; } } else if (eItemType.BaseItem == type) { if (PlayerDataManager.Instance.GetRemaindCapacity(eBagType.BaseItem) <= 0) { if (PlayerDataManager.Instance.mPickIntervalTrigger == null) { PlayerDataManager.Instance.mPickIntervalTrigger = TimeManager.Instance.CreateTrigger(Game.Instance.ServerTime.AddSeconds(2f), () => { TimeManager.Instance.DeleteTrigger(PlayerDataManager.Instance.mPickIntervalTrigger); PlayerDataManager.Instance.mPickIntervalTrigger = null; //包裹已满提示 var e = new ShowUIHintBoard(302); EventDispatcher.Instance.DispatchEvent(e); }); } return; } } } //停在地上 if (CanPickup() && mCanAutoPickup) { //可以自动拾取 var distance = Vector2.Distance(player.Position.xz(), Position.xz()); if (mTableData != null && mTableData.Type == 300) { if (distance <= GameUtils.AutoPickUpBuffDistance) { Pickup(); mCanAutoPickup = false; } } else if (distance <= GameUtils.AutoPickUpDistance) { //距离足够近 var control = UIManager.Instance.GetController(UIConfig.SettingUI); if ((bool)control.CallFromOtherClass("CanPiackUpItem", new object[] { mDataId })) { //是否可拾取这种类型物品 Pickup(); } mCanAutoPickup = false; } } } else if (DropItemState.FlyToPlayer == mState) { //我拾取成功,物品正在往我身上飞 var delta = Time.deltaTime; var temp = player.Position; temp.y += PlayerOffset; //控制点朝着主角飞 if (!mControlPointReached) { var distance = Vector2.Distance(temp, mControlPoint); if (distance <= MaxDistance) { //当前已经飞到了 mControlPointReached = true; } else { mControlPointMoveSpeed += delta * AccSpeed; mControlPointMoveSpeed = Math.Min(mControlPointMoveSpeed, MAXSPEED); var moveDis = mControlPointMoveSpeed * delta; if (moveDis >= distance) { //这一步就飞到了 mControlPointReached = true; } else { //继续移动 var controlPointDir = (temp - mControlPoint).normalized; mControlPoint += controlPointDir * moveDis; } } } if (mControlPointReached) { mControlPoint = temp; } { //自己朝着控制点飞 var dis = Vector3.Distance(mControlPoint, Position); if (dis <= MaxDistance && mControlPointReached) { mState = DropItemState.Destory; Destroy(); } else { mMoveSpeed += AccSpeed * delta; mMoveSpeed = Math.Min(mMoveSpeed, MAXSPEED); var moveDis = mMoveSpeed * delta; if (moveDis >= dis) { Position = mControlPoint; if (mControlPointReached) { mState = DropItemState.Destory; Destroy(); } } else { var dir = (mControlPoint - Position).normalized; Position = Position + dir * moveDis; } } } } #if !UNITY_EDITOR } catch (Exception ex) { Logger.Error(ex.ToString()); } #endif }
//初始化 public override bool Init(InitBaseData initData, Action callback = null) { base.Init(initData); Reset(); var data = initData as InitDropItemData; if (data == null) { return(false); } mOwnerIsMe = false; mCanAutoPickup = true; HasAutoFightMove = false; var player = ObjManager.Instance.MyPlayer; if (player) { if (data.Owner.Contains(player.GetObjId())) { mOwnerIsMe = true; //mCanAutoPickup = true; } else if (data.Owner.Count <= 0) { //新增,这种是谁都可以拾取的 mOwnerIsMe = true; } } mOwnerPickUpProtectionTime = Game.Instance.ServerTime.AddSeconds(data.RemianSeconds); mLifeTime = DateTime.Now.AddSeconds(TotalLifeTime); //float height = GameLogic.Instance.Scene.GetTerrainHeight(data.TargetPos) + 0.1f; //mTargetPos = new Vector3(data.TargetPos.x, height, data.TargetPos.y); if (-1 == TerrainLayerMask) { TerrainLayerMask = LayerMask.GetMask(GAMELAYER.ShadowReceiver); } var ray = new Ray(new Vector3(data.TargetPos.x, 50, data.TargetPos.y), Vector3.down); RaycastHit hit; if (Physics.Raycast(ray, out hit, 80, TerrainLayerMask)) { mTargetPos = hit.point; mTargetPos.y += 0.1f; } else { var height = GameLogic.GetTerrainHeight(data.TargetPos.x, data.TargetPos.y) + 0.1f; mTargetPos = new Vector3(data.TargetPos.x, height, data.TargetPos.y); } LoadResourceAction = () => { if (State == ObjState.Deleted) { return; } State = ObjState.LoadingResource; LoadRes(() => { State = ObjState.Normal; if (true != data.PlayDrop) { //不需要播放掉落动画 Position = mTargetPos; mState = DropItemState.StayOnGround; // 初始特效 if (mTableData != null && mTableData.Quality > 0 && !mEffect) { var resource = Table.GetClientConfig(600 + mTableData.Quality); if (!string.IsNullOrEmpty(resource.Value)) { CreateQualityEffect(resource.Value, o => { if (DropItemState.StayOnGround != mState && DropItemState.Droping != mState) { ComplexObjectPool.Release(o); mEffect = null; } }); } } } else { //需要播放掉落动画 StartCoroutine(Delay()); mState = DropItemState.Delay; } if (null != callback) { callback(); } mController = mModel.GetComponent <DropItemController>(); if (null != mController) { mController.ShowModel(true); mController.ShowEffect(false); } }); }; EventDispatcher.Instance.AddEventListener(EquipBagNotFullChange.EVENT_TYPE, OnEquipRecycleSuccess); EventDispatcher.Instance.AddEventListener(UIEvent_PickSettingChanged.EVENT_TYPE, OnPickupSettingChanged); if (mOwnerIsMe) { ObjManager.Instance.MyPlayer.AutoCombat.AddDropPos(this); } return(true); }
private void Awake() { m_DropItemState = DropItemState.None; }
public void SetDropItemState(DropItemState state) { m_DropItemState = state; }