コード例 #1
0
ファイル: DropBehaviour.cs プロジェクト: wuhuolong/MaxBooks
        public void CreateDrops(List <PkgDropGive> drops, DropComponent.EDropType dropType, uint emId)
        {
            for (int i = 0; i < drops.Count; ++i)
            {
                var dropInfo = drops[i];

                // 经验直接拾取
                if (dropInfo.type == GameConst.GIVE_TYPE_EXP)
                {
                    C2SNwarPick msg = new C2SNwarPick();
                    msg.oid       = dropInfo.oid;
                    msg.drop_type = (uint)dropType;
                    NetClient.GetBaseClient().SendData <C2SNwarPick>(NetMsg.MSG_NWAR_PICK, msg);

                    continue;
                }

                if (dropType == DropComponent.EDropType.Noncompetitive && dropInfo.pos != null)
                {
                    Vector3 pos = new Vector3((float)dropInfo.pos.px * GlobalConst.UnitScale, 0, (float)dropInfo.pos.py * GlobalConst.UnitScale);
                    pos.y         = PhysicsHelp.GetHeight(pos.x, pos.z);
                    pos           = InstanceHelper.ClampInWalkableRange(pos);
                    mDropPosition = pos;
                }

                // 是否超过最大掉落数
                if (InstanceDropManager.Instance.DropNum < InstanceDropManager.Instance.MaxDropNum)
                {
                    //mLoadDropPrefabCoroutine.Add(SGameEngine.ResourceLoader.Instance.StartCoroutine(LoadDropObject(dropInfo, dropType)));

                    GameObject dropGameObject = (GameObject)xc.ObjCachePoolMgr.Instance.LoadFromCache(DropBehaviour.DropPrefabPoolType, DropBehaviour.DropObjectPrefabPoolKey);
                    if (dropGameObject == null)
                    {
                        dropGameObject = (GameObject)GameObject.Instantiate(InstanceDropManager.Instance.DropObjectTemplate);
                        if (dropGameObject != null)
                        {
                            PoolGameObject pg = dropGameObject.AddComponent <PoolGameObject>();
                            pg.poolType = DropBehaviour.DropPrefabPoolType;
                            pg.key      = DropBehaviour.DropObjectPrefabPoolKey;
                        }
                    }
                    if (dropGameObject != null)
                    {
                        dropGameObject.SetActive(true);
                        OnLoadDropObjectFinished(dropGameObject, dropInfo, dropType);
                    }
                    else
                    {
                        GameDebug.LogError("Create drop object error, is null!!!");
                    }
                }
                else
                {
                    GameDebug.LogError("Can not create drop" + dropInfo.oid + ", reach max num, current num is " + InstanceDropManager.Instance.DropNum + ", max num is " + InstanceDropManager.Instance.MaxDropNum);
                }
            }
        }
コード例 #2
0
ファイル: DropBehaviour.cs プロジェクト: wuhuolong/MaxBooks
        void PickDropImpl(uint uuid, uint id, DropComponent.EDropType dropType)
        {
            var dropComponent = InstanceDropManager.Instance.GetDrop(id);

            if (dropComponent == null)
            {
                return;
            }

            var dropGameObject = dropComponent.transform.parent.gameObject;

            if (dropGameObject == null)
            {
                return;
            }

            // 是否是本地玩家拾取
            var isLocalPlayerPick = false;

            if (uuid == Game.GetInstance().LocalPlayerID.obj_idx)
            {
                isLocalPlayerPick = true;
            }

            // 拾取特效
            if (isLocalPlayerPick == true)
            {
                var path = "Assets/" + ResPath.path19;
                if (dropComponent.DropInfo.type == GameConst.GIVE_TYPE_EXP)
                {
                    path = "Assets/" + ResPath.EF_ui_jingyansaluo_fly;
                }
                Vector3 dropPosition = dropGameObject.transform.localPosition;
                mLoadDropPrefabCoroutine.Add(SGameEngine.ResourceLoader.Instance.StartCoroutine(LoadDropEffect(path, dropPosition)));
            }

            DestroyDrop(id);
        }
コード例 #3
0
ファイル: DropBehaviour.cs プロジェクト: wuhuolong/MaxBooks
        void OnLoadDropObjectFinished(GameObject dropGameObject, PkgDropGive dropInfo, DropComponent.EDropType dropType)
        {
#if UNITY_EDITOR
            dropGameObject.name = string.Format("Drop_{0}_{1}", dropInfo.oid, dropInfo.gid);
#endif
            if (dropType == DropComponent.EDropType.Noncompetitive || dropInfo.pos == null)
            {
                dropGameObject.transform.position = InstanceDropManager.GetInstance().GenerateDropPosition(mDropPosition, 0);
            }
            else
            {
                //GameDebug.LogError("Create drop1 " + dropInfo.oid + ", pos " + dropInfo.pos.px * GlobalConst.UnitScale + " " + dropInfo.pos.py * GlobalConst.UnitScale);

                Vector3 pos = new Vector3((float)dropInfo.pos.px * GlobalConst.UnitScale, 0, (float)dropInfo.pos.py * GlobalConst.UnitScale);
                //pos.y = PhysicsHelp.GetHeight(pos.x, pos.z);
                //pos = InstanceHelper.ClampInWalkableRange(pos);
                pos.y = PhysicsHelp.GetHeight(pos.x, pos.z);
                dropGameObject.transform.position = pos;

                //GameDebug.LogError("Create drop2 " + dropInfo.oid + ", pos " + pos.ToString());
            }
            var dropComponent = dropGameObject.transform.Find("Mesh").GetComponent <DropComponent>();
            dropComponent.DropType = dropType;
            dropComponent.DropInfo = dropInfo;
            dropComponent.Init();
        }