private static void ExitDepthLevelScene()
    {
        SceneRecord oldSceneRecord = sceneRecordStack.Pop();
        SceneRecord newSceneRecord = sceneRecordStack.Peek();

        GetFreeRoamSceneController(oldSceneRecord.scene).SetDoorsEnabledState(false);
        GetFreeRoamSceneController(oldSceneRecord.scene).SetSceneRunningState(false);

        StartFadeOut();

        FadeOutComplete += () => {
            GetFreeRoamSceneController(oldSceneRecord.scene).SetSceneRunningState(true);
            GetFreeRoamSceneController(oldSceneRecord.scene).SetEnabledState(false);

            PlayerGameObject.GetComponent <PlayerController>().SetMoveDelay(sceneChangePlayerMoveDelay);

            MovePlayerAndMenuToNewScene(PlayerGameObject, FreeRoamMenuGameObject, newSceneRecord.scene, newSceneRecord.gridPosition);

            SceneManager.SetActiveScene(newSceneRecord.scene);

            //Wait until old scene unloaded before starting next scene
            SceneManager.UnloadSceneAsync(oldSceneRecord.scene).completed += (ao) =>
            {
                GetFreeRoamSceneController(newSceneRecord.scene).SetDoorsEnabledState(true);
                GetFreeRoamSceneController(newSceneRecord.scene).SetEnabledState(true);
                StartFadeIn();
            };
        };
    }
예제 #2
0
        private void OnRefresSceneMap(int scendId)
        {
            if (!SceneManager.Instance.isInMieshiFuben())
            {
                ClearMonsterList();
                return;
            }

            DataModel.SceneId = scendId;
            mSceneRecord      = Table.GetScene(scendId);
            if (mSceneRecord == null)
            {
                return;
            }

            var scale = 1f * mSceneRecord.TerrainHeightMapWidth / mSceneRecord.TerrainHeightMapLength;

            if (scale > 1.0f)
            {
                DataModel.MapWidth  = (int)(MAP_HIGHT);
                DataModel.MapHeight = (int)(MAP_HIGHT / scale);
            }
            else
            {
                DataModel.MapWidth  = (int)(MAP_HIGHT * scale);
                DataModel.MapHeight = (int)MAP_HIGHT;
            }

            var obj = ObjManager.Instance.MyPlayer;

            if (obj)
            {
                PostionChange(obj.Position);
            }
        }
예제 #3
0
        public SceneStack(Stack <SceneRecord> stack,
                          string currentSceneIdentifier,
                          Vector2Int currentScenePosition)
        {
            //Get queue of scene records to use in correct order (reverse of stack)
            List <SceneRecord> stackQueueList = new List <SceneRecord>(stack);

            stackQueueList.Reverse();
            Queue <SceneRecord> stackQueue = new Queue <SceneRecord>(stackQueueList);

            //Set elements from queue and parsing the SceneRecord's

            elements = new Element[stackQueue.Count + 1];
            for (int i = 0; i < stackQueue.Count; i++)
            {
                SceneRecord record     = stackQueue.Dequeue();
                Element     newElement = new Element(record.sceneIdentifier, record.returnPosition, record.instanceId);

                elements[i] = newElement;
            }

            //Add current scene

            elements[elements.Length - 1] = new Element(currentSceneIdentifier, currentScenePosition, currentInstanceId);
        }
