using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
///
/// Коробка
///
public class Wall
{
public uint id = 0;
public uint location_id {get;set;}
public float start_width { get; set; }
public float start_height { get; set; }
public float end_width { get; set; }
public float end_height { get; set; }
public GameObject go;
public void Save()
{
List list = new List();
list.AddRange(BitConverter.GetBytes(id));
list.AddRange(BitConverter.GetBytes(start_width));
list.AddRange(BitConverter.GetBytes(start_height));
list.AddRange(BitConverter.GetBytes(end_width));
list.AddRange(BitConverter.GetBytes(end_height));
list.AddRange(BitConverter.GetBytes(location_id));
Debug.Log($"wall save id {id} x {start_width} z {start_height} x2 {end_width} z2 {end_height} location_id {location_id}");
var tosend = Client.ConstructVariablePacket(50, list.ToArray());
Client.SendEnqueue(tosend);
}
public static void SaveAll(uint lid)
{
Debug.Log("WallObjects count " + WallCreate.Walls.Count);
if (WallCreate.Walls.Count > 0)
{
List list = new List();
foreach (var w in WallCreate.Walls[lid])
{
list.AddRange(BitConverter.GetBytes(w.id));
list.AddRange(BitConverter.GetBytes(w.start_width));
list.AddRange(BitConverter.GetBytes(w.start_height));
list.AddRange(BitConverter.GetBytes(w.end_width));
list.AddRange(BitConverter.GetBytes(w.end_height));
Debug.Log($"wall save id {w.id} x {w.start_width} z {w.start_height} x2 {w.end_width} z2 {w.end_height}");
}
var tosend = Client.ConstructVariablePacket(50, list.ToArray());
Client.SendEnqueue(tosend);
}
}
public static void ReceiveWalls(byte[] bytedata)
{
int read = 5;
var company = CompanyController.instance;
uint location_id = 0;
while (read < bytedata.Length)
{
var id = BitConverter.ToUInt32(bytedata, read);
var x1 = BitConverter.ToSingle(bytedata, read + 4);
var z1 = BitConverter.ToSingle(bytedata, read + 8);
var x2 = BitConverter.ToSingle(bytedata, read + 12);
var z2 = BitConverter.ToSingle(bytedata, read + 16);
var lid = BitConverter.ToUInt32(bytedata, read + 20);
Debug.Log($"wall received id {id} x1 {x1} z1 {z1} x2 {x2} z2 {z2}");
read += 24;
company.locations[lid].walls.Add(new Wall { id = id, location_id = lid, start_width = x1, start_height = z1, end_width = x2, end_height= z2 });
location_id = lid;
}
if (location_id != 0)
company.load_location_elements[location_id].walls = true;
}
public static void LoadByLocationId(uint locId)
{
CompanyController.instance.locations[locId].walls = new List();
Client.SendFourByteParamPacket(51, locId);
}
///
/// Перевод позиции и масштаба в координаты левой нижней (x1;z1) и правой верхней (x2;z2) точек
///
///
public List Coordinates()
{
var coord = new List();
//var wall = WallCreate.AddWall(this,
// new Vector3(w.start_width, WallCreate.WallHeight / 2, w.start_height),
// new Vector3(Mathf.Abs(w.end_width), WallCreate.WallHeight, Mathf.Abs(w.end_height)));
coord.Add(end_width - (start_width/2));
coord.Add(end_height - (start_height / 2));
coord.Add(end_width + (start_width/2));
coord.Add(end_height + (start_height / 2));
return coord;
}
///
/// Перевод координат левой нижней (x1;z1) и правой верхней (x2;z2) точек
/// в позицию и масштаба для Vector3
///
///
///
///
///
///
public List Coordinates(float x1, float z1, float x2, float z2)
{
var coord = new List();
// scale
var x = Math.Abs(x2 - x1);
var z = Math.Abs(z2 - z1);
coord.Add(x);
coord.Add(z);
// pos
coord.Add(x/2);
coord.Add(z/2);
return coord;
}
public List Coordinates(Vector3 pos, Vector3 scale)
{
var coord = new List();
//var wall = WallCreate.AddWall(this,
// new Vector3(w.start_width, WallCreate.WallHeight / 2, w.start_height),
// new Vector3(Mathf.Abs(w.end_width), WallCreate.WallHeight, Mathf.Abs(w.end_height)));
coord.Add(scale.x - (pos.x / 2));
coord.Add(scale.z - (pos.z / 2));
coord.Add(scale.x + (pos.x / 2));
coord.Add(scale.z + (pos.z / 2));
return coord;
}
}