169 lines
5.2 KiB
C#
Raw Normal View History

2023-01-29 20:42:03 +00:00
using Comfort.Common;
using EFT;
using EFT.UI;
2023-01-17 19:34:30 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
2023-01-29 20:42:03 +00:00
using UnityEngine;
2023-01-17 19:34:30 +00:00
namespace CWX_DebuggingTool
{
public sealed class BotmonClass : MonoBehaviour, IDisposable
{
private static BotmonClass _instance;
private GUIContent _guiContent;
2023-01-17 19:34:30 +00:00
private GUIStyle _textStyle;
private Player _player;
private Dictionary<string, List<Player>> _zoneAndPlayers = new Dictionary<string, List<Player>>();
private List<BotZone> _zones;
private GameWorld _gameWorld;
2023-01-17 21:08:50 +00:00
private IBotGame _botGame;
private Rect _rect;
2023-01-17 23:08:02 +00:00
private String _content = "";
private Vector2 _guiSize;
private float _distance;
2023-01-17 19:34:30 +00:00
private BotmonClass()
{
}
public int Mode { get; set; }
2023-01-17 19:34:30 +00:00
public static BotmonClass Instance
{
get
{
if (_instance == null)
{
_instance = new BotmonClass();
}
return _instance;
}
}
public void Dispose()
{
var gameWorld = Singleton<GameWorld>.Instance;
var gameobj = gameWorld.GetComponent<BotmonClass>();
Destroy(gameobj);
_instance = null;
GC.SuppressFinalize(this);
}
~BotmonClass()
{
ConsoleScreen.Log("BotMonitor Disabled on game end");
}
public void Awake()
{
// Get GameWorld Instance
2023-01-17 19:34:30 +00:00
_gameWorld = Singleton<GameWorld>.Instance;
// Get BotGame Instance
2023-01-17 21:08:50 +00:00
_botGame = Singleton<IBotGame>.Instance;
// Get Player from GameWorld
_player = _gameWorld.MainPlayer;
// Make new rect to use for GUI
_rect = new Rect(0, 60, 0, 0);
// Get all BotZones
2023-01-17 19:34:30 +00:00
_zones = LocationScene.GetAllObjects<BotZone>().ToList();
// Set up the Dictionary
2023-01-17 21:08:50 +00:00
foreach (var botZone in _zones)
2023-01-17 19:34:30 +00:00
{
2023-01-17 21:08:50 +00:00
_zoneAndPlayers.Add(botZone.name, new List<Player>());
2023-01-17 19:34:30 +00:00
}
// Add existing Bots to list
2023-01-17 19:34:30 +00:00
if (_gameWorld.AllPlayers.Count > 1)
{
foreach (var player in _gameWorld.AllPlayers)
{
if (!player.IsYourPlayer)
{
2023-01-17 21:08:50 +00:00
var theirZone = player.AIData.BotOwner.BotsGroup.BotZone.NameZone;
2023-01-17 19:34:30 +00:00
2023-01-17 21:08:50 +00:00
_zoneAndPlayers[theirZone].Add(player);
2023-01-17 19:34:30 +00:00
}
}
}
2023-01-17 21:08:50 +00:00
// Sub to Event to get and add Bot when they spawn
2023-01-17 21:08:50 +00:00
_botGame.BotsController.BotSpawner.OnBotCreated += owner =>
{
Player player = owner.GetPlayer;
var theirZone = player.AIData.BotOwner.BotsGroup.BotZone.NameZone;
_zoneAndPlayers[theirZone].Add(player);
};
2023-01-17 19:34:30 +00:00
}
public void OnGUI()
{
// set basics on GUI
if (_textStyle == null)
{
_textStyle = new GUIStyle(GUI.skin.box);
_textStyle.alignment = TextAnchor.MiddleLeft;
_textStyle.fontSize = 20;
_textStyle.margin = new RectOffset(3, 3, 3, 3);
}
// new GUI Content
if (_guiContent == null)
{
_guiContent = new GUIContent();
}
// If Mode Greater than or equal to 1 show total
if (Mode >= 1)
2023-01-17 19:34:30 +00:00
{
_content = string.Empty;
2023-01-17 23:08:02 +00:00
_content += $"Total = {_gameWorld.AllPlayers.Count - 1}\n";
}
2023-01-17 19:34:30 +00:00
// If Mode Greater than or equal to 2 show total for each zone
if (Mode >= 2)
{
if (_zoneAndPlayers != null)
2023-01-17 19:34:30 +00:00
{
foreach (var zone in _zoneAndPlayers)
2023-01-17 19:34:30 +00:00
{
if (_zoneAndPlayers[zone.Key].FindAll(x => x.HealthController.IsAlive).Count > 0)
2023-01-17 19:55:03 +00:00
{
_content += $"{zone.Key} = {_zoneAndPlayers[zone.Key].FindAll(x => x.HealthController.IsAlive).Count}\n";
// If Mode Greater than or equal to 3 show Bots individually also
if (Mode >= 3)
{
foreach (var player in _zoneAndPlayers[zone.Key].Where(player => player.HealthController.IsAlive))
{
_distance = Vector3.Distance(player.Position, _player.Position);
_content += $"> [{_distance:n2}m] [{player.Profile.Info.Settings.Role}] [{player.Profile.Side}] [{player.Profile.Info.Settings.BotDifficulty}] {player.Profile.Nickname}\n";
}
}
2023-01-17 19:55:03 +00:00
}
2023-01-17 19:34:30 +00:00
}
}
}
2023-01-17 23:08:02 +00:00
_guiContent.text = _content;
2023-01-17 19:34:30 +00:00
2023-01-17 23:08:02 +00:00
_guiSize = _textStyle.CalcSize(_guiContent);
2023-01-17 19:34:30 +00:00
2023-01-17 23:08:02 +00:00
_rect.x = Screen.width - _guiSize.x - 5f;
_rect.width = _guiSize.x;
_rect.height = _guiSize.y;
GUI.Box(_rect, _guiContent, _textStyle);
2023-01-17 19:34:30 +00:00
}
}
}