예제 #1
0
        private Traffic GetTerrain_CMD(string args)
        {
            ResponseType responseType = ResponseType.Failed;
            int          seed         = 0;
            int          width        = 0;
            int          height       = 0;
            IModule      module       = null;
            List <GradientPresets.GradientKeyData> gradient = new List <GradientPresets.GradientKeyData>();
            MapData      mdata;
            MessageTypes type = MessageTypes.None;

            string[] TextureFiles = new string[0];
            string   message      = string.Empty;

            if (_server.WorldLoaded)
            {
                if (_server.Users.SessionKeyExists(args))
                {
                    string         user    = _server.Users.GetConnectedUser(args).Name;
                    TerrainBuilder builder = _server.Worlds.CurrentWorld.Terrain;
                    responseType = ResponseType.Successfull;
                    seed         = builder.Seed;
                    width        = builder.Width;
                    height       = builder.Height;
                    module       = builder.NoiseModule;
                    gradient     = new List <GradientPresets.GradientKeyData>(builder.GradientPreset);
                    TextureFiles = new List <string>(GradientCreator.TextureFiles.Keys).ToArray();
                    message      = "success";

                    // make sure images are cleared. They will be sent seperatly.
                    for (int i = 0; i < gradient.Count; i++)
                    {
                        gradient[i].images.Clear();
                    }

                    mdata = new MapData(responseType, seed, width, height, gradient, TextureFiles, message);
                    string sendStr   = JsonConvert.SerializeObject(mdata);
                    string moduleStr = JsonConvert.SerializeObject(module, new JsonSerializerSettings {
                        TypeNameHandling = TypeNameHandling.All
                    });
                    _server.SockServ.Send(user, "setterrainmodule", moduleStr);
                    _server.SockServ.Send(user, "setterraindata", sendStr);


                    System.Threading.ManualResetEvent reset = new System.Threading.ManualResetEvent(false);
                    foreach (string imageName in GradientCreator.TextureFiles.Keys)
                    {
                        //reset.WaitOne(1);
                        Color[]       image       = ColorConvert.LibColList(GradientCreator.TextureFiles[imageName]);
                        ImageFileData imageStruct = new ImageFileData(imageName, image);
                        string        imageStr    = JsonConvert.SerializeObject(imageStruct);
                        _server.SockServ.Send(user, "setimage", imageStr);
                        //Logger.Log("sent image: {0}", imageName);
                    }
                    message = "success";
                    type    = MessageTypes.Success;
                    return(new Traffic("message", JsonConvert.SerializeObject(new Message("_server_", type, message))));
                }
                else
                {
                    message = "Invalid session key";
                    type    = MessageTypes.Not_Logged_in;
                    return(new Traffic("message", JsonConvert.SerializeObject(new Message("_server_", type, message))));
                }
            }
            message = "World not loaded";
            type    = MessageTypes.World_Not_Loaded;
            return(new Traffic("message", JsonConvert.SerializeObject(new Message("_server_", type, message))));
        }