Ejemplo n.º 1
0
    public override IEnumerator OnInit(object userdata = null)
    {
        InitState last = InitState.None;

        while (true)
        {
            if (last != state)
            {
                last = state;
                switch (state)
                {
                case InitState.Start:
                    Progress = 0f;
                    state    = InitState.InitMapMgr;
                    break;

                case InitState.InitMapMgr:
                    //MapMgr.Create();
                    MapMgr.Instance.Init();
                    Progress = 0.3f;
                    state    = InitState.GetMapLayerData;
                    break;

                case InitState.GetMapLayerData:
                    Messenger.AddListener(MessageId.MAP_GET_MAP_LAYER_DATA, GetLayerData);
                    CGGetMapLayerData getMapLayerData = new CGGetMapLayerData();
                    //层数从第一层开始
                    getMapLayerData.LayerIndex = 1;
                    getMapLayerData.InstanceId = MapMgr.Instance.MyMapPlayer.InstanceId;
                    getMapLayerData.PlayerX    = MapMgr.Instance.MyMapPlayer.CurPos.X;
                    getMapLayerData.PlayerY    = MapMgr.Instance.MyMapPlayer.CurPos.Y;
                    Game.NetworkManager.SendToLobby(MessageId_Send.CGGetMapLayerData, getMapLayerData);
                    Progress = 0.5f;
                    break;

                case InitState.CreateModel:
                    yield return(MapMgr.Instance.MakePlayer());

                    state    = InitState.Finish;
                    Progress = 0.8f;
                    break;

                case InitState.Finish:
                    Progress = 1f;
                    yield break;

                default:
                    break;
                }
            }

            yield return(null);
        }
    }
Ejemplo n.º 2
0
    //void LoadPlayerSuccess(string path, object[] userData, GameObject go)
    //{
    //    playerGo = go;
    //    MapCardBase mapcard = mapCards[Random.Range(0, mapCards.Count)];
    //    currentPos = mapcard.Pos;
    //    playerGo.transform.position = GetTransfromByPos(currentPos);
    //    mapcard.State = MapCardBase.CardState.Front;
    //}

    public void NextMapLayer()
    {
        //MakeMap(currentMapLayerData.LayerId + 1);
        CGGetMapLayerData getMapLayerData = new CGGetMapLayerData();

        //层数从第一层开始
        getMapLayerData.LayerIndex = currentMapLayerData.LayerId + 1;
        getMapLayerData.InstanceId = MapMgr.Instance.MyMapPlayer.InstanceId;
        getMapLayerData.PlayerX    = MapMgr.Instance.MyMapPlayer.CurPos.X;
        getMapLayerData.PlayerY    = MapMgr.Instance.MyMapPlayer.CurPos.Y;
        Game.NetworkManager.SendToLobby(MessageId_Send.CGGetMapLayerData, getMapLayerData);
    }
Ejemplo n.º 3
0
    public override void Handle(object sender, IMessage packet)
    {
        base.Handle(sender, packet);
        CGGetMapLayerData data = packet as CGGetMapLayerData;
        //处理完数据和逻辑后,发送消息通知客户端
        GCGetMapLayerData    response      = new GCGetMapLayerData();
        InstanceTableSetting instanceTable = InstanceTableSettings.Get(data.InstanceId);

        //层数从第一层开始
        if (instanceTable.LayerMax < data.LayerIndex)
        {
            response.Result = 1;
            SendToClient(MessageId_Receive.GCGetMapLayerData, response);
            return;
        }
        InstanceLayerTableSetting layerTableSetting = InstanceLayerTableSettings.Get(instanceTable.Layers[Random.Range(0, instanceTable.Layers.Count)]);


        MapLayerData layerData = new MapLayerData(data.LayerIndex, instanceTable.Width, instanceTable.Height);

        int[,] mapType = new int[instanceTable.Width, instanceTable.Height];
        int[,] mapID   = new int[instanceTable.Width, instanceTable.Height];
        List <MapCardPos> mapCards = new List <MapCardPos>();
        int cardCount = Random.Range(layerTableSetting.MinCount, layerTableSetting.MaxCount + 1);

        //先确定出生点
        {
            MapCardPos playerDoorCard = new MapCardPos(data.PlayerX, data.PlayerY);
            mapCards.Add(playerDoorCard);
            layerData[playerDoorCard] = new MapCardBase();
            mapType[playerDoorCard.X, playerDoorCard.Y] = (int)MapCardType.Door;
        }
        for (int i = 1; i < cardCount; i++)
        {
            MapCardPos pos = mapCards[Random.Range(0, i)];

            List <MapCardPos> poss = layerData.GetNearEmptyPoss(pos.X, pos.Y);

            if (poss.Count == 0)
            {
                i--;
                continue;
            }
            int count = Random.Range(0, poss.Count - 1);
            pos = poss[count];
            mapCards.Add(pos);
            layerData[pos]        = new MapCardBase();
            mapType[pos.X, pos.Y] = Random.Range((int)MapCardType.Monster, (int)MapCardType.NPC + 1);
        }
        //创建出口
        {
            MapCardPos pos = mapCards[Random.Range(0, cardCount)];

            List <MapCardPos> poss = layerData.GetNearEmptyPoss(pos.X, pos.Y);

            while (poss.Count == 0)
            {
                pos  = mapCards[Random.Range(0, cardCount)];
                poss = layerData.GetNearEmptyPoss(pos.X, pos.Y);
            }
            int count = Random.Range(0, poss.Count - 1);
            pos = poss[count];
            mapCards.Add(pos);
            layerData[pos]        = new MapCardBase();
            mapType[pos.X, pos.Y] = (int)MapCardType.Door;
        }
        for (int i = 0; i < mapCards.Count; i++)
        {
            MapCardPos pos = new MapCardPos(mapCards[i].X, mapCards[i].Y);
            switch ((MapCardType)mapType[pos.X, pos.Y])
            {
            case MapCardType.None:
                mapID[pos.X, pos.Y] = 0;
                break;

            case MapCardType.Door:
                mapID[pos.X, pos.Y] = 2;
                break;

            case MapCardType.Monster:
                mapID[pos.X, pos.Y] = layerTableSetting.Monsters[Random.Range(0, layerTableSetting.Monsters.Count)];
                break;

            case MapCardType.Shop:
                mapID[pos.X, pos.Y] = layerTableSetting.Shop[Random.Range(0, layerTableSetting.Shop.Count)];
                break;

            case MapCardType.Box:
                mapID[pos.X, pos.Y] = layerTableSetting.Box[Random.Range(0, layerTableSetting.Box.Count)];
                break;

            case MapCardType.NPC:
                mapID[pos.X, pos.Y] = layerTableSetting.NPC[Random.Range(0, layerTableSetting.NPC.Count)];
                break;

            default:
                break;
            }
        }
        response.Result           = 0;
        response.LayerData        = new PBMapLayerData();
        response.LayerData.Index  = data.LayerIndex;
        response.LayerData.Height = instanceTable.Width;
        response.LayerData.Width  = instanceTable.Height;
        for (int i = 0; i < instanceTable.Width; i++)
        {
            for (int j = 0; j < instanceTable.Height; j++)
            {
                response.LayerData.PointTypes.Add(mapType[i, j]);
                response.LayerData.PointIds.Add(mapID[i, j]);
                response.LayerData.PointState.Add(0);
            }
        }
        response.LayerData.PointState[data.PlayerX + data.PlayerY * instanceTable.Width] = 1;
        SaveData(MAP_LAYER_DATA_KEY, response.LayerData);
        SendToClient(MessageId_Receive.GCGetMapLayerData, response);
    }