Example #1
0
    //飞到目标点结束
    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();
    }
Example #2
0
    //飞向玩家身上
    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;
    }
Example #3
0
 //重置
 public override void Reset()
 {
     base.Reset();
     mState                     = DropItemState.Load;
     mLifeTime                  = DateTime.Now.AddSeconds(TotalLifeTime);
     mCanAutoPickup             = false;
     mOwnerPickUpProtectionTime = Game.Instance.ServerTime;
 }
Example #4
0
 private void OnEquipRecycleSuccess(IEvent ievent)
 {
     if (DropItemState.Pickup == mState)
     {
         mState         = DropItemState.StayOnGround;
         mCanAutoPickup = true;
     }
 }
Example #5
0
 //拾取
 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);
    }
Example #7
0
    //飞到目标点
    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);
         }
     }
 }
Example #9
0
    //掉落延迟
    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();
        }
            );
    }
Example #11
0
    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
    }
Example #12
0
    //初始化
    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;
 }