public void PrintZoneInfo(ZoneStatus zoneStatus, PlayerStatus status, ZoneTypers zoneTypers) { // Print zone info. var zone = Data.Data.GetZone(status.Zone.ZoneId); _output.WriteLine(new string('-', HalfWidth)); _output.WriteLine(zone.Name); _output.WriteLine(); PrintWrapped(zone.Description); _output.WriteLine($"{new string(' ', HalfWidth + SeparatorWidth)}{new string('-', HalfWidth)}"); var exits = zone.ZoneExits .Select(id => Data.Data.GetPassZone(id)) .Select(z => new { PassZoneId = z.PassZoneId, Name = z.ForwardPassage.Name, Description = z.ForwardPassage.Description, Distance = z.ForwardPassage.Distance }); var entrances = zone.ZoneEntrances .Select(id => Data.Data.GetPassZone(id)) .Select(z => new { PassZoneId = z.PassZoneId, Name = z.BackwardPassage.Name, Description = z.BackwardPassage.Description, Distance = z.BackwardPassage.Distance }); var ways = exits.Concat(entrances).OrderBy(z => z.Name); foreach (var way in ways) { var lines = WrapText(way.Description, HalfWidth); var isFirstLine = true; foreach (var line in lines) { if (isFirstLine) { _output.Write($"{line.PadRight(HalfWidth)}{new string(' ', SeparatorWidth)}{way.Name} "); _output.Write(zoneTypers.GetZoneTyper(way.PassZoneId)); _output.WriteLine(); } else { _output.WriteLine(line); } isFirstLine = false; } _output.WriteLine($"{new string(' ', HalfWidth + SeparatorWidth)}{new string('-', HalfWidth)}"); } _output.WriteLine(new string('-', HalfWidth)); _output.WriteLine(); foreach (var neighbor in zoneStatus.Neighbors) { var isInBattle = neighbor.IsInBattle ? "B " : string.Empty; var isDead = neighbor.IsDead ? "D " : string.Empty; _output.WriteLine($"{isDead}{isInBattle}{neighbor.Name}"); } _output.WriteLine(new string('_', Width)); _output.WriteLine(); _output.Write($"Attack "); _output.WriteLine(zoneTypers.AttackTyper); }
public void SetZone(ZoneTypers zoneTypers) { Reset(zoneTypers); ZoneTypers = zoneTypers; }
private void Update() { lock (_lock) { Console.Clear(); if (_status == null) { _printer.PrintLoadingScreen(); return; } _printer.PrintNotifications(_notifications); // Battle priority is higher than alerts. if (_status.BattleStatus != null) { if (_typers.BattleTypers == null) { var battleTypers = new BattleTypers(this, _status.BattleStatus.SkillIds, _status.BattleStatus.BattleNeighbors.Concat(new[] { _status.BattleStatus.Player }).Select(p => p.PlayerId)); _typers.SetBattle(battleTypers); } _printer.PrintBattleStatus(_status.BattleStatus, _typers.BattleTypers); return; } _printer.PrintPlayerStatus(_status.PlayerStatus); if (_typers.AlertTypers == null && _alerts.Any()) { _currentAlert = _alerts.Dequeue(); var alertTypers = new AlertTypers(this); _typers.OpenAlert(alertTypers); } if (_typers.AlertTypers != null) { _printer.PrintAlert(_currentAlert, _typers.AlertTypers); return; } if (_isPlayerSelecting) { var battleEligibleNeighbors = _status.ZoneStatus.Neighbors .Where(n => !n.IsInBattle && !n.IsDead); if (_typers.PlayerSelectionTypers == null) { var playerSelectionTypers = new PlayerSelectionTypers(this, battleEligibleNeighbors.Select(n => n.PlayerId)); _typers.SetPlayerSelection(playerSelectionTypers); } if (_selectedPlayers != null) // Typer is done. { _connection.Send(new StartBattleCommand { ParticipantsExceptMeIds = _selectedPlayers }); _selectedPlayers = null; _isPlayerSelecting = false; return; } _printer.PrintPlayerSelectionStatus(battleEligibleNeighbors, _typers.PlayerSelectionTypers); return; } if (_status.PlayerStatus.PassZone != null) { if (_typers.PassZoneTypers == null) { var passZoneTypers = new PassZoneTypers(this, _status.PlayerStatus.PassZone); _typers.SetPassZone(passZoneTypers); _previousDirection = _status.PlayerStatus.PassZone.Direction; } if (_previousDirection != _status.PlayerStatus.PassZone.Direction) { // Update for new direction and distance. var passZoneTypers = new PassZoneTypers(this, _status.PlayerStatus.PassZone); // Can't flip direction. Need to recreate because need smaller/bigger text for reverse direction. _typers.SetPassZone(passZoneTypers); _previousDirection = _status.PlayerStatus.PassZone.Direction; } _printer.PrintPassingStatus(_status.PassZoneStatus, _status.PlayerStatus.PassZone, _typers.PassZoneTypers); return; } var zone = Data.Data.GetZone(_status.PlayerStatus.Zone.ZoneId); if (_typers.ZoneTypers == null) { var zoneTypers = new ZoneTypers(this, zone.ZoneExits.Concat(zone.ZoneEntrances)); _typers.SetZone(zoneTypers); } _printer.PrintZoneInfo(_status.ZoneStatus, _status.PlayerStatus, _typers.ZoneTypers); } }