예제 #4
0
        //private void OnCreateCharacter(IEvent ievent)
        //{
        //    var e = ievent as Character_Create_Event;
        //    var charId = e.CharacterId;
        //    var obj = ObjManager.Instance.FindCharacterById(charId);
        //    if (obj == null)
        //    {
        //        return;
        //    }
        //    if (obj.GetObjType() != OBJ.TYPE.NPC)
        //    {
        //        return;
        //    }
        //    OnNpcCreate();
        //}

        //private void OnRemoveCharacter(IEvent ievent)
        //{
        //    var e = ievent as Character_Remove_Event;
        //    var charId = e.CharacterId;
        //    var obj = ObjManager.Instance.FindCharacterById(charId);
        //    if (obj == null)
        //    {
        //        return;
        //    }
        //    if (obj.GetObjType() != OBJ.TYPE.NPC)
        //    {
        //        return;
        //    }
        //    if (mSceneRecord == null)
        //    {
        //        return;
        //    }
        //    OnNpcDie(obj.GetDataId());
        //}



        #region 固有函数
        public void CleanUp()
        {
            if (DataModel != null)
            {
                DataModel.ToggleList.PropertyChanged -= OnPropertyChangeToggle;
            }
            mSceneRecord = null;
            DataModel    = new SceneMapDataModel();

            DataModel.ToggleList.PropertyChanged += OnPropertyChangeToggle;
            var _DataModelToggleListCount1 = DataModel.ToggleList.Count;

            for (var i = 0; i < _DataModelToggleListCount1; i++)
            {
                DataModel.ToggleList[i] = true;
            }
            MAP_HIGHT = Table.GetClientConfig(1006).Value.ToInt();
            if (!IsInit)
            {
                Table.ForeachLode(tb =>
                {
                    LodeDic.Add(tb.Id, tb.LodeInMap);
                    return(true);
                });
                IsInit = true;
            }
        }
예제 #5
0
파일: Scene.cs 프로젝트: tuita520/u3dmmorpg
    public static bool IsDungeon(SceneRecord table)
    {
        var type = (eSceneType)table.Type;

        if (eSceneType.Pvp == type)
        {
            return(true);
        }
        if (eSceneType.Fuben == type)
        {
            var tableFuben = Table.GetFuben(table.FubenId);
            if (null != tableFuben)
            {
                var aType = (eDungeonAssistType)tableFuben.AssistType;
                if (eDungeonAssistType.PhaseDungeon == aType)
                {
                    return(false);
                }
            }
            return(true);
        }
        if (eSceneType.BossHome == type)
        {
            return(true);
        }
        return(false);
    }
        public SceneRecordDataObject UpdateSceneRecord(SceneRecordDataObject sceneRecord)
        {
            SceneRecord entity = this.sceneRecordRepository.FindByID(sceneRecord.ID);

            entity = DyMapper.Map <SceneRecordDataObject, SceneRecord>(sceneRecord);
            this.sceneRecordRepository.Update(entity);
            this.sceneRecordRepository.Commit();
            return(DyMapper.Map <SceneRecord, SceneRecordDataObject>(entity));
        }
        public SceneRecordDataObject AddSceneRecord(SceneRecordDataObject sceneRecord)
        {
            SceneRecord entity = this.sceneRecordRepository.Create();

            entity          = DyMapper.Map(sceneRecord, entity);
            entity.Involved = this.sceneRecordRepository.Context.DoFindByID <Involved>(sceneRecord.InvolvedID);
            this.sceneRecordRepository.Add(entity);
            this.sceneRecordRepository.Commit();
            return(DyMapper.Map <SceneRecord, SceneRecordDataObject>(entity));
        }
예제 #8
0
파일: Scene.cs 프로젝트: pikaqiufk/Client
    public static bool IsInFuben(SceneRecord table)
    {
        var type = (eSceneType)table.Type;

        if (eSceneType.City == type || eSceneType.Normal == type)
        {
            return(false);
        }
        return(true);
    }
예제 #9
0
    /// <summary>
    /// Unload the current scene and load the next scene in the scene record stack
    /// </summary>
    private static void AscendScene()
    {
        if (sceneRecordStack.Count < 1)
        {
            Debug.LogError("No scene records to load once current scene unloaded");
            return;
        }

        Scene oldScene = SceneManager.GetActiveScene();

        SceneRecord newSceneRecord = sceneRecordStack.Pop();

        currentInstanceId = newSceneRecord.instanceId;

        LoadScene(newSceneRecord.sceneIdentifier, oldScene, newSceneRecord.returnPosition);
    }
예제 #10
0
 //判断是否一般场景
 public static bool IsNormalScene(SceneRecord scene)
 {
     return(scene.Type == 0 || scene.Type == 1);
 }
