public static void DrawUnitInfo(Unit unit) { ZIOX.OutputType = ZIOX.OutputTypeEnum.Buffer; ZIOX.BufferName = UIConfig.Buffer_Info; ZBuffer.ClearBuffer(ZIOX.BufferName); var area = UIConfig.UnitStatsArea; var stats = unit.Stats; ZIOX.Draw_Stat(area, 0, "Team", unit.Team.Name); ZIOX.Draw_Stat(area, 1, "Name", unit.Name); ZIOX.Draw_Stat(area, 3, "Health", ZIOX.Draw_State, stats.CurrentHP, stats.MaxHP, true); ZIOX.Draw_Stat(area, 4, "Accuracy", stats.CurrentAccuracy); ZIOX.Draw_Stat(area, 5, "Strength", stats.CurrentStrength); ZIOX.Draw_Stat(area, 7, "Direction", unit.View.DirectionName); ZIOX.Draw_Stat(area, 8, "Crouch", unit.Position.IsSitting.ToString()); ZIOX.Draw_Stat(area, 10, "TU", ZIOX.Draw_State, stats.CurrentTU, stats.MaxTU, true); var activeItem = unit.ActiveItem != null ? string.Format("{0} ({1})", unit.ActiveItem.Type.Name, unit.ActiveItem.Value) : "nothing"; ZIOX.Draw_Stat(area, 12, "In hands", activeItem); DrawInventory(unit.Inventory); ZBuffer.WriteBuffer(UIConfig.Buffer_Info, UIConfig.UnitInfoRect.Left, UIConfig.UnitInfoRect.Top); ZIOX.OutputType = ZIOX.OutputTypeEnum.Direct; DrawUnitPositionInfo(unit); }
public static Team CreateTeam(string teamName, bool isPlayable) { var team = new Team(teamName, isPlayable); for (var i = 0; i < GameConfig.TeamSize; i++) { var freeNames = SoldierConfig.Names.Where(w => !_usedNames.Contains(w)).ToArray(); var name = freeNames[RNG.GetNumber(freeNames.Length)]; _usedNames.Add(name); var unit = new Unit(name) { Stats = new UnitStats { TU = RNG.GetNumber(SoldierConfig.TimeUnitsRange), MaxHP = RNG.GetNumber(SoldierConfig.HitPointsRange), Accuracy = RNG.GetNumber(SoldierConfig.AccuracyRange), Strength = RNG.GetNumber(SoldierConfig.StrengthRange) }, View = ViewLogic.Initialize(GameConfig.DefaultViewWidth, GameConfig.DefaultViewDistance, RNG.GetNumber(8)), Inventory = new Inventory(ItemConfig.DefaultInventories[i].Select(w => new Item(w))) }; unit.Stats.CurrentHP = unit.Stats.MaxHP; unit.Inventory.ActiveItem = unit.Inventory.FirstOrDefault(); team.Add(unit); } return team; }
private static void DrawTargetMark(Unit currentUnit, Coord target, bool toShow) { if (toShow) { ZBuffer.ReadBuffer("targetBuffer", target.X, target.Y, 3, 3); var buffer = ZBuffer.BackupBuffer("defaultBuffer"); ZIOX.OutputType = ZIOX.OutputTypeEnum.Buffer; ZIOX.BufferName = "defaultBuffer"; var targetColor = IsTargetOnSoldier(currentUnit, target) ? Color.Yellow : Color.Cyan; ZIOX.Print(target.X-1, target.Y-1, (char)Tools.Get_Ascii_Byte('┌'), targetColor); ZIOX.Print(target.X+1, target.Y-1, (char)Tools.Get_Ascii_Byte('┐'), targetColor); ZIOX.Print(target.X-1, target.Y+1, (char)Tools.Get_Ascii_Byte('└'), targetColor); ZIOX.Print(target.X+1, target.Y+1, (char)Tools.Get_Ascii_Byte('┘'), targetColor); MapRender.DrawVisibleUnits(currentUnit); ZIOX.OutputType = ZIOX.OutputTypeEnum.Direct; ZBuffer.WriteBuffer("defaultBuffer", UIConfig.GameAreaRect.Left, UIConfig.GameAreaRect.Top); ZBuffer.SaveBuffer("defaultBuffer", buffer); } else { ZBuffer.WriteBuffer("targetBuffer", target.X, target.Y); } }
public static Coord DoTargetAction(Unit unit) { var exitFlag = false; var target = new Coord(unit.Position.X, unit.Position.Y); DrawTargetMark(unit, target, true); while (!exitFlag) { var key = ZInput.ReadKey(); var oldTarget = new Coord(target.X, target.Y); switch (key) { case ConsoleKey.LeftArrow : MoveTarget(target, -1, 0); break; case ConsoleKey.RightArrow : MoveTarget(target, +1, 0); break; case ConsoleKey.UpArrow : MoveTarget(target, 0, -1); break; case ConsoleKey.DownArrow : MoveTarget(target, 0, +1); break; case ConsoleKey.Enter : return target; break; case ConsoleKey.Escape : exitFlag = true; break; } if (!oldTarget.Equals(target)) { DrawTargetMark(unit, oldTarget, false); DrawTargetMark(unit, target, true); } } return null; }
public static bool IsTargetOnSoldier(Unit currentUnit, Coord target) { foreach (var team in MainGame.Teams) foreach (var unit in team.Units.Where(a => a.Name != currentUnit.Name)) if (target.Equals(unit.Position)) return true; return false; }
public static void DrawVisibleUnits(Unit unit) { foreach (var team in MainGame.Teams) foreach (var target in team.Units.Where(a => a.Name != unit.Name)) if ((unit.Team.Name == target.Team.Name && unit.Position.LevelId == target.Position.LevelId) || unit.View.IsUnitVisible(unit.CurrentLevel, unit.Position, target.Position) == Visibility.Full) { ZIOX.Print(target.Position.X, target.Position.Y, "@", (team.Name == unit.Team.Name) ? Color.Magenta : Color.Red); } }
private static Models.Unit RemoveReference(this Models.Unit item) { var obj = new Models.Unit(); if (item != null) { obj.Id = item.Id; obj.IsActive = item.IsActive; obj.Name = item.Name; } return(obj); }
public static void DrawVisibleTerrain(Unit unit) { var sizeX = MapConfig.LevelSize.Width; var sizeY = MapConfig.LevelSize.Height; var level = unit.CurrentLevel; var map = level.Map; var viewMap1 = new Visibility[sizeY, sizeX]; var viewMap2 = new Visibility[sizeY, sizeX]; for (var y = 0; y < sizeY; y++) for (var x = 0; x < sizeX; x++) viewMap1[y, x] = unit.View.IsPointVisible(level, unit.Position, new Coord(x, y)); for (var y = 0; y < sizeY; y++) for (var x = 0; x < sizeX; x++) { var tile = map[y, x].Type; if (tile.Size != ObjectSize.FullTile) continue; for (var i = -1; i <= 1; i++) for (var j = -1; j <= 1; j++) { var x1 = x + j; var y1 = y + i; if (y1 >= 0 && y1 < sizeY && x1 >= 0 && x1 < sizeX && viewMap1[y1, x1] != Visibility.None && map[y1, x1].Type.Height == ObjectHeight.None) { viewMap2[y, x] = Visibility.Full; break; } } } for (var y = 0; y < sizeY; y++) for (var x = 0; x < sizeX; x++) if (viewMap1[y, x] == Visibility.Full || viewMap2[y, x] == Visibility.Full) { var tile = map[y, x].Type; ZIOX.Print(x, y, tile.Character, tile.ForeColor, tile.BackColor); } else if (viewMap1[y, x] == Visibility.Shadow || viewMap2[y, x] == Visibility.Shadow) { ZIOX.Print(x, y, (char)176, Color.DarkGray); } else { ZIOX.Print(x, y, ' ', Color.Black); } }
public static void DrawUnitInfoAsTarget(Unit unit) { ZIOX.OutputType = ZIOX.OutputTypeEnum.Buffer; ZIOX.BufferName = UIConfig.Buffer_TargetInfo; var area = UIConfig.UnitStatsArea; var stats = unit.Stats; ZIOX.Draw_Stat(area, 0, "Name", unit.Name); ZIOX.Draw_Stat(area, 1, "Health", ZIOX.Draw_State, stats.CurrentHP, stats.MaxHP, true); ZIOX.Draw_Stat(area, 2, "TU", ZIOX.Draw_State, stats.CurrentTU, stats.MaxTU, true); ZIOX.Draw_Stat(area, 3, "Crouch", unit.Position.IsSitting.ToString()); ZIOX.Draw_Stat(area, 5, "Direction", unit.View.DirectionName); ZIOX.Draw_Stat(area, 7, "In hands", unit.ActiveItem.Type.Name); ZBuffer.WriteBuffer(UIConfig.Buffer_TargetInfo, UIConfig.TargetInfoRect.Left, UIConfig.TargetInfoRect.Top); ZIOX.OutputType = ZIOX.OutputTypeEnum.Direct; }
public static void DrawUnitPositionInfo(Unit unit) { var position = unit.Position; var rect = UIConfig.PositionInfoRect; ZOutput.PrintBB(rect.Left + 1, rect.Top+1, string.Format("Level:<{0}> Position:<{1}>,<{2}>", position.LevelId, position.X, position.Y), Color.Magenta); }
public double ToBaseUnitAmount(Unit unit) { return unit.Quantity * databaseAccessor.GetBaseUnitRatioFromUnitName(unit.Name); }
public void SetUp() { mockedUnit = Mock.Create<Unit>(); mockedDatabaseAccessor = Mock.Create<IDatabaseAccessor>(); }