public void OnGUI()
    {
        EditorGUILayout.BeginVertical();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Number");
        number = EditorGUILayout.IntField(number);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Activated");
        activated = EditorGUILayout.Toggle(activated);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Parent");
        parent = (SpawnableObjectContainerScript)EditorGUILayout.ObjectField(parent, typeof(SpawnableObjectContainerScript), true);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("GameObject");
        gameobject = (SpawnableObjectScript)EditorGUILayout.ObjectField(gameobject, typeof(SpawnableObjectScript), false);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Local Player script");
        localPlayerScript = (LocalPlayerScript)EditorGUILayout.ObjectField(localPlayerScript, typeof(LocalPlayerScript), true);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Master Controller");
        masterController = (MasterController)EditorGUILayout.ObjectField(masterController, typeof(MasterController), true);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Runner List Script");
        runnerList = (RunnerListScript)EditorGUILayout.ObjectField(runnerList, typeof(RunnerListScript), true);
        EditorGUILayout.EndHorizontal();

        if (GUILayout.Button("Generate multiple object"))
        {
            parent.initializeChildrenList();
            for (int i = 0; i < number; i++)
            {
                var go = (SpawnableObjectScript)PrefabUtility.InstantiatePrefab(gameobject);
                go.setLocalPlayerScript(localPlayerScript);
                go.setMasterController(masterController);
                go.setIndice(i);
                go.setRunnerList(runnerList);
                go.transform.position = new Vector3(0, 0, i);
                go.gameObject.SetActive(activated);
                parent.AddChildren(go);
                Undo.RegisterCreatedObjectUndo(go, "MultipleGO");

            }
        }

        EditorGUILayout.EndVertical();
    }
 public void setSelectedObject(SpawnableObjectScript obj)
 {
     selectedObject = obj;
 }
    // Update is called once per frame
    void Update()
    {
        if (isLocalPlayer)
        {
            if(Input.GetKeyUp(KeyCode.Space))
            {
                changeRunnerFocused();
            }
            if(Input.GetKeyDown(KeyCode.Alpha1))
            {
                masterUI.keyPressed(KeyCode.Alpha1);
            }
            else if (Input.GetKeyDown(KeyCode.Alpha2))
            {
                masterUI.keyPressed(KeyCode.Alpha2);
            }
            else if (Input.GetKeyDown(KeyCode.Alpha3))
            {
                masterUI.keyPressed(KeyCode.Alpha3);
            }
            else if (Input.GetKeyDown(KeyCode.Alpha4))
            {
                masterUI.keyPressed(KeyCode.Alpha4);
            }
            else if (Input.GetKeyDown(KeyCode.Alpha5))
            {
                masterUI.keyPressed(KeyCode.Alpha5);
            }
            else if (Input.GetKeyDown(KeyCode.Tab))
            {
                masterUI.keyPressed(KeyCode.Tab);
            }
            else if (Input.GetKeyDown(KeyCode.Escape))
            {
                masterUI.keyPressed(KeyCode.Escape);
            }
            if (Input.GetAxis("Mouse ScrollWheel") < 0 && effectiveZoom > minZoom) // back
            {
                translationCamera.z = -zoomSpeed;
                effectiveZoom -= zoomSpeed;
                alignementGauche = getAlignGauche();
            }
            else if (Input.GetAxis("Mouse ScrollWheel") > 0 && effectiveZoom < maxZoom) // forward
            {
                translationCamera.z = zoomSpeed;
                effectiveZoom += zoomSpeed;
                alignementGauche = getAlignGauche();
            }
            else
            {
                translationCamera.z = 0;
            }
            translationCamera.x = (runnerView.transform.position.z - masterCamera.transform.position.z) + alignementGauche;
            masterCamera.transform.Translate(translationCamera * zoomSpeed, Space.Self);

            if (objectSelected != null)
            {
                //print("Object selected");
                Vector3 p1 = masterCamera.transform.position;
                Vector3 p2 = masterCamera.ScreenToWorldPoint(Vector3.right*Input.mousePosition.x+ Vector3.up*Input.mousePosition.y+ Vector3.forward*masterCamera.farClipPlane);
                RaycastHit rayInfo;
                if (Physics.Linecast(p1, p2, out rayInfo))
                {
                    if (rayInfo.collider.gameObject == floor.gameObject)
                    {
                        p1.x = Mathf.Round(rayInfo.point.x);
                        p1.y = Mathf.Round(rayInfo.point.y)+.5f;
                        p1.z = Mathf.Round(rayInfo.point.z-.5f) + .5f;
                        objectSelected.UpdatePosition(p1, Vector3.Distance(p1, runnerView.position),runnerController.getLevel().isPositionOccuped(p1,false));
                    }
                    else objectSelected.Hide();
                }
                else objectSelected.Hide();
                if(objectSelected.CanBePosed() && Input.GetMouseButtonUp(0))
                {
                    removeMana(objectSelected.getCout());
                    //print("name =" + rayInfo.collider.gameObject.name);
                    CmdPoseObject(objectSelected.transform.position, runnerId);
                    runnerController.getLevel().setAllObstacleTransparent(false);
                }
                if (Input.GetMouseButtonUp(1))
                {
                    objectSelected.gameObject.SetActive(false);
                    objectSelected = null;
                    runnerController.getLevel().setAllObstacleTransparent(false);
                }
            }
            else if(sortSelected!=null)
            {
                Vector3 p1 = masterCamera.transform.position;
                Vector3 p2 = masterCamera.ScreenToWorldPoint(Vector3.right * Input.mousePosition.x + Vector3.up * Input.mousePosition.y + Vector3.forward * masterCamera.farClipPlane);
                RaycastHit rayInfo;
                if (Physics.Linecast(p1, p2, out rayInfo))
                {
                    if (rayInfo.collider.gameObject == floor.gameObject)
                    {
                        p1.x = Mathf.Round(rayInfo.point.x);
                        p1.y = Mathf.Round(rayInfo.point.y) + .5f;
                        p1.z = Mathf.Round(rayInfo.point.z - .5f) + .5f;
                        sortSelected.getSortVisualScript().gameObject.SetActive(true);
                        sortSelected.getSortVisualScript().setOK(false);
                        sortSelected.getSortVisualScript().updatePosition(p1);

                    }
                    else if(rayInfo.collider.gameObject.CompareTag("RunnerView"))
                    {
                        sortSelected.getSortVisualScript().gameObject.SetActive(true);
                        sortSelected.getSortVisualScript().setOK(true);
                        sortSelected.getSortVisualScript().updatePosition(rayInfo.collider.gameObject.transform.position);
                    }
                    else sortSelected.getSortVisualScript().gameObject.SetActive(false);
                }
                else
                {
                    sortSelected.getSortVisualScript().gameObject.SetActive(false);
                }

                if (sortSelected.getSortVisualScript().CanBeActivate() && Input.GetMouseButtonUp(0))
                {
                    int tmpRunner = runnerListScript.getRunnerIdByView(rayInfo.collider.gameObject);
                    if (tmpRunner != -1 && !sortSelected.affectAlreadyRunner(tmpRunner))
                    {
                        print("lauch sort");
                        removeMana((int)sortSelected.getCout());
                        CmdLauchSort(tmpRunner);
                    }
                    else
                        print("player already affected by this sort");

                }
                else if (Input.GetMouseButtonUp(1))
                {
                    sortSelected.getSortVisualScript().gameObject.SetActive(false);
                    sortSelected = null;
                }
            }
        }
    }
 public void RpcUnselectObject()
 {
     objectSelected = null;
 }
    public void RpcSetSortSelected(int i)
    {
        if (objectSelected != null)
        {
            objectSelected.gameObject.SetActive(false);
            objectSelected = null;
        }
        if (sortSelected != null)
        {
            sortSelected.getSortVisualScript().gameObject.SetActive(false);
        }

        sortSelected = panelSortScript.getSort(i);
    }
 public void RpcSetObjectSelected(int i, int j)
 {
     numContainer = i;
     if (objectSelected != null)
         objectSelected.gameObject.SetActive(false);
     objectSelected = allContainerScript.getContainer(i).GetChildren()[j];
     objectSelected.gameObject.SetActive(true);
     objectSelected.setLocalPlayerScript(localPlayerScript);
     objectSelected.Hide();
 }
 public void RpcPoseObject(Vector3 pos, int runnerInd)
 {
     objectSelected.PoseObject(pos, runnerInd);
     for (int i = 1; i < objectSelected.getNbSpawn(); i++)
     {
         SpawnableObjectScript obj = allContainerScript.getContainer(numContainer).getFirstDisableGO();
         if (obj != null)
         {
             obj.gameObject.SetActive(true);
             obj.setLocalPlayerScript(localPlayerScript);
             obj.UpdatePosition(pos, 0, false);
             obj.PoseObject(pos, runnerInd);
         }
     }
     objectSelected = null;
 }
 public void CmdUnselectObject()
 {
     RpcUnselectObject();
     if (!NetworkClient.active)
     {
         objectSelected = null;
     }
 }
    public void CmdSetSortSelected(int i)
    {
        RpcSetSortSelected(i);
        if (!NetworkClient.active)
        {
            if (objectSelected != null)
            {
                objectSelected.gameObject.SetActive(false);
                objectSelected = null;
            }
            if (sortSelected != null)
            {
                sortSelected.getSortVisualScript().gameObject.SetActive(false);
            }

            sortSelected = panelSortScript.getSort(i);
        }
    }
 public void AddChildren(SpawnableObjectScript go)
 {
     go.transform.parent = this.transform;
     children.Add(go);
 }