/// <summary> /// Обновляет информацию о последних действиях получения энергии формы жизни /// </summary> /// <param name="worldMetadata"></param> public void Update(WorldMetadata worldMetadata) { _energy = worldMetadata[_lifeFormId]["EnergyState"].Value; if (_lastEnergyReactions.Count >= 10) { _lastEnergyReactions.Dequeue(); } switch (worldMetadata[_lifeFormId]["GenorypeState"]["Action"]) { case "Extraction": _lastEnergyReactions.Enqueue("Extraction"); break; case "Photosynthesis": _lastEnergyReactions.Enqueue("Photosynthesis"); break; case "Meat": // Имя придумано,позже необходимо привести в соответсвие с текстом команды _lastEnergyReactions.Enqueue("Meat"); break; default: break; } SetRGB(); }
private static void LoadWorld() { _quit = false; _steps = 0; _speed = 1; _world = new World(WorldMetadata.Load(_worldPath)); _worldRenderer = new WorldRenderer(_renderer, _world); }
private static void MakeDefaultWorld() { var world = new WorldMetadata { W = 640, H = 480, Colors = new ColorMetadata[] { new ColorMetadata { Id = 0, RGBACode = "#000000ff" }, new ColorMetadata { Id = 1, RGBACode = "#ffffffff" }, new ColorMetadata { Id = 2, RGBACode = "#ff0000ff" }, new ColorMetadata { Id = 3, RGBACode = "#00ff00ff" }, new ColorMetadata { Id = 4, RGBACode = "#0000ffff" }, new ColorMetadata { Id = 5, RGBACode = "#ffff00ff" }, new ColorMetadata { Id = 6, RGBACode = "#00ffffff" }, new ColorMetadata { Id = 7, RGBACode = "#ff00ffff" }, new ColorMetadata { Id = 8, RGBACode = "#fff000ff" }, new ColorMetadata { Id = 9, RGBACode = "#000fffff" } }, Turmites = new TurmiteMetadata[] { new TurmiteMetadata { X = 320, Y = 240, Direction = Turmite.TOP, StateId = 0, Name = "langton" } } }; WorldMetadata.Save(Path.Combine( Resources.BasePath, "resources/worlds/default.xml"), world); }
/// <summary> /// Вызывает обновление интенсивности в зависимости от текущего сезона /// </summary> /// <param name="worldMetadata">Метаданные мира. В окружающей среде должен быть феномен времен года.</param> public void Update(WorldMetadata worldMetadata) { log.Trace(LogPhenomenMessages.PhenomenUpdate, "SunPhenomen"); if (!worldMetadata.EnvironmentMetadata.ContainsKey("SeasonsPhenomen")) { ArgumentException ex = new ArgumentException("world metadata isn't contains SeasonPhenomen metadata", nameof(worldMetadata)); log.Error(LogPhenomenMessages.BadInputMetadata, "SeasonsPhenomen"); throw ex; } if (!worldMetadata.EnvironmentMetadata["SeasonsPhenomen"].ContainsParameter("season")) { ArgumentException ex = new ArgumentException("SeasonsPhenomen metadata isn't contains the parameter named \"season\""); log.Error(LogPhenomenMessages.BadInputMetadata, "SeasonsPhenomen"); throw ex; } Season season = (Season)(int.Parse(worldMetadata.EnvironmentMetadata["SeasonsPhenomen"]["season"])); log.Info(LogPhenomenMessages.CurrentSeason, season.ToString()); switch (season) { case Season.Autumn: case Season.Spring: { _powerFactor = NormalPowerFactor; } break; case Season.Summer: { _powerFactor = HightPowerFactor; } break; case Season.Winter: { _powerFactor = LowPowerFactor; } break; default: { Exception ex = new Exception("Impossible"); log.Error("Сезоны отвалились,текущий сезон равен: " + season.ToString() + " " + ex); throw ex; } } }
/// <summary> /// Вызывает обновление цветов форм жизни /// </summary> /// <param name="metadata"></param> public void Update(WorldMetadata metadata) { if (map == null) { map = new Bitmap(metadata.EnvironmentMetadata.Size.Width, metadata.EnvironmentMetadata.Size.Height); form = new MainForm(); form.Show(); } foreach (var pair in metadata) { byte[] bytes = pair.Value["ColorState"]["Color"].Split(' ').Select(x => byte.Parse(x)).ToArray(); byte R = bytes[0]; byte G = bytes[1]; byte B = bytes[2]; Color color = Color.FromArgb(R, G, B); map.SetPixel(pair.Value.Place.Points[0].X, pair.Value.Place.Points[0].Y, color); } form.mapPicture.Image = GetMap(); }
public void Update(WorldMetadata metadata) { throw new NotImplementedException(); }
/// <summary> /// Вызывает обновление этого природного явления на основании /// метаданных окружающей среды. /// </summary> /// <param name="worldMetadata">Метаданные окружающей среды.</param> public void Update(WorldMetadata worldMetadata) { log.Trace(LogPhenomenMessages.PhenomenUpdate, "SeasonsPhenomen"); _step = worldMetadata.Age; ChangeSeason(); }
/// <summary> /// Обновляет действия бота в соответствии с геномом /// </summary> /// <param name="metadata"></param> public void Update(WorldMetadata metadata) { if (metadata[id]["EnergyState"]["EnergyState"] == "ForsedReproduction") { action = Actions.ForsedReproduction; NextStep(); } else { switch (genom[YTK]) { case 1: action = Actions.CheckEnergy; NextStep(); direction = (Directions)((genom[YTK] / 8) + 1); NextStep(); Update(metadata); break; case 2: action = Actions.Photosynthesis; NextStep(); break; case 3: action = Actions.Move; NextStep(); direction = (Directions)((genom[YTK] / 8) + 1); NextStep(); break; case 4: action = Actions.Eat; NextStep(); direction = (Directions)((genom[YTK] / 8) + 1); NextStep(); break; case 5: if (metadata[id]["EnergyState"]["EnergyState"] == "CanReproduce") { action = Actions.DoDescendant; NextStep(); direction = (Directions)((genom[YTK] / 8) + 1); NextStep(); } else { action = Actions.None; direction = Directions.None; NextStep(); Update(metadata); } break; default: try { YTK = Convert.ToByte(YTK + genom[YTK] - 1); } catch (Exception e) { throw new ArgumentException("Недопустимое значение YTK", (YTK + genom[YTK] - 1).ToString(), e); } NextStep(); action = Actions.None; direction = Directions.None; NextStep(); Update(metadata); break; } } }