public void DestoryController(object sender, EventArgs e)
    {
        OnDeleteReferences(this, EventArgs.Empty);
        view.OnParameterValueChanged   -= ParameterValueChanged;
        view.OnSceneObjectValueChanged -= SceneObjectValueChanged;
        view.OnDestroyController       -= DestoryController;
        view.OnDeleteSceneObject       -= DeleteSceneObject;
        view.TestRandomize             -= TestRandomize;
        if (model is CameraSceneObjectModel model1)
        {
            model1.OnCreateImage      -= CreateImage;
            model1.OnSetMainCamera    -= SetMainCamera;
            model1.OnSetDefaultCamera -= SetDefaultCamera;
        }

        foreach (var parameter in model.Parameter)
        {
            parameter.OnUpdateSceneObjectView -= UpdateSceneObjectView;
        }
        if (!IsViewNull())
        {
            UnityEngine.Object.Destroy(view.GetGameObject());
        }
        view  = null;
        model = null;
    }
 public SceneObjectController(AbstractSceneObjectModel model, ISceneObjectView view)
 {
     this.model = model;
     this.view  = view;
     view.OnParameterValueChanged   += ParameterValueChanged;
     view.OnSceneObjectValueChanged += SceneObjectValueChanged;
     view.OnDestroyController       += DestoryController;
     view.TestRandomize             += TestRandomize;
     view.OnDeleteSceneObject       += DeleteSceneObject;
     foreach (var parameter in model.Parameter)
     {
         parameter.OnUpdateSceneObjectView += UpdateSceneObjectView;
     }
 }
Exemple #3
0
    private void LoadSceneObjects()
    {
        foreach (var model in model.ObjectsInScene)
        {
            GameObject sceneObject = new GameObject();
            sceneObject = model.ItemModel.ApplyItemProperties(sceneObject);
            ISceneObjectView       sceneObjectView       = model.CreateView(sceneObject);
            ISceneObjectController sceneObjectController = new SceneObjectController(model, sceneObjectView);

            if (model is ModelSceneObjectModel || model is RegionSceneObjectModel)
            {
                sceneObject.layer = LayerMask.NameToLayer("SceneObject");
            }
            else if (model is CameraSceneObjectModel)
            {
                sceneObject.layer = LayerMask.NameToLayer("Visualization");
                ((CameraSceneObjectModel)model).OnCreateImage      += sceneObjectController.CreateImage;
                ((CameraSceneObjectModel)model).OnSetMainCamera    += sceneObjectController.SetMainCamera;
                ((CameraSceneObjectModel)model).OnSetDefaultCamera += sceneObjectController.SetDefaultCamera;
            }
            else if (model is AbstractLightSceneObjectModel)
            {
                sceneObject.layer = LayerMask.NameToLayer("Visualization");
            }

            OnDestroyController                       += sceneObjectController.DestoryController;
            OnRequestSceneObjectParameter             += sceneObjectController.RequestParameter;
            sceneObjectController.OnSendParameter     += DisplaySceneObjectParameter;
            sceneObjectController.OnDeleteReferences  += DeleteReferences;
            sceneObjectController.OnUpdateArrow       += UpdateArrow;
            sceneObjectController.OnDeleteSceneObject += DeleteSelectionModel;

            foreach (var parameter in model.Parameter)
            {
                parameter.UpdateParameterOnSceneObject(sceneObject);
            }
        }
    }
Exemple #4
0
    private GameObject CreateSceneObject <T>(T model) where T : AbstractItemModel
    {
        GameObject sceneObject = new GameObject();

        sceneObject = model.ApplyItemProperties(sceneObject);
        AbstractSceneObjectModel sceneObjectModel = model.CreateSceneObjectModel();

        foreach (var parameter in sceneObjectModel.Parameter)
        {
            parameter.InitFromGameObject(sceneObject);
        }
        ISceneObjectView       sceneObjectView       = sceneObjectModel.CreateView(sceneObject);
        ISceneObjectController sceneObjectController = new SceneObjectController(sceneObjectModel, sceneObjectView);

        this.model.AddSceneObject(sceneObjectModel);
        OnDestroyController                       += sceneObjectController.DestoryController;
        OnRequestSceneObjectParameter             += sceneObjectController.RequestParameter;
        sceneObjectController.OnSendParameter     += DisplaySceneObjectParameter;
        sceneObjectController.OnDeleteReferences  += DeleteReferences;
        sceneObjectController.OnUpdateArrow       += UpdateArrow;
        sceneObjectController.OnDeleteSceneObject += DeleteSelectionModel;
        return(sceneObject);
    }
