-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
NitroxConsole.cs
83 lines (70 loc) · 2.51 KB
/
NitroxConsole.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System;
using NitroxClient.Communication.Abstract;
using NitroxClient.MonoBehaviours;
using NitroxModel.DataStructures;
using NitroxModel.DataStructures.GameLogic.Entities;
using NitroxModel.Packets;
using NitroxModel_Subnautica.Helper;
using UnityEngine;
namespace NitroxClient.GameLogic
{
public class NitroxConsole
{
public static bool DisableConsole { get; set; } = true;
private readonly IPacketSender packetSender;
private readonly Items items;
public NitroxConsole(IPacketSender packetSender, Items items)
{
this.packetSender = packetSender;
this.items = items;
}
//List of things that can be spawned : https://subnauticacommands.com/items
public void Spawn(GameObject gameObject)
{
TechType techType = GetObjectTechType(gameObject);
try
{
if (VehicleHelper.IsVehicle(techType))
{
SpawnVehicle(gameObject, techType);
}
else
{
DefaultSpawn(gameObject);
}
}
catch (Exception ex)
{
Log.Error(ex, $"Error while trying to spawn {techType} from devconsole");
}
}
/// <summary>
/// Spawns Seamoth, Exosuit or Cyclops
/// </summary>
private void SpawnVehicle(GameObject gameObject, TechType techType)
{
NitroxId id = NitroxEntity.GetIdOrGenerateNew(gameObject);
VehicleWorldEntity vehicleEntity = Vehicles.BuildVehicleWorldEntity(gameObject, id, techType);
packetSender.Send(new EntitySpawnedByClient(vehicleEntity));
Log.Debug($"Spawning vehicle {techType} with id {id} at {gameObject.transform.position}");
}
private void DefaultSpawn(GameObject gameObject)
{
items.Dropped(gameObject);
}
private static TechType GetObjectTechType(GameObject gameObject)
{
TechType techType = CraftData.GetTechType(gameObject);
if (techType != TechType.None)
{
return techType;
}
// Cyclops' GameObject doesn't have a way to give its a TechType so we detect it differently
if (gameObject.TryGetComponent(out SubRoot subRoot) && subRoot.isCyclops)
{
return TechType.Cyclops;
}
return TechType.None;
}
}
}