예제 #11
0
    public static void CreateObstacle()
    {
        //根据当前场景名字获得场景名称
        string curScene = EditorApplication.currentScene.Substring(EditorApplication.currentScene.LastIndexOf('/') + 1);

        curScene = curScene.Substring(0, curScene.IndexOf('.'));
        //首先获取当前场景的SceneClass
        SceneRecord sceneDefine = null;

        Debug.Log("Remember to add mesh collider to all the meshes.");

        var name = "Table/Scene.txt";
        var path = "Assets/Res/" + name;
        Dictionary <int, IRecord> Scene = new Dictionary <int, IRecord>();
        var txt = Resources.LoadAssetAtPath(path, typeof(TextAsset)) as TextAsset;

        TableInit.Table_Init(txt.bytes, Scene, TableType.Scene);
        {
            // foreach(var record in Scene)
            var __enumerator1 = (Scene).GetEnumerator();
            while (__enumerator1.MoveNext())
            {
                var record = __enumerator1.Current;
                {
                    if (((SceneRecord)record.Value).ResName == curScene)
                    {
                        sceneDefine = (SceneRecord)record.Value;
                        break;
                    }
                }
            }
        }

        if (null == sceneDefine)
        {
            Debug.LogError("Scene Table Not Find, SceneID:" + curScene);
            return;
        }

        int nLenth = sceneDefine.TerrainHeightMapLength;
        int nWidth = sceneDefine.TerrainHeightMapWidth;

        //初始化文件
        string obstacleFilePath = GetCurSceneObstacleFilePath();

        FileStream fileStream = new FileStream(obstacleFilePath, FileMode.Create, FileAccess.ReadWrite);
        int        nSeek      = 0;

        //先将地图的长和宽写入文件头
        fileStream.Seek(nSeek, SeekOrigin.Begin);
        byte[] byteLen = System.BitConverter.GetBytes(nLenth);
        fileStream.Write(byteLen, 0, byteLen.Length);
        nSeek += byteLen.Length;

        fileStream.Seek(nSeek, SeekOrigin.Begin);
        byte[] byteWid = System.BitConverter.GetBytes(nWidth);
        fileStream.Write(byteWid, 0, byteWid.Length);
        nSeek += byteWid.Length;

        bool ok = false;

        //对当前场景进行遍历,进行寻路检测,得到每一个点的可行走类型
        for (float fX = 0.0f; fX <= (float)nWidth; fX += 0.5f)
        {
            for (float fZ = 0.0f; fZ <= (float)nLenth; fZ += 0.5f)
            {
                ObstacleInfo nState = GetScenePosPathState(fX, fZ);
                byte[]       write  = Struct2Byte(nState);

                if (nState.Value == NRun || nState.Value == NWalk)
                {
                    ok = true;
                }

                fileStream.Seek(nSeek, SeekOrigin.Begin);
                fileStream.Write(write, 0, write.Length);
                nSeek += write.Length;
            }
        }
        fileStream.Close();

        if (!ok)
        {
            Debug.Log("1. Check tag has added to the objects.");
            Debug.Log("2. Check mesh collider has added to the objects.");
        }
        else
        {
            Debug.Log("Server Obstacle Create OK");
        }
    }