Exemple #5
0
    private void Update()
    {
        //Item selection
        if (state == State.Idle || state == State.ItemSelection)
        {
            if (Input.GetMouseButtonUp(0) && !IsMouseOverUI())
            {
                RaycastHit hit;
                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerMask.GetMask("SceneObject", "Visualization")))
                {
                    SceneObjectSelectedEventArgs args = new SceneObjectSelectedEventArgs();
                    args.Selection = hit.transform.gameObject;

                    OnSceneObjectSelected(this, args);
                }
                else
                {
                    if (Selection != null)
                    {
                        OnSceneObjectDeselected();
                    }
                }
            }
        }

        //Delete selected sceneobject with DeleteKey
        if (state == State.ItemSelection)
        {
            if (Input.GetKeyUp(KeyCode.Delete))
            {
                ISceneObjectView view = Selection.GetComponent <ISceneObjectView>();
                if (view != null)
                {
                    SceneObjectSelectedEventArgs args = new SceneObjectSelectedEventArgs();
                    view.DeleteSceneObject();
                    args.Selection = Selection;
                    OnHideParameter(this, args);
                    Selection.GetComponent <SceneObjectView>().DestoyController();
                }
                else
                {
                    OnDefaultSunDeleted();
                }
                Destroy(Selection);
                Arrow.SetActive(false);
                state     = State.Idle;
                Selection = null;
            }
        }

        //During texture placement
        if (state == State.TexturePlacement)
        {
            if (!IsMouseOverUI())
            {
                RaycastHit hit;
                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerMask.GetMask("SceneObject")))
                {
                    Selection.transform.position = hit.point;
                    if (Input.GetMouseButtonUp(0))
                    {
                        ISceneObjectView view = hit.transform.GetComponent <ISceneObjectView>();
                        if (view != null)
                        {
                            StoreParameterEventArgs args = new StoreParameterEventArgs(Constants.SceneObjectParameter.TEXTURE);
                            args.Value = Selection.GetComponent <Renderer>().material;
                            view.ParameterValueChanged(this, args);
                        }
                    }
                }
                else
                {
                    Vector3 pos = Input.mousePosition;
                    pos.z = objectDistance;

                    Selection.transform.position = Camera.main.ScreenToWorldPoint(pos);
                }
            }

            if (Input.GetMouseButtonUp(1))
            {
                Destroy(Selection);
                Selection = null;
                state     = State.Idle;
            }
        }

        //During moving with Arrow
        if (state == State.SelectionMovement)
        {
            if (Input.GetMouseButtonUp(0))
            {
                Direction = Vector3.zero;
                state     = State.ItemSelection;
            }
            else
            {
                Vector2 diff          = Input.mousePosition - lastMousePosition;
                float   movementSpeed = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift) ? 0.1f : 0.5f;
                Selection.transform.position += Direction * movementSpeed * (diff.x + diff.y);
                lastMousePosition             = Input.mousePosition;
                Selection.GetComponent <ISceneObjectView>().SceneObjectValueChanged(Constants.SceneObjectParameter.POSITION, Selection.transform.position);
                MoveArrow();
            }
        }

        //During placement of an item
        if (Selection != null && state == State.ItemPlacement)
        {
            //Dont show item above UI
            if (!IsMouseOverUI())
            {
                RaycastHit hit;
                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerMask.GetMask("SceneObject", "Visualization")))
                {
                    if (hit.transform.tag != "Arrow")
                    {
                        Selection.transform.position = hit.point;
                    }
                }
                else
                {
                    Vector3 pos = Input.mousePosition;
                    pos.z = objectDistance;

                    Selection.transform.position = Camera.main.ScreenToWorldPoint(pos);
                }
                MoveArrow();

                Selection.GetComponent <ISceneObjectView>().SceneObjectValueChanged(Constants.SceneObjectParameter.POSITION, Selection.transform.position);

                if (Input.GetMouseButtonUp(0))
                {
                    OnPlaceItem(this, EventArgs.Empty);
                }
                if (Input.GetMouseButtonUp(1))
                {
                    Selection.GetComponent <ISceneObjectView>().DeleteSceneObject();
                    Selection.GetComponent <ISceneObjectView>().DestoyController();
                    Destroy(Selection);
                    Arrow.SetActive(false);
                    Selection = null;
                    state     = State.Idle;
                }
            }
        }
    }