コード例 #1
0
ファイル: BaseDataWindow.cs プロジェクト: Deijin27/RanseiLink
        /// <summary>
        /// Read text from data, removing 0x00 padding.
        /// </summary>
        /// <param name="index"></param>
        /// <param name="maxLength"></param>
        /// <returns></returns>
        public string GetPaddedUtf8String(int index, int maxLength)
        {
            var bytes = Data.Skip(index).TakeWhile((i, c) => i != 0 && c <= maxLength).ToArray();

            //var reader = new Text.PNAReader(bytes, false, true);

            //return reader.Text;

            return(NameLoader.LoadName(bytes));
        }
コード例 #2
0
        private Game(Map[] maps, Rules configRules, IList <Civilization> civilizations, Options options,
                     string[] gamePaths, DifficultyType difficulty, IPlayer localPlayer)
        {
            Script           = new ScriptEngine(localPlayer.UI, this, gamePaths);
            _options         = options;
            _maps            = maps;
            _rules           = configRules;
            TurnNumber       = 0;
            _difficultyLevel = difficulty;

            AllCivilizations.AddRange(civilizations);

            CityNames = NameLoader.LoadCityNames(gamePaths);

            Players = civilizations.Select(c =>
            {
                var player = c.PlayerType switch
                {
                    PlayerType.AI => new AIPlayer(_difficultyLevel),
                    PlayerType.Local => localPlayer,
                    PlayerType.Remote => throw new NotSupportedException("Network play not implemented"),
                    PlayerType.Barbarians =>
                    //TODO: create seperate barbarian player
                    new AIPlayer(_difficultyLevel),
                    _ => throw new ArgumentOutOfRangeException(nameof(c.PlayerType), c.PlayerType, null)
                };
                return(player.SetCiv(c));
            }).ToArray();

            TerrainImprovements = TerrainImprovementFunctions.GetStandardImprovements(Rules);

            Script.RunScript("tile_improvements.lua");



            Script.RunScript("improvements.lua");
            Script.RunScript("advances.lua");

            AllCivilizations.ForEach((civ) =>
            {
                OnCivEvent?.Invoke(this, new CivEventArgs(CivEventType.Created, civ));
            });


            this.SetupTech();

            Power.CalculatePowerRatings(this);
        }
コード例 #3
0
ファイル: BaseDataWindow.cs プロジェクト: Deijin27/RanseiLink
        /// <summary>
        /// Write text to data, padding to max length with 0x00
        /// </summary>
        /// <param name="index">byte index in data to start name</param>
        /// <param name="maxLength">Max length of the text <strong>excluding</strong> the required 0x00 terminator</param>
        /// <param name="value">name to write</param>
        public void SetPaddedUtf8String(int index, int maxLength, string value)
        {
            if (value.Length > maxLength)
            {
                value = value.Substring(0, maxLength);
            }
            byte[] output;
            while (true)
            {
                //var writer = new Text.PNAWriter(value, false, true);
                //output = writer.Data;
                output = NameLoader.SaveName(value);
                if (output.Length <= maxLength)
                {
                    break;
                }
                value = value.Substring(0, value.Length - 1);
            }

            byte[] final = new byte[maxLength + 1]; // ensure padding section is overwritten and required 0x00 terminator exists.
            output.CopyTo(final, 0);

            final.CopyTo(Data, index);
        }
コード例 #4
0
ファイル: MsgService.cs プロジェクト: Deijin27/RanseiLink
 public byte[] SaveName(string name)
 {
     return(NameLoader.SaveName(name));
 }
コード例 #5
0
ファイル: MsgService.cs プロジェクト: Deijin27/RanseiLink
 public string LoadName(byte[] nameData)
 {
     return(NameLoader.LoadName(nameData));
 }