예제 #12
0
        public void RefreshData(UIInitArguments data)
        {
            DataModel.ViewState  = 0;
            DataModel.QueueState = 0;

            FubenRecord fuben = Table.GetFuben(30000);
            SceneRecord scene = Table.GetScene(fuben.SceneId);

            var _queueUpData = PlayerDataManager.Instance.PlayerDataModel.QueueUpData;

            if (_queueUpData.QueueId != -1 && _queueUpData.QueueId == fuben.QueueParam)
            {
                DataModel.QueueState = 1;
            }

            if (DataModel.Reward.Count <= 0)
            {
                DataModel.NeedLevel = scene.LevelLimit;
                for (int i = 0; i < fuben.RewardId.Count && i < fuben.RewardCount.Count; i++)
                {
                    if (fuben.RewardId[i] > 0 && fuben.RewardCount[i] > 0)
                    {
                        ItemIdDataModel model = new ItemIdDataModel();
                        model.ItemId = fuben.RewardId[i];
                        model.Count  = fuben.RewardCount[i];
                        DataModel.Reward.Add(model);
                    }
                }
            }


            if (DataModel.TotalRewardRank == null)
            {
                DataModel.TotalRewardRank =
                    new System.Collections.ObjectModel.ObservableCollection <GongxianJianliItem>();

                for (int i = 0; ; i++)
                {
                    CheckenFinalRewardRecord dcrr = Table.GetCheckenFinalReward(i + 1);
                    if (dcrr == null)
                    {
                        break;
                    }
                    string[]           rank        = dcrr.Rank.Split('|');
                    GongxianJianliItem jiangliItem = new GongxianJianliItem();
                    if (rank.Length > 0)
                    {
                        if (int.Parse(rank[0]) <= 3)
                        {
                            jiangliItem.NubIcon = dcrr.RankIcon;
                        }
                        else
                        {
                            jiangliItem.Numb = string.Format("{0} - {1}", dcrr.Rank[0], dcrr.Rank[dcrr.Rank.Length - 1]);
                        }

                        for (int j = 0; j < dcrr.RankItemCount.Length; j++)
                        {
                            if (dcrr.RankItemID[j] > 0)
                            {
                                GongxianJianliItem.JiangliItem item = new GongxianJianliItem.JiangliItem();
                                item.IconId = dcrr.RankItemID[j];
                                ItemBaseRecord dbd = Table.GetItemBase(dcrr.RankItemID[j]);
                                item.Icon  = dbd.Icon;
                                item.count = dcrr.RankItemCount[j].ToString();
                                jiangliItem.Rewards.Add(item);
                            }
                        }
                    }
                    DataModel.TotalRewardRank.Add(jiangliItem);
                }
            }
        }
예제 #13
0
 private void SceneRecord_IsLockedChanged(SceneRecord sender, bool isLocked)
 {
     DisplaySceneRecord();
 }
예제 #14
0
        private void OnRefurbishSceneMapEvent(IEvent ievent)
        {
            var _e = ievent as RefresSceneMap;

            DataModel.SceneId = _e.SceneId;
            mSceneRecord      = Table.GetScene(_e.SceneId);
            if (mSceneRecord == null)
            {
                return;
            }
            DataModel.ScenrIcon = mSceneRecord.ShowNameIcon;
            NpcDataModels.Clear();

            var _scale = 1f * mSceneRecord.TerrainHeightMapWidth / mSceneRecord.TerrainHeightMapLength;

            if (_scale > 1.0f)
            {
                DataModel.MapWidth  = (int)(MAP_HIGHT);
                DataModel.MapHeight = (int)(MAP_HIGHT / _scale);
            }
            else
            {
                DataModel.MapWidth  = (int)(MAP_HIGHT * _scale);
                DataModel.MapHeight = (int)MAP_HIGHT;
            }
            var _camp = ObjManager.Instance.MyPlayer.GetCamp();

            DataModel.NpcList.Clear();
            DataModel.PlayerList.Clear();
            Table.ForeachMapTransfer((record =>
            {
                if (record.SceneID != _e.SceneId)
                {
                    return(true);
                }
                var _npcData = new SceneNpcDataModel();
                _npcData.Id = record.Id;
                _npcData.NpcId = record.NpcID;
                _npcData.SceneLoction = new Vector3(record.PosX, 0, record.PosZ);
                _npcData.MapLoction = TransformSceneToMap(_npcData.SceneLoction);
                _npcData.Color = GameUtils.GetTableColor(record.DisplayColor);
                _npcData.NpcName = record.Name;
                _npcData.CharType = record.Type;
                SetSprite(record, _npcData, _camp);
                _npcData.Width = record.PicWidth;
                _npcData.Height = record.PIcHight;
                _npcData.LabLoc = new Vector3(record.OffsetX, record.OffsetY, 0);
                _npcData.NpcType = record.ShowChar;
                _npcData.DisplaySort = record.DisplaySort;
                _npcData.Mark = record.Mark;
                NpcDataModels.Add(_npcData);
                return(true);
            }));
            NpcDataModels.Sort((a, b) =>
            {
                if (a.CharType == b.CharType)
                {
                    return((a.DisplaySort < b.DisplaySort) ? -1 : 1);
                }
                return((a.CharType < b.CharType) ? -1 : 1);
            });

            var _obj = ObjManager.Instance.MyPlayer;

            if (_obj)
            {
                PositionChange(_obj.Position);
            }
            RefurbishNpcList();
        }