You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
9.2 KiB
C#
258 lines
9.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.Events;
|
|
using SiegeSong;
|
|
|
|
namespace SiegeSong
|
|
{
|
|
public class CommandConsole : MonoBehaviour
|
|
{
|
|
public InstanceManager InstanceManager;
|
|
public RuntimeManager RuntimeManager;
|
|
|
|
public GameObject ConsoleWrapper;
|
|
public Text ConsoleText;
|
|
|
|
public string ConsoleInput;
|
|
|
|
public bool CommandConsoleOpen;
|
|
|
|
private int MaxConsoleLines = 10;
|
|
|
|
private string UpArrowKey = "up";
|
|
private string EnterKey = "return";
|
|
private string BackspaceKey = "backspace";
|
|
private string SpaceKey = "space";
|
|
|
|
private string consoleViableKeys = "abcdefghijklmnopqrstuvwxyz.0987654321";
|
|
private string subWordDelimiter = ".";
|
|
private string wordDelimiter = " ";
|
|
|
|
private bool oldSpaceKeyState;
|
|
|
|
string[] commandWords =
|
|
{
|
|
"kill",
|
|
"drive",
|
|
"resurrect",
|
|
"spawn",
|
|
"respawn",
|
|
"despawn",
|
|
"setplayer",
|
|
"tgm",
|
|
};
|
|
|
|
public string[] consoleLines;
|
|
|
|
void Start()
|
|
{
|
|
consoleLines = new string[MaxConsoleLines];
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (CommandConsoleOpen)
|
|
{
|
|
ConsoleWrapper.active = true;
|
|
for (var i = 0; i < consoleViableKeys.Length; i++)
|
|
if (Input.GetKeyDown(consoleViableKeys[i].ToString()))
|
|
ConsoleInput += consoleViableKeys[i];
|
|
else if (Input.GetKeyDown(SpaceKey) && !oldSpaceKeyState)
|
|
ConsoleInput = ConsoleInput.TrimEnd() + " ";
|
|
|
|
oldSpaceKeyState = Input.GetKeyDown(SpaceKey);
|
|
|
|
if (Input.GetKeyDown(UpArrowKey))
|
|
ConsoleInput = consoleLines[consoleLines.Length - 1];
|
|
|
|
|
|
RaycastHit hit;
|
|
if (Input.GetMouseButtonDown(0))
|
|
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 25) && hit.transform.gameObject.GetComponent<ActorStatistics>() != null)
|
|
ConsoleInput += hit.transform.gameObject.GetComponent<ActorStatistics>().InstanceID;
|
|
|
|
if (Input.GetKeyDown(EnterKey))
|
|
SubmitCurrentInput();
|
|
if (Input.GetKeyDown(BackspaceKey))
|
|
ConsoleInput = ConsoleInput.Substring(0, ConsoleInput.Length - 1);
|
|
|
|
var consoleLinesText = "";
|
|
for (var i = consoleLines.Length - 1; i >= 0; i--)
|
|
if (i < MaxConsoleLines)
|
|
consoleLinesText += $"{consoleLines[i]}\n";
|
|
|
|
ConsoleText.text = $"{ConsoleInput}\n{consoleLinesText}";
|
|
}
|
|
else
|
|
{
|
|
ConsoleWrapper.active = false;
|
|
}
|
|
}
|
|
|
|
|
|
void SubmitCurrentInput()
|
|
{
|
|
var targetInstanceId = "";
|
|
var targeted = false;
|
|
var validCommand = false;
|
|
|
|
if (ConsoleInput.IndexOf(subWordDelimiter) != -1 && (ConsoleInput.IndexOf(subWordDelimiter) < ConsoleInput.IndexOf(wordDelimiter) || ConsoleInput.IndexOf(wordDelimiter) == -1))
|
|
{
|
|
targetInstanceId = ConsoleInput.Split(wordDelimiter)[0].Split(subWordDelimiter)[0];
|
|
targeted = true;
|
|
}
|
|
var words = ConsoleInput.Split(wordDelimiter);
|
|
var instanceCount = 1;
|
|
var commandWord = targeted ? words[0].Substring(words[0].IndexOf(".") + 1) : words[0];
|
|
if (words.Length > 1)
|
|
{
|
|
if (!targeted)
|
|
{
|
|
targetInstanceId = words[1].ToLower();
|
|
if (words.Length == 3 && int.TryParse(words[2], out instanceCount))
|
|
instanceCount = int.Parse(words[2]);
|
|
}
|
|
else
|
|
{
|
|
if (words.Length == 2 && int.TryParse(words[1], out instanceCount))
|
|
instanceCount = int.Parse(words[1]);
|
|
}
|
|
}
|
|
var parameter = "";
|
|
if (words.Length == 2)
|
|
parameter = words[1];
|
|
else if (words.Length == 3)
|
|
parameter = words[2];
|
|
|
|
foreach (var command in commandWords)
|
|
{
|
|
if (commandWord.ToLower() == command)
|
|
{
|
|
switch (commandWord)
|
|
{
|
|
case "kill":
|
|
KillActor(targetInstanceId);
|
|
break;
|
|
case "resurrect":
|
|
RessurrectActor(targetInstanceId);
|
|
break;
|
|
case "spawn":
|
|
SpawnActor(targetInstanceId, instanceCount);
|
|
break;
|
|
case "despawn":
|
|
DespawnActor(targetInstanceId);
|
|
break;
|
|
case "respawn":
|
|
RespawnActor(targetInstanceId);
|
|
break;
|
|
case "setplayer":
|
|
SetActorToPlayer(targetInstanceId);
|
|
break;
|
|
case "drive":
|
|
DriveMotor(targetInstanceId, parameter);
|
|
break;
|
|
case "tgm":
|
|
ToggleActorGodMode(targetInstanceId);
|
|
break;
|
|
}
|
|
validCommand = true;
|
|
}
|
|
}
|
|
|
|
var newConsoleLines = new string[MaxConsoleLines];
|
|
|
|
for (var i = 0; i < MaxConsoleLines - 1; i++)
|
|
newConsoleLines[i] = consoleLines[i + 1];
|
|
|
|
newConsoleLines[MaxConsoleLines - 1] = validCommand ? ConsoleInput : $"ERROR - '{commandWord}' IS NOT A VALID COMMAND - ( {ConsoleInput} )";
|
|
|
|
ConsoleInput = "";
|
|
consoleLines = newConsoleLines;
|
|
}
|
|
|
|
void KillActor(string instaceID)
|
|
{
|
|
var actorStats = InstanceManager.GetInstanceByID(instaceID).GetComponent<ActorStatistics>();
|
|
actorStats.Alive = false;
|
|
actorStats.Health = 0;
|
|
}
|
|
|
|
void RessurrectActor(string instaceID)
|
|
{
|
|
var actorStats = InstanceManager.GetInstanceByID(instaceID).GetComponent<ActorStatistics>();
|
|
actorStats.Alive = true;
|
|
actorStats.Health = 1;
|
|
}
|
|
|
|
void SpawnActor(string instaceID, int? instanceCount = 1)
|
|
{
|
|
var actorStats = InstanceManager.GetInstanceByID(instaceID).GetComponent<ActorStatistics>();
|
|
for(var i = 0; i < instanceCount; i++)
|
|
actorStats.ActorLoader.LoadActor();
|
|
}
|
|
|
|
void RespawnActor(string instaceID)
|
|
{
|
|
var actorStats = InstanceManager.GetInstanceByID(instaceID).GetComponent<ActorStatistics>();
|
|
actorStats.ActorLoader.LoadActor(true);
|
|
}
|
|
|
|
void DespawnActor(string instaceID)
|
|
{
|
|
var actorStats = InstanceManager.GetInstanceByID(instaceID).GetComponent<ActorStatistics>();
|
|
GameObject.Destroy(actorStats.gameObject);
|
|
}
|
|
|
|
void SetActorToPlayer(string instaceID)
|
|
{
|
|
var currentPlayerActor = InstanceManager.GetInstanceByID(InstanceManager.CurrentPlayerInstanceID);
|
|
foreach (Transform childtransform in currentPlayerActor.transform)
|
|
{
|
|
if (childtransform.gameObject.name == "PlayerAgent")
|
|
childtransform.gameObject.active = false;
|
|
}
|
|
var actor = InstanceManager.GetInstanceByID(instaceID);
|
|
foreach (Transform childtransform in actor.transform)
|
|
if (childtransform.gameObject.name == "PlayerAgent")
|
|
childtransform.gameObject.active = true;
|
|
RuntimeManager.PlayerInstance = actor;
|
|
}
|
|
|
|
void ToggleActorGodMode(string instaceID)
|
|
{
|
|
var actorStats = InstanceManager.GetInstanceByID(instaceID).GetComponent<ActorStatistics>();
|
|
|
|
}
|
|
|
|
void DriveMotor(string instaceID, string direction)
|
|
{
|
|
var actorMotor = InstanceManager.GetInstanceByID(instaceID).GetComponent<ActorMotor>();
|
|
switch (direction)
|
|
{
|
|
case "forward":
|
|
actorMotor.DriveForward = !actorMotor.DriveForward;
|
|
break;
|
|
case "backward":
|
|
actorMotor.DriveBackward = !actorMotor.DriveBackward;
|
|
break;
|
|
case "left":
|
|
actorMotor.DriveLeft = !actorMotor.DriveLeft;
|
|
break;
|
|
case "rotateleft":
|
|
actorMotor.DriveRotateLeft = !actorMotor.DriveRotateLeft;
|
|
break;
|
|
case "right":
|
|
actorMotor.DriveRight = !actorMotor.DriveRight;
|
|
break;
|
|
case "rotateright":
|
|
actorMotor.DriveRotateRight = !actorMotor.DriveRotateRight;
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|