+
This commit is contained in:
@ -81,16 +81,28 @@ namespace DroneSimulator
|
||||
return mem;
|
||||
}
|
||||
|
||||
public struct DataVisual
|
||||
public VisualData.VisualDrone GetVisual(int count, int index)
|
||||
{
|
||||
public int ID; // Идентификатор
|
||||
public float W, X, Y, Z; // Кватернион вращения
|
||||
public float PosX, PosY, PosZ; // Координаты в пространстве
|
||||
}
|
||||
VisualData.VisualDrone drone = new VisualData.VisualDrone();
|
||||
|
||||
public DataVisual GetVisual()
|
||||
{
|
||||
return new DataVisual() { ID = this.ID, W = this.Quat.W, X = this.Quat.X, Y = this.Quat.Y, Z = this.Quat.Z, PosX = this.PosXYZ.X, PosY = this.PosXYZ.Y, PosZ = this.PosXYZ.Z };
|
||||
drone.Head.Size = Marshal.SizeOf(typeof(VisualData.VisualDrone));
|
||||
drone.Head.Type = VisualData.VisualHead.VisualType.Drone;
|
||||
|
||||
drone.Count = count;
|
||||
drone.Index = index;
|
||||
|
||||
drone.ID = ID;
|
||||
drone.Color.A = 255; drone.Color.R = 255; drone.Color.G = 0; drone.Color.B = 0;
|
||||
|
||||
drone.Rotate.X = Quat.X; drone.Rotate.Y = Quat.Y; drone.Rotate.Z = Quat.Z; drone.Rotate.W = Quat.W;
|
||||
drone.Position.X = PosXYZ.X; drone.Position.Y = PosXYZ.Y; drone.Position.Z = PosXYZ.Z;
|
||||
drone.Scale = 1.0f;
|
||||
|
||||
drone.State = VisualData.VisualDrone.DroneState.Active;
|
||||
|
||||
drone.Power = Power;
|
||||
|
||||
return drone;
|
||||
}
|
||||
|
||||
private void ThreadFunction()
|
||||
@ -189,7 +201,7 @@ namespace DroneSimulator
|
||||
|
||||
SpdPRY += AccPRY * (Dynamic * time / (Mass * Length));
|
||||
|
||||
float wind_x = 0, wind_y = 0;
|
||||
float wind_x = 0, wind_y = 0, wind_z = 0;
|
||||
|
||||
if (Area.Wind.Enable)
|
||||
{
|
||||
@ -201,13 +213,15 @@ namespace DroneSimulator
|
||||
|
||||
float spd_x = spd.X - SpdXYZ.X;
|
||||
float spd_y = spd.Y - SpdXYZ.Y;
|
||||
float spd_z = spd.Z - SpdXYZ.Z;
|
||||
|
||||
wind_x = 0.5f * Area.Wind.Density * Area.Wind.Resist * (spd_x * MathF.Abs(spd_x));
|
||||
wind_y = 0.5f * Area.Wind.Density * Area.Wind.Resist * (spd_y * MathF.Abs(spd_y));
|
||||
wind_z = 0.5f * Area.Wind.Density * Area.Wind.Resist * (spd_z * MathF.Abs(spd_z));
|
||||
}
|
||||
|
||||
Quaternion pow = Quaternion.Inverse(Quat) * new Quaternion(0, 0, flow, 0) * Quat;
|
||||
AccXYZ = new Vector3(pow.X + wind_x, pow.Y + wind_y, pow.Z) * (Gravity / Mass);
|
||||
AccXYZ = new Vector3(pow.X + wind_x, pow.Y + wind_y, pow.Z + wind_z) * (Gravity / Mass);
|
||||
SpdXYZ += (AccXYZ + new Vector3(0, 0, -Gravity)) * time;
|
||||
PosXYZ += SpdXYZ * time;
|
||||
|
||||
|
@ -183,9 +183,11 @@ namespace DroneSimulator
|
||||
{
|
||||
NetServerVisual.ReceiveData data = (NetServerVisual.ReceiveData)o;
|
||||
|
||||
int index = 0;
|
||||
|
||||
foreach (Drone d in AllDrones)
|
||||
{
|
||||
Drone.DataVisual v = d.GetVisual();
|
||||
VisualData.VisualDrone v = d.GetVisual(AllDrones.Count, index++);
|
||||
|
||||
try { data.Client.Send(Drone.getBytes(v)); }
|
||||
catch { }
|
||||
|
39
DroneSimulator/VisualData.cs
Normal file
39
DroneSimulator/VisualData.cs
Normal file
@ -0,0 +1,39 @@
|
||||
using System.Numerics;
|
||||
|
||||
namespace VisualData
|
||||
{
|
||||
public struct VisualHead
|
||||
{
|
||||
public enum VisualType : int { None = 0, Drone = 1 } // Тип объекта
|
||||
|
||||
public int Size; // Размер данных этой структуры в байтах (проверка для соответствия передачи структуры)
|
||||
|
||||
public VisualType Type; // Тип передоваемого объекта
|
||||
}
|
||||
|
||||
public struct VisualDrone
|
||||
{
|
||||
public VisualHead Head;
|
||||
public enum DroneState : int { Dead = 0, Disabled = 1, Waiting = 2, Active = 3 } // Переключения типа 3D модели
|
||||
|
||||
public int Count; // Всего дронов на полигоне
|
||||
public int Index; // Номер дрона
|
||||
|
||||
public int ID; // Идентификатор (для привязки камеры)
|
||||
|
||||
public struct ARGB { public byte A, R, G, B; }
|
||||
public struct Quat { public float X, Y, Z, W; }
|
||||
public struct Vect3 { public float X, Y, Z; }
|
||||
|
||||
public ARGB Color; // Цвет корпуса
|
||||
public Quat Rotate; // Кватернион вращения
|
||||
public Vect3 Position; // Координаты в пространстве
|
||||
|
||||
public float Scale; // Масштаб модельки (1=оригинальный)
|
||||
|
||||
public DroneState State; // Тип прорисовываемой модели
|
||||
|
||||
public float Power; // Скорость всех двигателей
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user