public void ProcessUpdateEntities(Entity_Model[] updated_entities)
 {
     SmartObject obj = new SmartObject();
     SmartObject updates = new SmartObject();
     for(int i = 0; i < updated_entities.Length; i++) {
         updates.AddEntity("Entity_" + i, updated_entities[i]);
     }
     updates.AddInt("length", updated_entities.Length);
     obj.AddSmartObject("Updates", updates);
     Networking.WriteCustom(EventHelper.GetEventId("PROCESS_ENTITES"), socket, EasySerialization.EasySerialize(obj), true, NetworkReceivers.All);
 }
 public static bool Attempt_Rotate_Entity(Entity entity, Vector3 target)
 {
     if(Network_Command_Manager.instance.socket.IsServer) {
         LocalRotateEntity(entity, target);
         return true;
     } else {
         SmartObject obj = new SmartObject();
         obj.AddString("type", "ROTATE_ENTITY");
         obj.AddEntity("Entity", entity.entity_model);
         obj.AddVec3("Target", target);
         Network_Command_Manager.instance.ToNetController<Client_Controller>().SendRequest(obj);
         return false;
     }
 }
    public override void Setup(ref NetWorker socket)
    {
        base.Setup(ref socket);
        socket.AddCustomDataReadEvent(EventHelper.GetEventId("SERVER_REQUEST"), ReadRequest);
        //		socket.AddCustomDataReadEvent ("COMBAT_REGISTER", ReadCombatRegister);

        SmartObject obj = new SmartObject();
        SmartObject add = new SmartObject();
        Client_Model[] players = Turn_Controller.instance.server_players.players.ToArray();
        int entity_count = 0;
        for(int i = 0; i < players.Length; i++) {
            Entity_Model_Army army = Entity_Model_Army.GenerateRandomArmy(ref players[i], 2);
            for(int i2 = 0; i2 < army.entity_army.Length; i2++) {
                add.AddEntity("Entity_" + entity_count, army.entity_army[i2]);
                entity_count++;
            }
        }
        Debug_Console.i.add("Host controller setup");
        add.AddInt("length", entity_count);
        obj.AddSmartObject("Additions", add);
        BMSByte bms_byte = EasySerialization.EasySerialize(obj);
        StartCoroutine("Delayed", bms_byte);
    }
    //    public static void Rotate_Entity(Entity entity, Vector3 target){
    //        target = target - entity.transform.position;
    //        target = new Vector3 (target.x, 0, target.z);
    //        Quaternion look_rotation = Quaternion.LookRotation (target);
    //        entity.transform.rotation = look_rotation;
    //    }
    public static void Attempt_Move_Entity(Entity entity, Vector3 target, System.Action<Entity_Model> action = null)
    {
        if(Network_Command_Manager.instance.socket.IsServer) {
            Seeker seeker = entity.GetComponent<Seeker>();
            seeker.StartPath(seeker.transform.position, target, delegate (Path path) {
                Vector3[] vecp = path.vectorPath.ToArray();
                if(vecp.Length > 1) {
                    Quaternion rotation;
                    Vector3 destination;
                    float moved;
                    PathFindAlong(entity.entity_model.stats.movement, vecp, out moved, out rotation, out destination);
                    entity.entity_model.stats.movement -= moved;
                    if(entity.entity_model.stats.movement < 0.1f)
                        entity.entity_model.stats.movement = 0;
                    if(moved <= 0)
                        return;
                    entity.transform.rotation = rotation;
                    entity.transform.position = destination;

                    entity.entity_model.pos = new Vector3_Serial(entity.transform.position);
                    entity.transform.rotation = Quaternion.Euler(new Vector3(0, entity.transform.rotation.eulerAngles.y, 0));

                    entity.entity_model.rot = new Vector3_Serial(entity.transform.rotation.eulerAngles);

                    action(entity.entity_model);
                }
            });
        } else {
            SmartObject obj = new SmartObject();
            obj.AddString("type", "MOVE_ENTITY");
            Debug.Log("sending move request");
            Debug.Log(target);
            obj.AddEntity("Entity", entity.entity_model);
            obj.AddVec3("Target", target);
            Network_Command_Manager.instance.ToNetController<Client_Controller>().SendRequest(obj);
        }
    }