-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTools.cs
155 lines (124 loc) · 4.39 KB
/
Tools.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
using Sandbox.ModAPI;
using System;
using System.Collections.Generic;
using System.Globalization;
using VRage.Game.ModAPI;
using VRage.ModAPI;
using VRageMath;
namespace ActivityCollectorPlugin
{
public class Tools
{
public static ulong GetPlayerSteamId(IMyCharacter character)
{
IMyPlayer player = MyAPIGateway.Players.GetPlayerControllingEntity(character);
if (player == null)
{
player = MyAPIGateway.Players.GetPlayerControllingEntity(character.Parent);
}
return player != null ? player.SteamUserId : ulong.MinValue;
}
public static long GetPlayerIdentityId(IMyCharacter character)
{
IMyPlayer player = MyAPIGateway.Players.GetPlayerControllingEntity(character);
if (player == null)
{
player = MyAPIGateway.Players.GetPlayerControllingEntity(character.Parent);
}
return player != null ? player.IdentityId : 0;
}
public static IMyPlayer GetPlayer(IMyCharacter character)
{
IMyPlayer player = MyAPIGateway.Players.GetPlayerControllingEntity(character);
if (player == null)
{
player = MyAPIGateway.Players.GetPlayerControllingEntity(character.Parent);
}
return player;
}
public static IMyCharacter[] GetGridPilots(IMyCubeGrid grid)
{
List<IMyCharacter> pilots = new List<IMyCharacter>();
List<IMySlimBlock> controls = new List<IMySlimBlock>();
grid.GetBlocks(controls, x => x.FatBlock is IMyShipController);
foreach (IMySlimBlock control in controls)
{
if (((IMyShipController)control.FatBlock).Pilot != null)
{
pilots.Add(((IMyShipController)control.FatBlock).Pilot);
}
}
return pilots.ToArray();
}
public static IMyEntity RaycastEntity(Vector3D start, Vector3D end)
{
IHitInfo hit;
if (!MyAPIGateway.Physics.CastRay(start, end, out hit))
return null;
if (!(hit.HitEntity is IMyCubeGrid))
return null;
var grid = (IMyCubeGrid)hit.HitEntity;
Vector3I? hitPos = grid.RayCastBlocks(start, end);
if (hitPos.HasValue)
{
IMySlimBlock block = grid.GetCubeBlock(hitPos.Value);
return block?.FatBlock as IMyTerminalBlock;
}
return grid;
}
public static DateTime DateTime => DateTime.UtcNow;
public static string DateTimeFormated => DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
public static string format(DateTime date)
{
return date.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
}
//public static string getBlockId(int x, int y, int z)
//{
// return $"{x}|{y}|{z}";
//}
public static string GetBlockId(Vector3I pos)
{
return format(pos);
}
public static string PrepString(string data)
{
return data.Replace("'", "''");
}
//public static float Round(float value)
//{
// return (float)Math.Round(value, 3);
//}
public static double Round(double value)
{
return Math.Round(value, 4);
}
public static Vector3 Round(Vector3 v)
{
return new Vector3(Round(v.X), Round(v.Y), Round(v.Z));
}
public static Vector3D Round(Vector3D v)
{
return new Vector3D(Round(v.X), Round(v.Y), Round(v.Z));
}
public static string format(Vector3 v)
{
return format(v.X, v.Y, v.Z);
}
//public static string formatNoRounding(Vector3 v)
//{
// return $"{v.X}:{v.Y}:{v.Z}";
//}
public static string format(Vector3D v)
{
return format(v.X, v.Y, v.Z);
}
public static string format(Vector3I v)
{
return format(v.X, v.Y, v.Z);//$"{v.X}:{v.Y}:{v.Z}";
}
public static string format(double x, double y, double z)
{
return $"{Round(x)}:{Round(y)}:{Round(z)}"; //$"{x}:{y}:{z}";
}
}
}