Ejemplo n.º 1
0
        public int GetIndex(ActiveObject obj)
        {
            Rect pRect = obj.Bounds;

              var xMiddle = Bounds.X + Bounds.Width / 2;
              var yMiddle = Bounds.Y + Bounds.Height / 2;

              var topQuadrant = pRect.Y < yMiddle && pRect.Y + pRect.Height < yMiddle;
              var bottomQuadrant = pRect.Y > yMiddle;

              if (pRect.X < xMiddle && pRect.X + pRect.Width < xMiddle)
              {
            if (topQuadrant)
              return 1;
            else if (bottomQuadrant)
              return 2;
              }
              else if (pRect.X > xMiddle)
              {
            if (topQuadrant)
              return 0;
            else if (bottomQuadrant)
              return 3;
              }

              return -1;
        }
Ejemplo n.º 2
0
    public override void Initialize(ActiveObject c)
    {
        Cleanup();
        isDone = false;
        target = GameActor.NONE;

        isActive = true;
        cam = c;
        cState = State.INIT;

        // Load UI
        for (int i = 0; i < ui.Length; i++)
        {
            ui[i].SetActive(true);
            text[1].text = "";
        }

        foreach (GameObject e in interactible)
        {
            e.GetComponent<Typewriter>().enabled = true;
            e.GetComponent<Text>().text = "";
        }

        // Start State Coroutine
        StartCoroutine(UpdateState());
    }
Ejemplo n.º 3
0
        public void Test()
        {

            var activeObject = new ActiveObject();
            activeObject.Start();

            for (int i = 1; i < 11; i++)
            {
                var m = i;
                activeObject.AddTask(() =>
                {
                    Console.WriteLine(m);
                    Console.WriteLine(System.Threading.Thread.CurrentThread.IsBackground);
                    System.Threading.Thread.Sleep(500);

                    Console.WriteLine();
                });
            }

            


            System.Threading.Thread.Sleep(4000);
            activeObject.Stop();
        }
        public ActiveObjectSynchronizationContext(ActiveObject activeObject)
        {
            if (activeObject == null)
            {
                throw new ArgumentNullException("activeObject");
            }

            m_activeObject = activeObject;
        }
Ejemplo n.º 5
0
    // called by anyone
    public void Init()
    {
        if (GlobalHandler.modality == 0 || GlobalHandler.modality == 2)
        {
            if (GameObject.Find("HeadPosePoint") != null)
            {
                GameObject.Find("HeadPosePoint").SetActive(false);
            }
        }
        if (GlobalHandler.modality == 1 || GlobalHandler.modality == 2)
        {
            if (GameObject.Find("[VRGazeTrail]") != null)
            {
                GameObject.Find("[VRGazeTrail]").SetActive(false);
            }
        }
        foreach (GameObject pin in GameObject.FindGameObjectsWithTag("PIN"))
        {
            materialholderList.Add(new MaterialHolder(pin.GetComponent <MeshRenderer>().material, pin.gameObject));
        }
        currentGameobject = null;
        // Get EyeTracker unity object
        _eyeTracker = Tobii.Research.Unity.VREyeTracker.Instance;
        if (_eyeTracker == null)
        {
            Debug.Log("Failed to find eye tracker, has it been added to scene?");
        }

        _gazeTrail = Tobii.Research.Unity.VRGazeTrail.Instance;

        _highlightInfo = new ActiveObject();

        selectedPINS = new List <String>();

        inputtime     = 0;
        fullinputtime = 0;
        started       = false;
        stopped       = false;
        // not relevant but we need it because of the current implementation
        passwordmodel = new PasswordModel(new List <String>()
        {
            "POSX1G", "POSX1G", "POSX1G", "POSX1G"
        }, 4);
        //
        fw       = GameObject.Find("Storage").GetComponent <CreativityWriter>();
        mdfw     = GameObject.Find("Storage").GetComponent <MetaDataWriter>();
        fullfw   = GameObject.Find("Storage").GetComponent <FullCreativityWriter>();
        fullmdfw = GameObject.Find("Storage").GetComponent <FullMetaDataWriter>();
        fullfw.StartRecording();
        fullmdfw.StartRecording();
        //Debug.Log(GameObject.Find("Planes").transform.rotation);
        feedbackElements = new List <FeedbackModel>();
        feedbacktime     = 0.4f;
    }
Ejemplo n.º 6
0
        bool DoesObjectExist(VuMarkIdentifier markerId, string objectId)
        {
            ActiveObject activeObject = null;

            if (m_activeResourceObjects.TryGetValue(objectId, out activeObject))
            {
                return(activeObject.MarkerObjects.ContainsKey(markerId));
            }

            return(false);
        }
Ejemplo n.º 7
0
        bool DoesObjectExist(string markerId, string objectId)
        {
            ActiveObject activeObject = null;

            if (m_activeResourceObjects.TryGetValue(objectId, out activeObject))
            {
                // TODO : return activeObject.MarkerObjects.ContainsKey(markerId);
            }

            return(false);
        }
        public virtual BusinessBase CreateActiveObjectCopy()
        {
            BusinessBase target = CreateNewChild();

            target.Parent = this;

            ActiveObject.CopyTo(target, null);

            ActiveObject = target;

            return(ActiveObject);
        }
Ejemplo n.º 9
0
    /// <summary>
    /// Despawns all the active objects and tell rather they should be enqueued for later use or completely destroyed.
    /// </summary>
    /// <param name="destroyObject">Should the despawned objects also get destroyed?</param>
    /// <returns>True if all objects were despawed correctly.</returns>
    public bool DespawnAllActiveObjects(bool destroyObject)
    {
        ActiveObject.RemoveAll(g => g == null);

        while (ActiveObject.Count != 0)
        {
            if (!DespawnInternal(ActiveObject[0], destroyObject, false))
            {
                return(false);
            }
        }
        return(true);
    }
Ejemplo n.º 10
0
        ActiveObject GetOrCreateActiveObject(string objectId)
        {
            ActiveObject activeObject = null;

            if (!m_activeResourceObjects.TryGetValue(objectId, out activeObject))
            {
                activeObject = new ActiveObject();

                m_activeResourceObjects.Add(objectId, activeObject);
            }

            return(activeObject);
        }
Ejemplo n.º 11
0
        public static void TimeStep(object sender, EventArgs e)
        {
            if (GamePaused == true || GameLost == true)
            {
                return;
            }
            if (ActiveObject == null)
            {
                if (NextActiveObject == null)
                {
                    ActiveObject     = CreateObject();
                    NextActiveObject = CreateObject();
                }
                else
                {
                    ActiveObject     = NextActiveObject;
                    NextActiveObject = CreateObject();
                }
                DrawPreview();
            }
            else
            {
                bool isGameOver;
                if (ActiveObject.MoveDown(out isGameOver) == false)
                {
                    if (isGameOver)
                    {
                        Timer.Stop();
                        GameLost              = true;
                        mw.MESSAGE.Text       = "GAME OVER";
                        mw.MESSAGE.FontSize   = 35;
                        mw.MESSAGE.Foreground = Brushes.Red;
                        mw.MESSAGE.Visibility = Visibility.Visible;

                        //Highscores w = new Highscores();
                        //w.Show();
                        return;
                    }
                    ActiveObject.Merge();
                    ActiveObject = null;
                    int n_rows_deleted = CleanFullRows();
                    if (n_rows_deleted > 0)
                    {
                        Points         += n_rows_deleted * Level * levelPoints[n_rows_deleted - 1];
                        Destroyed_Rows += n_rows_deleted;
                    }
                }
            }

            Visualize();
        }
Ejemplo n.º 12
0
        public WeightValue NEXT_STEP_RUN_PRIORITY(ISimEntity entity, DateTime now, ActiveObject target, WeightFactor factor, IDispatchContext ctx)
        {
            if (factor.Factor == 0)
            {
                return(new WeightValue(0));
            }

            float criteria0 = WeightHelper.GetCriteria(factor, 0, 0.5f);

            FabAoEquipment eqp = target as FabAoEquipment;
            FabLot         lot = entity as FabLot;

            FabStep nextStep = BopHelper.GetNextMandatoryStep(lot);

            float score      = 0f;
            int   workingCnt = 0;
            int   adv        = 0;

            if (nextStep != null && nextStep.IsMandatoryStep)
            {
                bool checkProductVersion = true;
                var  workingEqps         = nextStep.StdStep.GetWorkingEqpList(lot, checkProductVersion);

                //checkProductVersion = false
                if (workingEqps == null || workingEqps.Count == 0)
                {
                    checkProductVersion = false;
                    workingEqps         = nextStep.StdStep.GetWorkingEqpList(lot, checkProductVersion);
                }

                workingCnt = workingEqps == null ? 0 : workingEqps.Count;

                if (workingCnt > 0)
                {
                    score = checkProductVersion ? 1f : criteria0;
                }

                var hasDummy = workingEqps.Find(t => t.IsDummyWait) != null;
                if (hasDummy)
                {
                    adv    = 2;
                    score *= adv;
                }
            }

            string nextStepID = nextStep != null ? nextStep.StepID : Constants.NULL_ID;
            string desc       = string.Format("[Next:{0}, Working:{1}, Adv:{2}]", nextStepID, workingCnt, adv);

            return(new WeightValue(score * factor.Factor, desc));
        }
Ejemplo n.º 13
0
    // temparary find functions, should just attach the class to the objects instead.
    void findActiveObjects()
    {
        if (debug)
        {
            Debug.Log("HudsonianPhysics findActiveObjects().");
        }

        ActiveObjectHook[] hooks = GameObject.FindObjectsOfType(typeof(ActiveObjectHook)) as ActiveObjectHook[];

        foreach (ActiveObjectHook hook in hooks)
        {
            ActiveObject newAObj = new ActiveObject(hook.transform);
            activeObjects.Add(newAObj);
        }
    }
Ejemplo n.º 14
0
 public void DeleteOwnership(ActiveObject obj)
 {
     if (obj is Tower)
     {
         Towers.Remove(obj as Tower);
     }
     else if (obj is Unit)
     {
         Units.Remove(obj as Unit);
     }
     else
     {
         throw new ArgumentException("Incorrent object to delete");
     }
 }
Ejemplo n.º 15
0
    public override void Initialize(ActiveObject c)
    {
        Cleanup();
        isDone = false;
        target = GameActor.NONE;

        isActive = true;
        cam = c;
        cState = State.INIT;

        lamp = props[3].GetComponent<Light>();
        lamp.enabled = false;

        // Start State Coroutine
        StartCoroutine(UpdateState());
    }
Ejemplo n.º 16
0
    public virtual bool DoAction(string actionKey, ActiveObject activeObject)
    {
        if (possibleActions.ContainsKey(actionKey))
        {
            if (IsActionReady(actionKey))
            {
                activeObject.PerformAction();
                possibleActions[actionKey].Invoke();
                StartCoroutine("ActionCooldown", actionKey);

                return(true);
            }
        }

        return(false);
    }
Ejemplo n.º 17
0
 public bool Despawn(GameObject pObject, bool DestroyObject = false)
 {
     if (ActiveObject.Remove(pObject))
     {
         if (DestroyObject)
         {
             Destroy(pObject);
         }
         else
         {
             pObject.SetActive(false);
             DespawnedElements.Enqueue(pObject);
         }
         return(true);
     }
     return(false);
 }
Ejemplo n.º 18
0
    public override void Initialize(ActiveObject c)
    {
        Cleanup();
        isDone = false;
        target = GameActor.NONE;

        isActive = true;
        cam = c;
        cState = State.INIT;

        // Load UI
        for (int i = 0; i < ui.Length-1; i++)
            ui[i].SetActive(true);

        // Start State Coroutine
        co = StartCoroutine(UpdateState());
    }
Ejemplo n.º 19
0
        public WeightValue OWNER_TYPE_PRIORITY(ISimEntity entity, DateTime now, ActiveObject target, WeightFactor factor, IDispatchContext ctx)
        {
            if (factor.Factor == 0)
            {
                return(new WeightValue(0));
            }

            FabLot lot = entity as FabLot;

            float  score     = 0f;
            string desc      = string.Empty;
            string ownerType = lot.OwnerType;


            if (factor.Criteria != null && factor.Criteria.Length > 0)
            {
                string[] types = (string[])factor.Criteria;

                if (types.Length > 0)
                {
                    if (ownerType == types[0])
                    {
                        score = 1f;
                    }
                }

                if (types.Length > 1)
                {
                    if (ownerType == types[1])
                    {
                        score = 0.5f;
                    }
                }

                if (types.Length > 2)
                {
                    if (ownerType == types[2])
                    {
                        score = 0f;
                    }
                }
            }

            return(new WeightValue(score * factor.Factor, desc));
        }
Ejemplo n.º 20
0
    void HandleActiveItems()
    {
        FindItemForSelection();

        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (sheltered)
            {
                sheltered             = false;
                spriteRenderer.sprite = originalSprite;
            }
            else if (highlighted != null)
            {
                highlighted.Use();
                highlighted = null;
            }
        }
    }
Ejemplo n.º 21
0
    public override void Initialize(ActiveObject c)
    {
        Cleanup();
        isDone = false;
        target = GameActor.NONE;

        isActive = true;
        cam = c;
        cState = State.INIT;

        // Show t.v.
        ui[0].SetActive(true);
        text[0].text = "";
        text[1].text = "";

        // Start State Coroutine
        co = StartCoroutine(UpdateState());
    }
Ejemplo n.º 22
0
    public GameObject Spawn(Vector3 pos, Quaternion rot)
    {
        GameObject com = null;

        if (DespawnedElements.Count != 0)
        {
            com = DespawnedElements.Dequeue();
        }
        else
        {
            com = Instantiate();
        }
        com.transform.position           = pos;
        com.transform.transform.rotation = rot;
        ActiveObject.Add(com);
        com.gameObject.SetActive(true);
        return(com);
    }
Ejemplo n.º 23
0
    public override bool DoAction(string actionKey, ActiveObject activeObject)
    {
        if (PhotonNetwork.isMasterClient)
        {
            bool actionSuccess = base.DoAction(actionKey, activeObject);
            if (actionSuccess)
            {
                photonView.RPC("DoActionRPC", PhotonTargets.Others, actionKey, activeObject.actionNumber);
            }

            return(actionSuccess);
        }
        else
        {
            photonView.RPC("AskForActionRPC", PhotonTargets.MasterClient, actionKey, activeObject.actionNumber);
            return(false);
        }
    }
Ejemplo n.º 24
0
        /// <summary>
        /// </summary>
        /// <param name="hb"/>
        /// <param name="ao"/>
        /// <param name="now"/>
        /// <param name="handled"/>
        public void ON_START_TASK0(IHandlingBatch hb, ActiveObject ao, DateTime now, ref bool handled)
        {
            try
            {
                AoEquipment equip = ao as AoEquipment;

                MicronBEAssyBELot lot = hb as MicronBEAssyBELot;

                if (equip == null)
                {
                    SimulationHelper.CollectEqpPlan(hb, equip, LoadState.BUSY.ToString());
                }
            }
            catch (Exception e)
            {
                WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0}   MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name));
            }
        }
Ejemplo n.º 25
0
 public void SetUsedObject(GameObject item)
 {
     if (!_usedObject)
     {
         _usedObject = item;
         _activeObject = item.GetComponent<ActiveObject>();
         Texture2D texture = _usedObject.GetComponent<UsedSubject>().Image.sprite.texture;      
         Cursor.SetCursor(texture, Vector2.zero, CursorMode.ForceSoftware);
         _stateCursor = 5;   //иконка объекта вместо курсора
     }
     else if (item == null)
     {
         _activeObject.UseObject(this);
         _usedObject = null;
         _activeObject = null;
         Cursor.SetCursor(_cursorStandart, Vector2.zero, CursorMode.ForceSoftware);
         _stateCursor = 0;
     }
 }
    private void Start()
    {
        // Get EyeTracker unity object
        _eyeTracker = VREyeTracker.Instance;
        if (_eyeTracker == null)
        {
            Debug.Log("Failed to find eye tracker, has it been added to scene?");
        }

        _gazeTrail       = VRGazeTrail.Instance;
        _lookAtSignColor = new Color(0, 1, 0, 0.2f);

        _highlightInfo = new ActiveObject();
        var textRenderer = _textCalibration.GetComponent <Renderer>();

        textRenderer.sortingOrder -= 1;
        blinkAvailable             = true;
        delay = 5;
    }
Ejemplo n.º 27
0
        public void EmitConnectionEvent(OnConnectionEvent e)
        {
            switch (modifyMode) {
                case ModifyMode.CONNECT_ENDED: {
                    switch (e.eventType) {
                        case OnConnectionEvent.EventType.EVENT_CONNECTION_TAPPED: {
                            var tappedConnectionId = e.eventSourceCon.connectionId;
                            foreach (var con in connections) {
                                if (con.connectionId == tappedConnectionId) {
                                    con.SetActive();
                                    activeObject = new ActiveObject(AssetGraphSettings.ObjectKind.CONNECTION, con.connectionId, Vector2.zero);
                                } else {
                                    con.SetInactive();
                                }
                            }

                            // set deactive for all nodes.
                            foreach (var node in nodes) {
                                node.SetInactive();
                            }
                            break;
                        }
                        case OnConnectionEvent.EventType.EVENT_CONNECTION_DELETED: {
                            Undo.RecordObject(this, "Delete Connection");

                            var deletedConnectionId = e.eventSourceCon.connectionId;

                            DeleteConnectionById(deletedConnectionId);

                            SaveGraphWithReload();
                            Repaint();
                            break;
                        }
                        default: {
                            // Debug.Log("unconsumed or ignored event:" + e.eventType);
                            break;
                        }
                    }
                    break;
                }
            }
        }
Ejemplo n.º 28
0
        public void Test3()
        {
            using (var activeObject = new ActiveObject())
            {
                activeObject.Start();
                for (int i = 1; i < 11; i++)
                {
                    var m = i;
                    activeObject.AddTask(() =>
                    {
                        Console.WriteLine(m);
                        Console.WriteLine(Thread.CurrentThread.IsBackground);
                        Thread.Sleep(500);

                        Console.WriteLine();
                    });
                }

                Thread.Sleep(4000);
            }
        }
Ejemplo n.º 29
0
        public void Insert(ActiveObject obj)
        {
            Rect pRect = obj.Bounds;

              if (Nodes[0] != null)
              {
            var index = GetIndex(obj);

            if (index != -1)
            {
              Nodes[index].Insert(obj);
              return;
            }
              }

              Objects.Add(obj);

              if (Objects.Count > MAX_OBJECTS && Level < MAX_LEVELS)
              {
            if (Nodes[0] == null)
              Subdivide();

            var i = 0;

            while (i < Objects.Count)
            {
              var index = GetIndex(Objects[i]);

              if (index != -1)
              {
            Nodes[index].Insert(Objects[i]);
            Objects.RemoveAt(i);
              }
              else
              {
            i++;
              }
            }
              }
        }
Ejemplo n.º 30
0
        public void Test3()
        {
            using (var activeObject = new ActiveObject())
            {

                activeObject.Start();
                for (int i = 1; i < 11; i++)
                {
                    var m = i;
                    activeObject.AddTask(() =>
                    {
                        Console.WriteLine(m);
                        Console.WriteLine(Thread.CurrentThread.IsBackground);
                        Thread.Sleep(500);

                        Console.WriteLine();
                    });
                }

                Thread.Sleep(4000);
            }
        }
Ejemplo n.º 31
0
        public void RemoveResourceObjects(string resourceId)
        {
            ActiveObject activeObj = null;

            // Indexed by media/asset instance id
            if (m_activeResourceObjects.TryGetValue(resourceId, out activeObj))
            {
                foreach (var obj in activeObj.TrackingMarkerObjects.Values)
                {
                    ARWorld.Instance.RemoveWorldObject(obj);
                }

                foreach (var obj in activeObj.HoldingMarkerObjects.Values)
                {
                    ARWorld.Instance.RemoveWorldObject(obj);
                }

                m_activeResourceObjects.Remove(resourceId);
            }

            // Indexed by marker ident
            var removeMedias = m_activeResourceMedia.Values.Where(v => v.ObjectId == resourceId).ToArray();

            foreach (var rm in removeMedias)
            {
                m_activeResourceMedia.Remove(rm.Marker.GetIdentifier(), rm);
            }

            // Indexed by marker ident
            var removeAssets = m_activeResourceAssets.Values.Where(v => v.ObjectId == resourceId).ToArray();

            foreach (var ra in removeAssets)
            {
                m_activeResourceAssets.Remove(ra.Marker.GetIdentifier(), ra);
            }

            WorldObjectManager.Instance.RemoveWorldObjects(resourceId);
        }
Ejemplo n.º 32
0
 void KeyPick()
 {
     key = true;
     gameController.key = key;
     dialogText.GetComponent <Text>().text = activeObject.usingText;
     currentText = dialogText.GetComponent <Text>().text;
     if (activeObject.data.count == 0)
     {
         hintText.text = activeObject.hintText;
         currentHint   = hintText.text;
         activeObject.Take();
     }
     else
     {
         if (currentHint == activeObject.hintText)
         {
             dialogText.GetComponent <Text>().text = activeObject.usingText;
             hintText.text = "";
             Destroy(activeObject.gameObject);
             activeObject   = null;
             nearGemsObject = false;
         }
     }
 }
Ejemplo n.º 33
0
        public void Test()
        {
            var activeObject = new ActiveObject();

            activeObject.Start();

            for (int i = 1; i < 11; i++)
            {
                var m = i;
                activeObject.AddTask(() =>
                {
                    Console.WriteLine(m);
                    Console.WriteLine(System.Threading.Thread.CurrentThread.IsBackground);
                    System.Threading.Thread.Sleep(500);

                    Console.WriteLine();
                });
            }



            System.Threading.Thread.Sleep(4000);
            activeObject.Stop();
        }
Ejemplo n.º 34
0
 void RopeCollidesWithEnemies()
 {
     foreach (ActiveObject rope in Projectiles) {
     foreach (Enemy enemy in Enemies) {
       if (rope.HitBox.Intersects (enemy.HitBox)) {
     ActiveObject[] ropeEnemy = new ActiveObject[] {
       rope,
       enemy
     };
     Game.EventMgr.Notify (Event.EnemyHitWithNet, ropeEnemy);
       }
     }
       }
 }
Ejemplo n.º 35
0
 public void LiftEnemy()
 {
     ActiveObject[] playerEnemy = new ActiveObject[]{this, EnemyPushed};
       Game.EventMgr.Notify (Event.LiftEnemy, playerEnemy);
 }
Ejemplo n.º 36
0
    IEnumerator Start()
    {
        Setup();
        // Retry setup if references were cleared post-add

        if (camera == null)
        {
            Debug.LogError("No camera assigned. Please correct and restart.", this);
            enabled = false;
            yield break;
        }

        if (player == null)
        {
            player = GetComponent <Player> ();
        }

        while (Application.isPlaying)
        // Update the currently focues object from the list
        {
            Vector3 vectorToCurrent = currentObject == null ? Vector3.zero : currentObject.transform.position - transform.position;

            if (
                currentObject != null && (
                    !nearbyObjects.Contains(currentObject) ||
                    Vector3.Angle(vectorToCurrent, transform.forward) > camera.fieldOfView * 0.5f
                    )
                )
            // If the current object is out of focus, clear it
            {
                currentObject = null;
            }

            foreach (ActiveObject activeObject in nearbyObjects)
            {
                Vector3 vectorToObject = activeObject.transform.position - transform.position;

                if (
                    Vector3.Angle(vectorToObject, transform.forward) > camera.fieldOfView * 0.5f &&
                    !(vectorToObject.magnitude < closeProximity)
                    )
                // Out of focus, ignore
                {
                    continue;
                }

                if (currentObject == null)
                // No current object? We'll set this as current for now.
                {
                    currentObject   = activeObject;
                    vectorToCurrent = vectorToObject;
                    continue;
                }

                float distanceDifference = Mathf.Abs(vectorToCurrent.magnitude - vectorToObject.magnitude);
                float angularDifference  = Mathf.Abs(Vector3.Angle(vectorToCurrent, transform.forward) - Vector3.Angle(vectorToObject, transform.forward));
                if (
                    vectorToCurrent.magnitude > vectorToObject.magnitude &&
                    distanceDifference > objectSplitDistance &&
                    Vector3.Angle(vectorToCurrent, transform.forward) > Vector3.Angle(vectorToObject, transform.forward) &&
                    angularDifference > objectSplitAngle
                    )
                // If the object is closer distance and angle wise - and by enough, make that the current object
                {
                    currentObject   = activeObject;
                    vectorToCurrent = vectorToObject;
                }
            }

            yield return(new WaitForSeconds(1.0f / objectUpdateFramerate));
            // Maintain specified framerate
        }
    }
Ejemplo n.º 37
0
    // called by anyone
    public void Init()
    {
        if (GlobalHandler.modality == 0 || GlobalHandler.modality == 2)
        {
            if (GameObject.Find("HeadPosePoint") != null)
            {
                GameObject.Find("HeadPosePoint").SetActive(false);
            }
        }
        if (GlobalHandler.modality == 1 || GlobalHandler.modality == 2)
        {
            if (GameObject.Find("[VRGazeTrail]") != null)
            {
                GameObject.Find("[VRGazeTrail]").SetActive(false);
            }
        }
        foreach (GameObject pin in GameObject.FindGameObjectsWithTag("PIN"))
        {
            materialholderList.Add(new MaterialHolder(pin.GetComponent <MeshRenderer>().material, pin.gameObject));
        }
        if (GlobalHandler.attackerscenario == 99) // which meas the expert observation attack is running
        {
            foreach (MaterialHolder materialobj in materialholderList)
            {
                materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
            }
            passwordmodel = new PasswordModel(new List <String>()
            {
                "POSX1W", "POSX3W", "POSX5G", "POSX6O"
            }, 4);
        }
        // change this area for each participant to ensure no follow-up effects

        /*
         *
         *                          START
         */
        // for each participant, create file

        if (GlobalHandler.attackerscenario == 1)
        {
            if (GlobalHandler.modality == 0)
            {
                switch (trials)
                {
                case 0:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX4G", "POSX2R", "POSX5R", "POSX8R"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX4G", "POSX2R", "POSX5R", "POSX8R"
                    });
                    break;

                case 1:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX8W", "POSX6R", "POSX4R", "POSX2G"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX8W", "POSX6R", "POSX4R", "POSX2G"
                    });
                    break;

                case 2:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX1W", "POSX1R", "POSX1B", "POSX1O"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX1W", "POSX1R", "POSX1B", "POSX1O"
                    });
                    break;

                case 3:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX1G", "POSX3G", "POSX7G", "POSX9G"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX1G", "POSX3G", "POSX7G", "POSX9G"
                    });
                    break;
                }
            }
            if (GlobalHandler.modality == 1)
            {
                switch (trials)
                {
                case 0:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX1G", "POSX4G", "POSX7G", "POSX8G"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX1G", "POSX4G", "POSX7G", "POSX8G"
                    });
                    break;

                case 1:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX1G", "POSX1W", "POSX2O", "POSX2B"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX1G", "POSX1W", "POSX2O", "POSX2B"
                    });
                    break;

                case 2:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX6G", "POSX2O", "POSX3O", "POSX4G"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX6G", "POSX2O", "POSX3O", "POSX4G"
                    });
                    break;

                case 3:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX5G", "POSX4G", "POSX1W", "POSX2W"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX5G", "POSX4G", "POSX1W", "POSX2W"
                    });
                    break;
                }
            }
            if (GlobalHandler.modality == 2)
            {
                switch (trials)
                {
                case 0:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX5W", "POSX4O", "POSX6W", "POSX9W"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX5W", "POSX4O", "POSX6W", "POSX9W"
                    });
                    break;

                case 1:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX4O", "POSX6W", "POSX5G", "POSX8R"
                    }, 4);

                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX4O", "POSX6W", "POSX5G", "POSX8R"
                    });
                    break;

                case 2:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX3G", "POSX6G", "POSX9G", "POSX3W"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX3G", "POSX6G", "POSX9G", "POSX3W"
                    });
                    break;

                case 3:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX9G", "POSX7G", "POSX5G", "POSX3G"
                    }, 4);

                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX9G", "POSX7G", "POSX5G", "POSX3G"
                    });
                    break;
                }
            }
        }

        if (GlobalHandler.attackerscenario == 2)
        {
            if (GlobalHandler.modality == 0)
            {
                switch (trials)
                {
                case 0:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX4W", "POSX5W", "POSX6W", "POSX7W"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX4W", "POSX5W", "POSX6W", "POSX7W"
                    });
                    break;

                case 1:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX4W", "POSX5W", "POSX6W", "POSX6R"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX4W", "POSX5W", "POSX6W", "POSX6R"
                    });
                    break;

                case 2:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX1G", "POSX2G", "POSX3O", "POSX4B"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX1G", "POSX2G", "POSX3O", "POSX4B"
                    });
                    break;

                case 3:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX5G", "POSX6W", "POSX7R", "POSX8G"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX5G", "POSX6W", "POSX7R", "POSX8G"
                    });
                    break;
                }
            }
            if (GlobalHandler.modality == 1)
            {
                switch (trials)
                {
                case 0:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX3G", "POSX6G", "POSX2G", "POSX1G"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX3G", "POSX6G", "POSX2G", "POSX1G"
                    });
                    break;

                case 1:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX3G", "POSX3O", "POSX2O", "POSX1O"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX3G", "POSX3O", "POSX2O", "POSX1O"
                    });
                    break;

                case 2:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX4G", "POSX6G", "POSX5O", "POSX5B"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX4G", "POSX6G", "POSX5O", "POSX5B"
                    });
                    break;

                case 3:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX1O", "POSX5W", "POSX3R", "POSX7B"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX1O", "POSX5W", "POSX3R", "POSX7B"
                    });
                    break;
                }
            }
            if (GlobalHandler.modality == 2)
            {
                switch (trials)
                {
                case 0:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX2G", "POSX4R", "POSX6O", "POSX8B"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX2G", "POSX4R", "POSX6O", "POSX8B"
                    });
                    break;

                case 1:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX7W", "POSX9R", "POSX9B", "POSX8B"
                    }, 4);

                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX7W", "POSX9R", "POSX9B", "POSX8B"
                    });
                    break;

                case 2:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX5G", "POSX7G", "POSX6G", "POSX8G"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX5G", "POSX7G", "POSX6G", "POSX8G"
                    });
                    break;

                case 3:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX2G", "POSX2W", "POSX5W", "POSX8W"
                    }, 4);

                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX2G", "POSX2W", "POSX5W", "POSX8W"
                    });
                    break;
                }
            }
        }

        if (GlobalHandler.attackerscenario == 3)
        {
            if (GlobalHandler.modality == 0)
            {
                switch (trials)
                {
                case 0:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX9G", "POSX5G", "POSX1G", "POSX2G"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX9G", "POSX5G", "POSX1G", "POSX2G"
                    });
                    break;

                case 1:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX3G", "POSX4W", "POSX3O", "POSX4B"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX3G", "POSX4W", "POSX3O", "POSX4B"
                    });
                    break;

                case 2:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX1G", "POSX1O", "POSX2O", "POSX3O"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX1G", "POSX1O", "POSX2O", "POSX3O"
                    });
                    break;

                case 3:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX1W", "POSX3W", "POSX5G", "POSX6O"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX1W", "POSX3W", "POSX5G", "POSX6O"
                    });
                    break;
                }
            }
            if (GlobalHandler.modality == 1)
            {
                switch (trials)
                {
                case 0:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX5R", "POSX3W", "POSX7G", "POSX9B"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX5R", "POSX3W", "POSX7G", "POSX9B"
                    });
                    break;

                case 1:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX5G", "POSX6G", "POSX8G", "POSX9G"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX5G", "POSX6G", "POSX8G", "POSX9G"
                    });
                    break;

                case 2:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX2W", "POSX8G", "POSX7G", "POSX3R"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX2W", "POSX8G", "POSX7G", "POSX3R"
                    });
                    break;

                case 3:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX5W", "POSX5B", "POSX6B", "POSX7B"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX5W", "POSX5B", "POSX6B", "POSX7B"
                    });
                    break;
                }
            }
            if (GlobalHandler.modality == 2)
            {
                switch (trials)
                {
                case 0:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX9W", "POSX3B", "POSX5B", "POSX7B"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX9W", "POSX3B", "POSX5B", "POSX7B"
                    });
                    break;

                case 1:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX2W", "POSX4W", "POSX6W", "POSX8W"
                    }, 4);

                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX2W", "POSX4W", "POSX6W", "POSX8W"
                    });
                    break;

                case 2:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX2G", "POSX2W", "POSX2R", "POSX3R"
                    }, 4);
                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX2G", "POSX2W", "POSX2R", "POSX3R"
                    });
                    break;

                case 3:
                    foreach (MaterialHolder materialobj in materialholderList)
                    {
                        materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material;
                    }
                    passwordmodel = new PasswordModel(new List <String>()
                    {
                        "POSX6G", "POSX1W", "POSX9R", "POSX5B"
                    }, 4);

                    pwGenerator.generateCube(new List <string>()
                    {
                        "POSX6G", "POSX1W", "POSX9R", "POSX5B"
                    });
                    break;
                }
            }
        }

        /*
         *
         *                          END
         */

        currentGameobject = null;
        // Get EyeTracker unity object
        _eyeTracker = Tobii.Research.Unity.VREyeTracker.Instance;
        if (_eyeTracker == null)
        {
            Debug.Log("Failed to find eye tracker, has it been added to scene?");
        }

        _gazeTrail = Tobii.Research.Unity.VRGazeTrail.Instance;

        _highlightInfo = new ActiveObject();

        selectedPINS = new List <String>();

        inputtime     = 0;
        fullinputtime = 0;
        started       = false;
        stopped       = false;
        // not relevant but we need it because of the current implementation
        //passwordmodel = new PasswordModel(new List<String>() { "POSX1G", "POSX1G", "POSX1G", "POSX1G" }, 4);
        //
        //fw = GameObject.Find("Storage").GetComponent<SecurityWriter>();
        mdfw     = GameObject.Find("Storage").GetComponent <MetaDataWriter>();
        fullfw   = GameObject.Find("Storage").GetComponent <FullSecurityWriter>();
        fullmdfw = GameObject.Find("Storage").GetComponent <FullMetaDataWriter>();
        //fullfw.StartRecording();
        fullmdfw.StartRecording();
        //Debug.Log(GameObject.Find("Planes").transform.rotation);
        feedbackElements = new List <FeedbackModel>();
        feedbacktime     = 0.4f;
    }
        private void UpdateActivationOfObjects(ActiveObject currentActiveObject)
        {
            foreach (var node in nodes) {
                if (currentActiveObject.idPosDict.ContainsKey(node.Id)) {
                    node.SetActive();
                    continue;
                }

                node.SetInactive();
            }

            foreach (var connection in connections) {
                if (currentActiveObject.idPosDict.ContainsKey(connection.Id)) {
                    connection.SetActive();
                    continue;
                }

                connection.SetInactive();
            }
        }
Ejemplo n.º 39
0
        public override void Update()
        {
            List<int> playersIDs = Controller.GetActivePlayers ();

              RemoveDestroyFlaggedFromGame ();
              UpdatePlayersEnemies (playersIDs);
              PlayersCollideWithGround (playersIDs);
              EnemiesCollideWithGround ();
              RopeCollidesWithEnemies ();
              PlayerCollidesWithEnemies (playersIDs);
              PlayerPushingEnemy (playersIDs);
              EnemyCollidesWithCage ();

              LevelTimer.Update ();
              TimeTillNextLevelTimer.Update ();

              // Update Coins
              foreach (Coin coin in Collectables)
            coin.Update ();

              // Coin Collisions
              foreach (Coin coin in Collectables) {
            foreach (int p in playersIDs) {
              if (coin.HitBox.Intersects (AllPlayers [p].HitBox)) {
            ActiveObject[] coinPlayer = new ActiveObject[] {
              coin,
              AllPlayers [p]
            };
            Game.EventMgr.Notify (Event.PlayerCollectCoin, coinPlayer);
              }
            }
              }

              // All Enemies have been destroyed
              if (Enemies.Count == 0)
            Game.EventMgr.Notify (Event.AllEnemiesDestroyed, null);

              // Drawables
              Enemies.Sort (ActiveObject.ZIndexComparison);
        }
    // called by anyone
    public void Init()
    {
        Debug.Log("trigger countercalls" + counterCalls);
        if (GlobalHandler.training)
        {
            passwordmodel = new PasswordModel(new List <String>()
            {
                "POSX1Y", "POSX2Y", "POSX3Y", "POSX4Y"
            }, 4);
        }
        else
        {
            switch (GlobalHandler.password)
            {
            case 1:
                passwordmodel = new PasswordModel(new List <String>()
                {
                    "POSX1G", "POSX2G", "POSX3G", "POSX4G"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword0S1");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX1G", "POSX2G", "POSX3G", "POSX4G"
                });
                break;

            case 2:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX3G", "POSX4G", "POSX5G", "POSX6G"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword0S2");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX3G", "POSX4G", "POSX5G", "POSX6G"
                });

                break;

            case 3:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX1G", "POSX3G", "POSX7G", "POSX9G"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword0S3");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX1G", "POSX3G", "POSX7G", "POSX9G"
                });

                break;

            case 4:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX5G", "POSX6G", "POSX7G", "POSX8G"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword1S1");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX5G", "POSX6G", "POSX7G", "POSX8G"
                });

                break;

            case 5:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX6G", "POSX7G", "POSX8G", "POSX9G"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword1S2");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX6G", "POSX7G", "POSX8G", "POSX9G"
                });

                break;

            case 6:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX1G", "POSX2G", "POSX8G", "POSX9G"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword1S3");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX1G", "POSX2G", "POSX8G", "POSX9G"
                });

                break;

            case 7:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX9G", "POSX6G", "POSX5R", "POSX6R"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword2S1");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX9G", "POSX6G", "POSX5R", "POSX6R"
                });

                break;

            case 8:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX1G", "POSX9G", "POSX1W", "POSX2W"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword2S2");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX1G", "POSX9G", "POSX1W", "POSX2W"
                });

                break;

            case 9:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX4G", "POSX5G", "POSX6G", "POSX5B"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword2S3");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX4G", "POSX5G", "POSX6G", "POSX5B"
                });

                break;

            case 10:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX7G", "POSX8G", "POSX1R", "POSX2R"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword3S1");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX7G", "POSX8G", "POSX1R", "POSX2R"
                });

                break;

            case 11:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX5G", "POSX1W", "POSX2W", "POSX3W"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword3S2");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX5G", "POSX1W", "POSX2W", "POSX3W"
                });

                break;

            case 12:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX9G", "POSX8G", "POSX1B", "POSX2B"
                }, 4);
                //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword3S3");
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX9G", "POSX8G", "POSX1B", "POSX2B"
                });

                break;

            case 13:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX4G", "POSX1W", "POSX2W", "POSX1O"
                }, 4);
                //password.GetComponent<RawImage>().texture = null;
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX4G", "POSX1W", "POSX2W", "POSX1O"
                });
                break;

            case 14:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX1G", "POSX2G", "POSX5R", "POSX1W"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX1G", "POSX2G", "POSX5R", "POSX1W"
                });
                //password.GetComponent<RawImage>().texture = null;

                break;

            case 15:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX5G", "POSX5R", "POSX5B", "POSX6B"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX5G", "POSX5R", "POSX5B", "POSX6B"
                });
                //password.GetComponent<RawImage>().texture = null;

                break;

            case 16:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX4G", "POSX4W", "POSX6W", "POSX5O"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX4G", "POSX4W", "POSX6W", "POSX5O"
                });
                //password.GetComponent<RawImage>().texture = null;

                break;

            case 17:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX5G", "POSX5R", "POSX1W", "POSX2W"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX5G", "POSX5R", "POSX1W", "POSX2W"
                });
                //password.GetComponent<RawImage>().texture = null;

                break;

            case 18:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX7G", "POSX7W", "POSX9W", "POSX7O"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX7G", "POSX7W", "POSX9W", "POSX7O"
                });
                //password.GetComponent<RawImage>().texture = null;

                break;

            case 19:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX7G", "POSX5W", "POSX9B", "POSX7R"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX7G", "POSX5W", "POSX9B", "POSX7R"
                });
                //password.GetComponent<RawImage>().texture = null;

                break;

            case 20:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX3G", "POSX3W", "POSX4O", "POSX5R"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX3G", "POSX3W", "POSX4O", "POSX5R"
                });
                // password.GetComponent<RawImage>().texture = null;

                break;

            case 21:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX2G", "POSX3O", "POSX4B", "POSX5W"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX2G", "POSX3O", "POSX4B", "POSX5W"
                });
                // password.GetComponent<RawImage>().texture = null;

                break;

            case 22:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX5G", "POSX2W", "POSX5B", "POSX9R"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX5G", "POSX2W", "POSX5B", "POSX9R"
                });
                //password.GetComponent<RawImage>().texture = null;

                break;

            case 23:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX1G", "POSX1W", "POSX5B", "POSX6O"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX1G", "POSX1W", "POSX5B", "POSX6O"
                });
                // password.GetComponent<RawImage>().texture = null;

                break;

            case 24:
                passwordmodel = new PasswordModel(new List <System.String>()
                {
                    "POSX1G", "POSX1W", "POSX1R", "POSX5B"
                }, 4);
                pwGenerator.generateCube(new List <string>()
                {
                    "POSX1G", "POSX1W", "POSX1R", "POSX5B"
                });
                //password.GetComponent<RawImage>().texture = null;

                break;
            }
        }

        /*if (trials <= 1)
         * {
         *  password.GetComponent<RawImage>().texture = null;
         *  foreach (MaterialHolder materialobj in materialholderList)
         *  {
         *      materialobj.Gameobject.GetComponent<MeshRenderer>().material = materialobj.Material;
         *  }
         *
         * }*/

        currentGameobject = null;
        // Get EyeTracker unity object
        _eyeTracker = Tobii.Research.Unity.VREyeTracker.Instance;
        if (_eyeTracker == null)
        {
            Debug.Log("Failed to find eye tracker, has it been added to scene?");
        }

        _gazeTrail = Tobii.Research.Unity.VRGazeTrail.Instance;

        _highlightInfo = new ActiveObject();

        selectedPINS = new List <String>();

        inputtime          = 0;
        fullinputtime      = 0;
        started            = false;
        stopped            = false;
        timerfinalgazedata = 0.3f;
        fw       = GameObject.Find("Storage").GetComponent <FileWriter2>();
        mdfw     = GameObject.Find("Storage").GetComponent <MetaDataWriter>();
        fullfw   = GameObject.Find("Storage").GetComponent <FullFileWriter2>();
        fullmdfw = GameObject.Find("Storage").GetComponent <FullMetaDataWriter>();
        fullfw.StartRecording();
        fullmdfw.StartRecording();
        Debug.Log(GameObject.Find("Planes").transform.rotation);
    }
Ejemplo n.º 41
0
 /// <summary>
 /// Display all components and initialize them.
 /// </summary>
 public abstract void Initialize(ActiveObject c);
Ejemplo n.º 42
0
        /// <summary>
        /// </summary>
        /// <param name="sheet"/>
        /// <param name="entity"/>
        /// <param name="aeqp"/>
        /// <param name="state"/>
        /// <returns/>
        public bool FILTER(Mozart.SeePlan.StatModel.StatSheet <LoadHistory> sheet, Mozart.Simulation.Engine.ISimEntity entity, ActiveObject aeqp, Mozart.SeePlan.Simulation.LoadingStates state)
        {
            if (ModelContext.Current.EndTime == aeqp.NowDT && state != LoadingStates.IDLE)
            {
                return(true);
            }

            return(false);
        }
Ejemplo n.º 43
0
 /// <summary>
 /// Checks if a gameobject is in the inactive objectpool.
 /// </summary>
 /// <param name="item">The gameobject to check.</param>
 /// <returns>True if the gameobject is in the inactive objectpool, otherwise false.</returns>
 public bool ContainsInactive(GameObject item)
 {
     return(ActiveObject.Contains(item));
 }
        private void HandleGraphGUIEvents()
        {
            //mouse drag event handling.
            switch (Event.current.type) {
            // draw line while dragging.
            case EventType.MouseDrag: {
                    switch (modifyMode) {
                    case ModifyMode.NONE: {
                            switch (Event.current.button) {
                            case 0:{// left click
                                    if (Event.current.command) {
                                        scalePoint = new ScalePoint(Event.current.mousePosition, NodeGUI.scaleFactor, 0);
                                        modifyMode = ModifyMode.SCALING;
                                        break;
                                    }

                                    selection = new AssetBundleGraphSelection(Event.current.mousePosition);
                                    modifyMode = ModifyMode.SELECTING;
                                    break;
                                }
                            case 2:{// middle click.
                                    scalePoint = new ScalePoint(Event.current.mousePosition, NodeGUI.scaleFactor, 0);
                                    modifyMode = ModifyMode.SCALING;
                                    break;
                                }
                            }
                            break;
                        }
                    case ModifyMode.SELECTING: {
                            // do nothing.
                            break;
                        }
                    case ModifyMode.SCALING: {
                            var baseDistance = (int)Vector2.Distance(Event.current.mousePosition, new Vector2(scalePoint.x, scalePoint.y));
                            var distance = baseDistance / NodeGUI.SCALE_WIDTH;
                            var direction = (0 < Event.current.mousePosition.y - scalePoint.y);

                            if (!direction) distance = -distance;

                            // var before = NodeGUI.scaleFactor;
                            NodeGUI.scaleFactor = scalePoint.startScale + (distance * NodeGUI.SCALE_RATIO);

                            if (NodeGUI.scaleFactor < NodeGUI.SCALE_MIN) NodeGUI.scaleFactor = NodeGUI.SCALE_MIN;
                            if (NodeGUI.SCALE_MAX < NodeGUI.scaleFactor) NodeGUI.scaleFactor = NodeGUI.SCALE_MAX;
                            break;
                        }
                    }

                    HandleUtility.Repaint();
                    Event.current.Use();
                    break;
                }
            }

            // mouse up event handling.
            // use rawType for detect for detectiong mouse-up which raises outside of window.
            switch (Event.current.rawType) {
            case EventType.MouseUp: {
                    switch (modifyMode) {
                    /*
                                select contained nodes & connections.
                            */
                    case ModifyMode.SELECTING: {
                            var x = 0f;
                            var y = 0f;
                            var width = 0f;
                            var height = 0f;

                            if (Event.current.mousePosition.x < selection.x) {
                                x = Event.current.mousePosition.x;
                                width = selection.x - Event.current.mousePosition.x;
                            }
                            if (selection.x < Event.current.mousePosition.x) {
                                x = selection.x;
                                width = Event.current.mousePosition.x - selection.x;
                            }

                            if (Event.current.mousePosition.y < selection.y) {
                                y = Event.current.mousePosition.y;
                                height = selection.y - Event.current.mousePosition.y;
                            }
                            if (selection.y < Event.current.mousePosition.y) {
                                y = selection.y;
                                height = Event.current.mousePosition.y - selection.y;
                            }

                            var activeObjectIds = new List<string>();

                            var selectedRect = new Rect(x, y, width, height);

                            foreach (var node in nodes) {
                                var nodeRect = new Rect(node.GetRect());
                                nodeRect.x = nodeRect.x * NodeGUI.scaleFactor;
                                nodeRect.y = nodeRect.y * NodeGUI.scaleFactor;
                                nodeRect.width = nodeRect.width * NodeGUI.scaleFactor;
                                nodeRect.height = nodeRect.height * NodeGUI.scaleFactor;
                                // get containd nodes,
                                if (nodeRect.Overlaps(selectedRect)) {
                                    activeObjectIds.Add(node.Id);
                                }
                            }

                            foreach (var connection in connections) {
                                // get contained connection badge.
                                if (connection.GetRect().Overlaps(selectedRect)) {
                                    activeObjectIds.Add(connection.Id);
                                }
                            }

                            if (Event.current.shift) {
                                // add current active object ids to new list.
                                foreach (var alreadySelectedObjectId in activeObject.idPosDict.ReadonlyDict().Keys) {
                                    if (!activeObjectIds.Contains(alreadySelectedObjectId)) activeObjectIds.Add(alreadySelectedObjectId);
                                }
                            } else {
                                // do nothing, means cancel selections if nodes are not contained by selection.
                            }

                            Undo.RecordObject(this, "Select Objects");

                            activeObject = RenewActiveObject(activeObjectIds);
                            UpdateActivationOfObjects(activeObject);

                            selection = new AssetBundleGraphSelection(Vector2.zero);
                            modifyMode = ModifyMode.NONE;

                            HandleUtility.Repaint();
                            Event.current.Use();
                            break;
                        }

                    case ModifyMode.SCALING: {
                            modifyMode = ModifyMode.NONE;
                            break;
                        }
                    }
                    break;
                }
            }
        }
Ejemplo n.º 45
0
 /// <summary>
 /// Checks if a gameobject is in the objectpool.
 /// </summary>
 /// <param name="item">The gameobject to check.</param>
 /// <returns>True if the gameobject is in the objectpool, otherwise false.</returns>
 public bool Contains(GameObject item)
 {
     return(ActiveObject.Contains(item) || DespawnedElements.Contains(item));
 }
        public void OnGUI()
        {
            DrawGUIToolBar();

            using (new EditorGUILayout.HorizontalScope()) {
                DrawGUINodeGraph();
                if(showErrors) {
                    DrawGUINodeErrors();
                }
            }

            /*
                Event Handling:
                - Supporting dragging script into window to create node.
                - Context Menu
                - NodeGUI connection.
                - Command(Delete, Copy, etc...)
            */
            switch (Event.current.type) {
                // detect dragging script then change interface to "(+)" icon.
                case EventType.DragUpdated: {
                    var refs = DragAndDrop.objectReferences;

                    foreach (var refe in refs) {
                        if (refe.GetType() == typeof(UnityEditor.MonoScript)) {
                            Type scriptTypeInfo = ((MonoScript)refe).GetClass();
                            Type inheritedTypeInfo = GetDragAndDropAcceptableScriptType(scriptTypeInfo);

                            if (inheritedTypeInfo != null) {
                                // at least one asset is script. change interface.
                                DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                                break;
                            }
                        }
                    }
                    break;
                }

                // script drop on editor.
                case EventType.DragPerform: {
                    var pathAndRefs = new Dictionary<string, object>();
                    for (var i = 0; i < DragAndDrop.paths.Length; i++) {
                        var path = DragAndDrop.paths[i];
                        var refe = DragAndDrop.objectReferences[i];
                        pathAndRefs[path] = refe;
                    }
                    var shouldSave = false;
                    foreach (var item in pathAndRefs) {
                        var refe = (MonoScript)item.Value;
                        if (refe.GetType() == typeof(UnityEditor.MonoScript)) {
                            Type scriptTypeInfo = refe.GetClass();
                            Type inheritedTypeInfo = GetDragAndDropAcceptableScriptType(scriptTypeInfo);

                            if (inheritedTypeInfo != null) {
                                var dropPos = Event.current.mousePosition;
                                var scriptName = refe.name;
                                var scriptClassName = scriptName;
                                AddNodeFromCode(scriptName, scriptClassName, inheritedTypeInfo, dropPos.x, dropPos.y);
                                shouldSave = true;
                            }
                        }
                    }

                    if (shouldSave) {
                        SaveGraphWithReload();
                    }
                    break;
                }

                // show context menu
                case EventType.ContextClick: {
                    var rightClickPos = Event.current.mousePosition;
                    var menu = new GenericMenu();
                    foreach (var menuItemStr in AssetBundleGraphSettings.GUI_Menu_Item_TargetGUINodeDict.Keys) {
                        var kind = AssetBundleGraphSettings.GUI_Menu_Item_TargetGUINodeDict[menuItemStr];
                        menu.AddItem(
                            new GUIContent(menuItemStr),
                            false,
                            () => {
                                AddNodeFromGUI(kind, rightClickPos.x, rightClickPos.y);
                                SaveGraphWithReload();
                                Repaint();
                            }
                        );
                    }
                    menu.ShowAsContext();
                    break;
                }

                /*
                    Handling mouseUp at empty space.
                */
                case EventType.MouseUp: {
                    modifyMode = ModifyMode.NONE;
                    HandleUtility.Repaint();

                    if (activeObject.idPosDict.ReadonlyDict().Any()) {
                        Undo.RecordObject(this, "Unselect");

                        foreach (var activeObjectId in activeObject.idPosDict.ReadonlyDict().Keys) {
                            // unselect all.
                            foreach (var node in nodes) {
                                if (activeObjectId == node.Id) {
                                    node.SetInactive();
                                }
                            }
                            foreach (var connection in connections) {
                                if (activeObjectId == connection.Id) {
                                    connection.SetInactive();
                                }
                            }
                        }

                        activeObject = RenewActiveObject(new List<string>());

                    }

                    // clear inspector
                    if( Selection.activeObject is NodeGUIInspectorHelper || Selection.activeObject is ConnectionGUIInspectorHelper) {
                        Selection.activeObject = null;
                    }

                    break;
                }

                /*
                    scale up or down by command & + or command & -.
                */
                case EventType.KeyDown: {
                    if (Event.current.command) {
                        if (Event.current.shift && Event.current.keyCode == KeyCode.Semicolon) {
                            NodeGUI.scaleFactor = NodeGUI.scaleFactor + 0.1f;
                            if (NodeGUI.scaleFactor < NodeGUI.SCALE_MIN) NodeGUI.scaleFactor = NodeGUI.SCALE_MIN;
                            if (NodeGUI.SCALE_MAX < NodeGUI.scaleFactor) NodeGUI.scaleFactor = NodeGUI.SCALE_MAX;
                            Event.current.Use();
                            break;
                        }

                        if (Event.current.keyCode == KeyCode.Minus) {
                            NodeGUI.scaleFactor = NodeGUI.scaleFactor - 0.1f;
                            if (NodeGUI.scaleFactor < NodeGUI.SCALE_MIN) NodeGUI.scaleFactor = NodeGUI.SCALE_MIN;
                            if (NodeGUI.SCALE_MAX < NodeGUI.scaleFactor) NodeGUI.scaleFactor = NodeGUI.SCALE_MAX;
                            Event.current.Use();
                            break;
                        }
                    }
                    break;
                }

                case EventType.ValidateCommand:
                {
                    switch (Event.current.commandName) {
                    // Delete active node or connection.
                    case "Delete": {
                            if (activeObject.idPosDict.ReadonlyDict().Any()) {
                                Event.current.Use();
                            }
                            break;
                        }

                    case "Copy": {
                            if (activeObject.idPosDict.ReadonlyDict().Any()) {
                                Event.current.Use();
                            }
                            break;
                        }

                    case "Cut": {
                            if (activeObject.idPosDict.ReadonlyDict().Any()) {
                                Event.current.Use();
                            }
                            break;
                        }

                    case "Paste": {
                            if(copyField.datas == null)  {
                                break;
                            }

                            if (copyField.datas.Any()) {
                                Event.current.Use();
                            }
                            break;
                        }

                    case "SelectAll": {
                            Event.current.Use();
                            break;
                        }
                    }
                    break;
                }

                case EventType.ExecuteCommand:
                {
                    switch (Event.current.commandName) {
                        // Delete active node or connection.
                        case "Delete": {

                            if (!activeObject.idPosDict.ReadonlyDict().Any()) break;
                            Undo.RecordObject(this, "Delete Selection");

                            foreach (var targetId in activeObject.idPosDict.ReadonlyDict().Keys) {
                                DeleteNode(targetId);
                                DeleteConnectionById(targetId);
                            }

                            SaveGraphWithReload();

                            activeObject = RenewActiveObject(new List<string>());
                            UpdateActivationOfObjects(activeObject);

                            Event.current.Use();
                            break;
                        }

                        case "Copy": {
                            if (!activeObject.idPosDict.ReadonlyDict().Any()) {
                                break;
                            }

                            Undo.RecordObject(this, "Copy Selection");

                            var targetNodeIds = activeObject.idPosDict.ReadonlyDict().Keys.ToList();
                            var targetNodeJsonRepresentations = JsonRepresentations(targetNodeIds);
                            copyField = new CopyField(targetNodeJsonRepresentations, CopyType.COPYTYPE_COPY);

                            Event.current.Use();
                            break;
                        }

                        case "Cut": {
                            if (!activeObject.idPosDict.ReadonlyDict().Any()) {
                                break;
                            }

                            Undo.RecordObject(this, "Cut Selection");
                            var targetNodeIds = activeObject.idPosDict.ReadonlyDict().Keys.ToList();
                            var targetNodeJsonRepresentations = JsonRepresentations(targetNodeIds);
                            copyField = new CopyField(targetNodeJsonRepresentations, CopyType.COPYTYPE_CUT);

                            foreach (var targetId in activeObject.idPosDict.ReadonlyDict().Keys) {
                                DeleteNode(targetId);
                                DeleteConnectionById(targetId);
                            }

                            SaveGraphWithReload();
                            InitializeGraph();

                            activeObject = RenewActiveObject(new List<string>());
                            UpdateActivationOfObjects(activeObject);

                            Event.current.Use();
                            break;
                        }

                        case "Paste": {

                            if(copyField.datas == null)  {
                                break;
                            }

                            var nodeNames = nodes.Select(node => node.Name).ToList();
                            var duplicatingData = new List<NodeGUI>();

                            if (copyField.datas.Any()) {
                                var pasteType = copyField.type;
                                foreach (var copyFieldData in copyField.datas) {
                                    var nodeJsonDict = AssetBundleGraph.Json.Deserialize(copyFieldData) as Dictionary<string, object>;
                                    var pastingNode = new NodeGUI(new NodeData(nodeJsonDict));
                                    var pastingNodeName = pastingNode.Name;

                                    var nameOverlapping = nodeNames.Where(name => name == pastingNodeName).ToList();

              									switch (pasteType) {
              										case CopyType.COPYTYPE_COPY: {
                                            if (2 <= nameOverlapping.Count) {
                                                continue;
                                            }
              											break;
              										}
              										case CopyType.COPYTYPE_CUT: {
                                            if (1 <= nameOverlapping.Count) {
                                                continue;
                                            }
              											break;
              										}
              									}

              									duplicatingData.Add(pastingNode);
                                }
                            }
                            // consume copyField
                            copyField.datas = null;

                            if (!duplicatingData.Any()) {
                                break;
                            }

                            Undo.RecordObject(this, "Paste");
                            foreach (var newNode in duplicatingData) {
                                DuplicateNode(newNode);
                            }

                            SaveGraphWithReload();
                            InitializeGraph();

                            Event.current.Use();
                            break;
                        }

                        case "SelectAll": {
                            Undo.RecordObject(this, "Select All Objects");

                            var nodeIds = nodes.Select(node => node.Id).ToList();
                            activeObject = RenewActiveObject(nodeIds);

                            // select all.
                            foreach (var node in nodes) {
                                node.SetActive();
                            }
                            foreach (var connection in connections) {
                                connection.SetActive();
                            }

                            Event.current.Use();
                            break;
                        }

                        default: {
                            break;
                        }
                    }
                    break;
                }
            }
        }
        public void HandleConnectionEvent(ConnectionEvent e)
        {
            switch (modifyMode) {
                case ModifyMode.NONE: {
                    switch (e.eventType) {

                        case ConnectionEvent.EventType.EVENT_CONNECTION_TAPPED: {

                            if (Event.current.shift) {
                                Undo.RecordObject(this, "Select Objects");

                                var objectId = string.Empty;

                                if (e.eventSourceCon != null) {
                                    objectId = e.eventSourceCon.Id;
                                    if (!activeObject.idPosDict.ReadonlyDict().Any()) {
                                        activeObject = RenewActiveObject(new List<string>{objectId});
                                    } else {
                                        var additiveIds = new List<string>(activeObject.idPosDict.ReadonlyDict().Keys);

                                        // already contained, cancel.
                                        if (additiveIds.Contains(objectId)) {
                                            additiveIds.Remove(objectId);
                                        } else {
                                            additiveIds.Add(objectId);
                                        }

                                        activeObject = RenewActiveObject(additiveIds);
                                    }
                                }

                                UpdateActivationOfObjects(activeObject);
                                break;
                            }

                            Undo.RecordObject(this, "Select Connection");

                            var tappedConnectionId = e.eventSourceCon.Id;
                            foreach (var con in connections) {
                                if (con.Id == tappedConnectionId) {
                                    con.SetActive();
                                    activeObject = RenewActiveObject(new List<string>{con.Id});
                                } else {
                                    con.SetInactive();
                                }
                            }

                            // set deactive for all nodes.
                            foreach (var node in nodes) {
                                node.SetInactive();
                            }
                            break;
                        }
                        case ConnectionEvent.EventType.EVENT_CONNECTION_DELETED: {
                            Undo.RecordObject(this, "Delete Connection");

                            var deletedConnectionId = e.eventSourceCon.Id;

                            DeleteConnectionById(deletedConnectionId);

                            SaveGraphWithReload();
                            Repaint();
                            break;
                        }
                        default: {
                            break;
                        }
                    }
                    break;
                }
            }
        }
Ejemplo n.º 48
0
        void PlayerCollidesWithEnemies(List<int> playersIDs)
        {
            foreach (int p in playersIDs) {
            PlayerObj player = AllPlayers [p];

            foreach (Enemy enemy in Enemies) {

              // If enemy Solid, and feet on enemy
              if (enemy.IsSolid () && player.Get2PixelBelowRect ().Intersects (enemy.GetTopOfEnemy ()))
            player.OnGround (enemy);

              // If hitbox hits enemy
              if (player.HitBox.Intersects (enemy.HitBox)) {
            ActiveObject[] playerEnemy = new ActiveObject[] {
              player,
              enemy
            };

            Game.EventMgr.Notify (Event.PlayerHitByEnemy, playerEnemy);
              }
            }
              }
        }
Ejemplo n.º 49
0
        public void OnGUI()
        {
            using (new EditorGUILayout.HorizontalScope(GUI.skin.box)) {
                if (GUILayout.Button(reloadButtonTexture, GUILayout.Height(18))) {
                    Setup();
                }

                if (GUILayout.Button("Build (active build target is " + EditorUserBuildSettings.activeBuildTarget + ")", GUILayout.Height(18))) {
                    Run();
                }
            }

            /*
                scroll view.
            */
            // var scaledScrollPos = Node.ScaleEffect(scrollPos);
            scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
            // scrollPos = scrollPos + (movedScrollPos - scaledScrollPos);
            {

                // draw node window x N.
                {
                    BeginWindows();

                    nodes.ForEach(node => node.DrawNode());

                    EndWindows();
                }

                // draw connection input point marks.
                foreach (var node in nodes) {
                    node.DrawConnectionInputPointMark(currentEventSource, modifyMode == ModifyMode.CONNECT_STARTED);
                }

                // draw connections.
                foreach (var con in connections) {
                    if (connectionThroughputs.ContainsKey(con.connectionId)) {
                        var throughputListDict = connectionThroughputs[con.connectionId];
                        con.DrawConnection(nodes, throughputListDict);
                    } else {
                        con.DrawConnection(nodes, new Dictionary<string, List<ThroughputAsset>>());
                    }
                }

                // draw connection output point marks.
                foreach (var node in nodes) {
                    node.DrawConnectionOutputPointMark(currentEventSource, modifyMode == ModifyMode.CONNECT_STARTED, Event.current);
                }

                /*
                    draw connecting line if modifing connection.
                */
                switch (modifyMode) {
                    case ModifyMode.CONNECT_STARTED: {
                        // from start node to mouse.
                        DrawStraightLineFromCurrentEventSourcePointTo(Event.current.mousePosition, currentEventSource);

                        break;
                    }
                    case ModifyMode.CONNECT_ENDED: {
                        // do nothing
                        break;
                    }
                    case ModifyMode.SELECTION_STARTED: {
                        GUI.DrawTexture(new Rect(selection.x, selection.y, Event.current.mousePosition.x - selection.x, Event.current.mousePosition.y - selection.y), selectionTex);
                        break;
                    }
                }

                /*
                    mouse drag event handling.
                */
                switch (Event.current.type) {

                    // draw line while dragging.
                    case EventType.MouseDrag: {
                        switch (modifyMode) {
                            case ModifyMode.CONNECT_ENDED: {
                                switch (Event.current.button) {
                                    case 0:{// left click
                                        if (Event.current.command) {
                                            scalePoint = new ScalePoint(Event.current.mousePosition, Node.scaleFactor, 0);
                                            modifyMode = ModifyMode.SCALING_STARTED;
                                            break;
                                        }

                                        selection = new AssetBundleGraphSelection(Event.current.mousePosition);
                                        modifyMode = ModifyMode.SELECTION_STARTED;
                                        break;
                                    }
                                    case 2:{// middle click.
                                        scalePoint = new ScalePoint(Event.current.mousePosition, Node.scaleFactor, 0);
                                        modifyMode = ModifyMode.SCALING_STARTED;
                                        break;
                                    }
                                }
                                break;
                            }
                            case ModifyMode.SELECTION_STARTED: {
                                // do nothing.
                                break;
                            }
                            case ModifyMode.SCALING_STARTED: {
                                var baseDistance = (int)Vector2.Distance(Event.current.mousePosition, new Vector2(scalePoint.x, scalePoint.y));
                                var distance = baseDistance / Node.SCALE_WIDTH;
                                var direction = (0 < Event.current.mousePosition.y - scalePoint.y);

                                if (!direction) distance = -distance;

                                // var before = Node.scaleFactor;
                                Node.scaleFactor = scalePoint.startScale + (distance * Node.SCALE_RATIO);

                                if (Node.scaleFactor < Node.SCALE_MIN) Node.scaleFactor = Node.SCALE_MIN;
                                if (Node.SCALE_MAX < Node.scaleFactor) Node.scaleFactor = Node.SCALE_MAX;
                                break;
                            }
                        }

                        HandleUtility.Repaint();
                        Event.current.Use();
                        break;
                    }
                }

                /*
                    mouse up event handling.
                    use rawType for detect for detectiong mouse-up which raises outside of window.
                */
                switch (Event.current.rawType) {
                    case EventType.MouseUp: {
                        switch (modifyMode) {
                            /*
                                select contained nodes & connections.
                            */
                            case ModifyMode.SELECTION_STARTED: {
                                var x = 0f;
                                var y = 0f;
                                var width = 0f;
                                var height = 0f;

                                if (Event.current.mousePosition.x < selection.x) {
                                    x = Event.current.mousePosition.x;
                                    width = selection.x - Event.current.mousePosition.x;
                                }
                                if (selection.x < Event.current.mousePosition.x) {
                                    x = selection.x;
                                    width = Event.current.mousePosition.x - selection.x;
                                }

                                if (Event.current.mousePosition.y < selection.y) {
                                    y = Event.current.mousePosition.y;
                                    height = selection.y - Event.current.mousePosition.y;
                                }
                                if (selection.y < Event.current.mousePosition.y) {
                                    y = selection.y;
                                    height = Event.current.mousePosition.y - selection.y;
                                }

                                var activeObjectIds = new List<string>();

                                var selectedRect = new Rect(x, y, width, height);

                                foreach (var node in nodes) {
                                    var nodeRect = new Rect(node.GetRect());
                                    nodeRect.x = nodeRect.x * Node.scaleFactor;
                                    nodeRect.y = nodeRect.y * Node.scaleFactor;
                                    nodeRect.width = nodeRect.width * Node.scaleFactor;
                                    nodeRect.height = nodeRect.height * Node.scaleFactor;
                                    // get containd nodes,
                                    if (nodeRect.Overlaps(selectedRect)) {
                                        activeObjectIds.Add(node.nodeId);
                                    }
                                }

                                foreach (var connection in connections) {
                                    // get contained connection badge.
                                    if (connection.GetRect().Overlaps(selectedRect)) {
                                        activeObjectIds.Add(connection.connectionId);
                                    }
                                }

                                if (Event.current.shift) {
                                    // add current active object ids to new list.
                                    foreach (var alreadySelectedObjectId in activeObject.idPosDict.ReadonlyDict().Keys) {
                                        if (!activeObjectIds.Contains(alreadySelectedObjectId)) activeObjectIds.Add(alreadySelectedObjectId);
                                    }
                                } else {
                                    // do nothing, means cancel selections if nodes are not contained by selection.
                                }

                                Undo.RecordObject(this, "Select Objects");

                                activeObject = RenewActiveObject(activeObjectIds);
                                UpdateActivationOfObjects(activeObject);

                                selection = new AssetBundleGraphSelection(Vector2.zero);
                                modifyMode = ModifyMode.CONNECT_ENDED;

                                HandleUtility.Repaint();
                                Event.current.Use();
                                break;
                            }

                            case ModifyMode.SCALING_STARTED: {
                                modifyMode = ModifyMode.CONNECT_ENDED;
                                break;
                            }
                        }
                        break;
                    }
                }

                // set rect for scroll.
                if (nodes.Any()) {
                    GUILayoutUtility.GetRect(new GUIContent(string.Empty), GUIStyle.none, GUILayout.Width(spacerRectRightBottom.x), GUILayout.Height(spacerRectRightBottom.y));
                }
            }
            EditorGUILayout.EndScrollView();

            /*
                detect
                    dragging some script into window.
                    right click.
                    connection end mouse up.
                    command(Delete, Copy, and more)
            */
            switch (Event.current.type) {
                // detect dragging script then change interface to "(+)" icon.
                case EventType.DragUpdated: {
                    var refs = DragAndDrop.objectReferences;

                    foreach (var refe in refs) {
                        if (refe.GetType() == typeof(UnityEditor.MonoScript)) {
                            var type = ((MonoScript)refe).GetClass();

                            var inherited = IsAcceptableScriptType(type);

                            if (inherited != null) {
                                // at least one asset is script. change interface.
                                DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                                break;
                            }
                        }
                    }
                    break;
                }

                // script drop on editor.
                case EventType.DragPerform: {
                    var pathAndRefs = new Dictionary<string, object>();
                    for (var i = 0; i < DragAndDrop.paths.Length; i++) {
                        var path = DragAndDrop.paths[i];
                        var refe = DragAndDrop.objectReferences[i];
                        pathAndRefs[path] = refe;
                    }
                    var shouldSave = false;
                    foreach (var item in pathAndRefs) {
                        var path = item.Key;
                        var refe = (MonoScript)item.Value;
                        if (refe.GetType() == typeof(UnityEditor.MonoScript)) {
                            var type = refe.GetClass();
                            var inherited = IsAcceptableScriptType(type);

                            if (inherited != null) {
                                var dropPos = Event.current.mousePosition;
                                var scriptName = refe.name;
                                var scriptType = scriptName;// name = type.
                                var scriptPath = path;
                                AddNodeFromCode(scriptName, scriptType, scriptPath, inherited, Guid.NewGuid().ToString(), dropPos.x, dropPos.y);
                                shouldSave = true;
                            }
                        }
                    }

                    if (shouldSave) SaveGraphWithReload();
                    break;
                }

                // show context menu
                case EventType.ContextClick: {
                    var rightClickPos = Event.current.mousePosition;
                    var menu = new GenericMenu();
                    foreach (var menuItemStr in AssetBundleGraphSettings.GUI_Menu_Item_TargetGUINodeDict.Keys) {
                        var targetGUINodeNameStr = AssetBundleGraphSettings.GUI_Menu_Item_TargetGUINodeDict[menuItemStr];
                        menu.AddItem(
                            new GUIContent(menuItemStr),
                            false,
                            () => {
                                AddNodeFromGUI(string.Empty, targetGUINodeNameStr, Guid.NewGuid().ToString(), rightClickPos.x, rightClickPos.y);
                                SaveGraphWithReload();
                                Repaint();
                            }
                        );
                    }
                    menu.ShowAsContext();
                    break;
                }

                /*
                    handling mouse up
                         -> drag released -> release modifyMode.
                */
                case EventType.MouseUp: {
                    modifyMode = ModifyMode.CONNECT_ENDED;
                    HandleUtility.Repaint();

                    if (activeObject.idPosDict.ReadonlyDict().Any()) {
                        Undo.RecordObject(this, "Unselect");

                        foreach (var activeObjectId in activeObject.idPosDict.ReadonlyDict().Keys) {
                            // unselect all.
                            foreach (var node in nodes) {
                                if (activeObjectId == node.nodeId) node.SetInactive();
                            }
                            foreach (var connection in connections) {
                                if (activeObjectId == connection.connectionId) connection.SetInactive();
                            }
                        }

                        activeObject = RenewActiveObject(new List<string>());
                    }

                    break;
                }

                /*
                    scale up or down by command & + or command & -.
                */
                case EventType.KeyDown: {
                    if (Event.current.command) {
                        if (Event.current.shift && Event.current.keyCode == KeyCode.Semicolon) {
                            Node.scaleFactor = Node.scaleFactor + 0.1f;
                            if (Node.scaleFactor < Node.SCALE_MIN) Node.scaleFactor = Node.SCALE_MIN;
                            if (Node.SCALE_MAX < Node.scaleFactor) Node.scaleFactor = Node.SCALE_MAX;
                            Event.current.Use();
                            break;
                        }

                        if (Event.current.keyCode == KeyCode.Minus) {
                            Node.scaleFactor = Node.scaleFactor - 0.1f;
                            if (Node.scaleFactor < Node.SCALE_MIN) Node.scaleFactor = Node.SCALE_MIN;
                            if (Node.SCALE_MAX < Node.scaleFactor) Node.scaleFactor = Node.SCALE_MAX;
                            Event.current.Use();
                            break;
                        }
                    }
                    break;
                }

                case EventType.ValidateCommand: {
                    switch (Event.current.commandName) {
                        // Delete active node or connection.
                        case "Delete": {

                            if (!activeObject.idPosDict.ReadonlyDict().Any()) break;
                            Undo.RecordObject(this, "Delete Selection");

                            foreach (var targetId in activeObject.idPosDict.ReadonlyDict().Keys) {
                                DeleteNode(targetId);
                                DeleteConnectionById(targetId);
                            }

                            SaveGraphWithReload();
                            InitializeGraph();

                            activeObject = RenewActiveObject(new List<string>());
                            UpdateActivationOfObjects(activeObject);

                            Event.current.Use();
                            break;
                        }

                        case "Copy": {
                            if (!activeObject.idPosDict.ReadonlyDict().Any()) {
                                break;
                            }

                            Undo.RecordObject(this, "Copy Selection");

                            var targetNodeIds = activeObject.idPosDict.ReadonlyDict().Keys.ToList();
                            var targetNodeJsonRepresentations = JsonRepresentations(targetNodeIds);
                            copyField = new CopyField(targetNodeJsonRepresentations, CopyType.COPYTYPE_COPY);

                            Event.current.Use();
                            break;
                        }

                        case "Cut": {
                            if (!activeObject.idPosDict.ReadonlyDict().Any()) {
                                break;
                            }

                            Undo.RecordObject(this, "Cut Selection");
                            var targetNodeIds = activeObject.idPosDict.ReadonlyDict().Keys.ToList();
                            var targetNodeJsonRepresentations = JsonRepresentations(targetNodeIds);
                            copyField = new CopyField(targetNodeJsonRepresentations, CopyType.COPYTYPE_CUT);

                            foreach (var targetId in activeObject.idPosDict.ReadonlyDict().Keys) {
                                DeleteNode(targetId);
                                DeleteConnectionById(targetId);
                            }

                            SaveGraphWithReload();
                            InitializeGraph();

                            activeObject = RenewActiveObject(new List<string>());
                            UpdateActivationOfObjects(activeObject);

                            Event.current.Use();
                            break;
                        }

                        case "Paste": {
                            var nodeNames = nodes.Select(node => node.name).ToList();
                            var duplicatingData = new List<Node>();

                            if (copyField.datas.Any()) {
                                var pasteType = copyField.type;
                                foreach (var copyFieldData in copyField.datas) {
                                    var nodeJsonDict = Json.Deserialize(copyFieldData) as Dictionary<string, object>;
                                    var pastingNode = NodeFromJsonDict(nodes.Count, nodeJsonDict);
                                    var pastingNodeName = pastingNode.name;

                                    var nameOverlapping = nodeNames.Where(name => name == pastingNodeName).ToList();

              									switch (pasteType) {
              										case CopyType.COPYTYPE_COPY: {
              											if (2 <= nameOverlapping.Count) continue;
              											break;
              										}
              										case CopyType.COPYTYPE_CUT: {
              											if (1 <= nameOverlapping.Count) continue;
              											break;
              										}
              									}

              									duplicatingData.Add(pastingNode);
                                }
                            }

                            if (!duplicatingData.Any()) break;

                            Undo.RecordObject(this, "Paste");
                            foreach (var newNode in duplicatingData) {
                                DuplicateNode(newNode);
                            }

                            SaveGraphWithReload();
                            InitializeGraph();

                            Event.current.Use();
                            break;
                        }

                        case "SelectAll": {
                            Undo.RecordObject(this, "Select All Objects");

                            var nodeIds = nodes.Select(node => node.nodeId).ToList();
                            activeObject = RenewActiveObject(nodeIds);

                            // select all.
                            foreach (var node in nodes) {
                                node.SetActive();
                            }
                            foreach (var connection in connections) {
                                connection.SetActive();
                            }

                            Event.current.Use();
                            break;
                        }

                        default: {
                            break;
                        }
                    }
                    break;
                }
            }
        }
Ejemplo n.º 50
0
 void EnemyCollidesWithCage()
 {
     foreach (Cage cage in Cages) {
     foreach (Enemy enemy in Enemies) {
       if (enemy.IsBeingThrown () && cage.HitBox.Intersects (enemy.HitBox)) {
     ActiveObject[] cageEnemy = new ActiveObject[] { cage, enemy };
     Game.EventMgr.Notify (Event.EnemyHitCage, cageEnemy);
       }
     }
       }
 }
Ejemplo n.º 51
0
        public void OnGUI()
        {
            EditorGUILayout.BeginHorizontal(GUI.skin.box);
            {
                if (!reloadButtonTexture) {
                    if (GUILayout.Button("Reload")) {
                        Reload();
                    }
                } else {
                    if (GUILayout.Button(reloadButtonTexture)) {
                        Reload();
                    }
                }

                if (GUILayout.Button("Build")) {
                    Run();
                }
            }
            EditorGUILayout.EndHorizontal();

            /*
                scroll view
            */
            scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
            {
                // draw node window x N
                {
                    BeginWindows();

                    nodes.ForEach(node => node.DrawNode());

                    EndWindows();
                }

                foreach (var con in connections) {
                    if (connectionThroughputs.ContainsKey(con.connectionId)) {
                        var throughputListDict = connectionThroughputs[con.connectionId];
                        con.DrawConnection(nodes, throughputListDict);
                    } else {
                        con.DrawConnection(nodes, new Dictionary<string, List<string>>());
                    }
                }

                /*
                    draw line if modifing connection.
                */
                switch (modifyMode) {
                    case ModifyMode.CONNECT_STARTED: {
                        // from start node to mouse.
                        DrawStraightLineFromCurrentEventSourcePointTo(Event.current.mousePosition);
                        break;
                    }
                    case ModifyMode.CONNECT_ENDED: {
                        // do nothing
                        break;
                    }
                }

                // set rect for scroll.
                if (nodes.Any()) {
                    GUILayoutUtility.GetRect(new GUIContent(string.Empty), GUIStyle.none, GUILayout.Width(spacerRectRightBottom.x), GUILayout.Height(spacerRectRightBottom.y));
                }
            }
            EditorGUILayout.EndScrollView();

            /*
                detect dragging script then change interface to "(+)" icon.
            */
            if (Event.current.type == EventType.DragUpdated) {
                var refs = DragAndDrop.objectReferences;

                foreach (var refe in refs) {
                    if (refe.GetType() == typeof(UnityEditor.MonoScript)) {
                        var type = ((MonoScript)refe).GetClass();

                        var inherited = IsAcceptableScriptType(type);

                        if (inherited != null) {
                            // at least one asset is script. change interface.
                            DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                            break;
                        }
                    }
                }
            }

            /*
                script drop on editor.
            */
            if (Event.current.type == EventType.DragPerform) {
                var pathAndRefs = new Dictionary<string, object>();
                for (var i = 0; i < DragAndDrop.paths.Length; i++) {
                    var path = DragAndDrop.paths[i];
                    var refe = DragAndDrop.objectReferences[i];
                    pathAndRefs[path] = refe;
                }
                var shouldSave = false;
                foreach (var item in pathAndRefs) {
                    var path = item.Key;
                    var refe = (MonoScript)item.Value;
                    if (refe.GetType() == typeof(UnityEditor.MonoScript)) {
                        var type = refe.GetClass();
                        var inherited = IsAcceptableScriptType(type);

                        if (inherited != null) {
                            var dropPos = Event.current.mousePosition;
                            var scriptName = refe.name;
                            var scriptType = scriptName;// name = type.
                            var scriptPath = path;
                            AddNodeFromCode(scriptName, scriptType, scriptPath, inherited, Guid.NewGuid().ToString(), dropPos.x, dropPos.y);
                            shouldSave = true;
                        }
                    }
                }

                if (shouldSave) SaveGraphWithReload();
            }

            /*
                right click -> open menu.
            */
            if (Event.current.type == EventType.MouseUp && Event.current.button == 1) {
                var rightClickPos = Event.current.mousePosition;
                var menu = new GenericMenu();
                foreach (var menuItemStr in AssetGraphSettings.GUI_Menu_Item_TargetGUINodeDict.Keys) {
                    var targetGUINodeNameStr = AssetGraphSettings.GUI_Menu_Item_TargetGUINodeDict[menuItemStr];
                    menu.AddItem(
                        new GUIContent(menuItemStr),
                        false,
                        () => {
                            AddNodeFromGUI(string.Empty, targetGUINodeNameStr, Guid.NewGuid().ToString(), rightClickPos.x, rightClickPos.y);
                            SaveGraphWithReload();
                        }
                    );
                }
                menu.ShowAsContext();
            }

            /*
                Delete active node or connection.
            */
            if (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "Delete") {
                if (activeObject.kind != AssetGraphSettings.ObjectKind.NONE) {
                    switch (activeObject.kind) {
                        case AssetGraphSettings.ObjectKind.NODE: {
                            var nodeId = activeObject.id;
                            DeleteNode(nodeId);

                            SaveGraphWithReload();
                            InitializeGraph();
                            break;
                        }
                        case AssetGraphSettings.ObjectKind.CONNECTION: {

                            Undo.RecordObject(this, "Delete Connection");

                            var connectionId = activeObject.id;
                            DeleteConnectionById(connectionId);
                            break;
                        }
                    }
                    SaveGraphWithReload();
                    Repaint();

                    activeObject = new ActiveObject(AssetGraphSettings.ObjectKind.NONE, string.Empty, Vector2.zero);
                }
                Event.current.Use();
            }

            if (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "Copy") {
                Debug.LogError("copy");
                Event.current.Use();
            }

            if (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "Cut") {
                Debug.LogError("cut");
                Event.current.Use();
            }

            if (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "Paste") {
                Debug.LogError("paste");
                Event.current.Use();
            }
        }
    IEnumerator Start()
    {
        Setup ();
            // Retry setup if references were cleared post-add

        if (camera == null)
        {
            Debug.LogError ("No camera assigned. Please correct and restart.", this);
            enabled = false;
            yield break;
        }

        if (player == null)
        {
            player = GetComponent<Player> ();
        }

        while (Application.isPlaying)
        // Update the currently focues object from the list
        {
            Vector3 vectorToCurrent = currentObject == null ? Vector3.zero : currentObject.transform.position - transform.position;

            if (
                currentObject != null && (
                    !nearbyObjects.Contains (currentObject) ||
                    Vector3.Angle (vectorToCurrent, transform.forward) > camera.fieldOfView * 0.5f
                )
            )
            // If the current object is out of focus, clear it
            {
                currentObject = null;
            }

            foreach (ActiveObject activeObject in nearbyObjects)
            {
                Vector3 vectorToObject = activeObject.transform.position - transform.position;

                if (
                    Vector3.Angle (vectorToObject, transform.forward) > camera.fieldOfView * 0.5f &&
                    !(vectorToObject.magnitude < closeProximity)
                )
                // Out of focus, ignore
                {
                    continue;
                }

                if (currentObject == null)
                // No current object? We'll set this as current for now.
                {
                    currentObject = activeObject;
                    vectorToCurrent = vectorToObject;
                    continue;
                }

                float distanceDifference = Mathf.Abs (vectorToCurrent.magnitude - vectorToObject.magnitude);
                float angularDifference = Mathf.Abs (Vector3.Angle (vectorToCurrent, transform.forward) - Vector3.Angle (vectorToObject, transform.forward));
                if (
                    vectorToCurrent.magnitude > vectorToObject.magnitude &&
                        distanceDifference > objectSplitDistance &&
                    Vector3.Angle (vectorToCurrent, transform.forward) > Vector3.Angle (vectorToObject, transform.forward) &&
                        angularDifference > objectSplitAngle
                )
                // If the object is closer distance and angle wise - and by enough, make that the current object
                {
                    currentObject = activeObject;
                    vectorToCurrent = vectorToObject;
                }
            }

            yield return new WaitForSeconds (1.0f / objectUpdateFramerate);
                // Maintain specified framerate
        }
    }
Ejemplo n.º 53
0
        public List<ActiveObject> Retrieve(List<ActiveObject> returnObjects, ActiveObject obj)
        {
            Rect pRect = obj.Bounds;

              int index = GetIndex(obj);

              if (index != -1 && Nodes[0] != null)
            Nodes[index].Retrieve(returnObjects, obj);

              returnObjects.AddRange(Objects);

              return returnObjects;
        }
Ejemplo n.º 54
0
 public void Awake()
 {
     AO = GetComponent <ActiveObject>();
 }
Ejemplo n.º 55
0
        /**
            emit event from node-GUI.
        */
        private void EmitNodeEvent(OnNodeEvent e)
        {
            switch (modifyMode) {
                case ModifyMode.CONNECT_STARTED: {
                    switch (e.eventType) {
                        /*
                            handling
                        */
                        case OnNodeEvent.EventType.EVENT_NODE_HANDLING: {

                            /*
                                animate connectionPoint under mouse if this connectionPoint is able to accept this kind of connection.
                            */
                            if (false) {
                                var candidateNodes = NodesUnderPosition(e.globalMousePosition);

                                if (!candidateNodes.Any()) break;
                                var nodeUnderMouse = candidateNodes.Last();

                                // ignore if target node is source itself.
                                if (nodeUnderMouse == e.eventSourceNode) break;

                                var candidatePoints = nodeUnderMouse.ConnectionPointUnderGlobalPos(e.globalMousePosition);

                                var sourcePoint = currentEventSource.eventSourceConnectionPoint;

                                // limit by connectable or not.
                                var connectableCandidates = candidatePoints.Where(point => IsConnectablePointFromTo(sourcePoint, point)).ToList();
                                if (!connectableCandidates.Any()) break;

                                // connectable point is exist. change line color.

                                // or, do something..
                                Debug.Log("connectable!");
                            }
                            break;
                        }

                        /*
                            drop detected.
                        */
                        case OnNodeEvent.EventType.EVENT_NODE_DROPPED: {
                            // finish connecting mode.
                            modifyMode = ModifyMode.CONNECT_ENDED;

                            /*
                                connect when dropped target is connectable from start connectionPoint.
                            */
                            {
                                var candidateNodes = NodesUnderPosition(e.globalMousePosition);

                                if (!candidateNodes.Any()) break;
                                var nodeUnderMouse = candidateNodes.Last();

                                // ignore if target node is source itself.
                                if (nodeUnderMouse == e.eventSourceNode) break;

                                var candidatePoints = nodeUnderMouse.ConnectionPointUnderGlobalPos(e.globalMousePosition);

                                var sourcePoint = currentEventSource.eventSourceConnectionPoint;

                                // limit by connectable or not.
                                var connectableCandidates = candidatePoints.Where(point => IsConnectablePointFromTo(sourcePoint, point)).ToList();
                                if (!connectableCandidates.Any()) break;

                                // target point is determined.
                                var connectablePoint = connectableCandidates.First();

                                var startNode = e.eventSourceNode;
                                var startConnectionPoint = currentEventSource.eventSourceConnectionPoint;
                                var endNode = nodeUnderMouse;
                                var endConnectionPoint = connectablePoint;

                                // reverse if connected from input to output.
                                if (startConnectionPoint.isInput) {
                                    startNode = nodeUnderMouse;
                                    startConnectionPoint = connectablePoint;
                                    endNode = e.eventSourceNode;
                                    endConnectionPoint = currentEventSource.eventSourceConnectionPoint;
                                }

                                var label = startConnectionPoint.label;
                                AddConnection(label, startNode, startConnectionPoint, endNode, endConnectionPoint);
                                SaveGraphWithReload();
                            }
                            break;
                        }

                        default: {
                            // Debug.Log("unconsumed or ignored event:" + e.eventType);
                            modifyMode = ModifyMode.CONNECT_ENDED;
                            break;
                        }
                    }
                    break;
                }
                case ModifyMode.CONNECT_ENDED: {
                    switch (e.eventType) {
                        case OnNodeEvent.EventType.EVENT_NODE_TAPPED: {

                            Undo.RecordObject(this, "Select Node");

                            var tappedNodeId = e.eventSourceNode.nodeId;
                            foreach (var node in nodes) {
                                if (node.nodeId == tappedNodeId) {
                                    node.SetActive();
                                    activeObject = new ActiveObject(AssetGraphSettings.ObjectKind.NODE, node.nodeId, node.GetPos());
                                }
                                else node.SetInactive();
                            }

                            foreach (var con in connections) {
                                con.SetInactive();
                            }
                            break;
                        }

                        /*
                            start connection handling.
                        */
                        case OnNodeEvent.EventType.EVENT_NODE_HANDLE_STARTED: {
                            modifyMode = ModifyMode.CONNECT_STARTED;
                            currentEventSource = e;
                            break;
                        }

                        /*
                            connectionPoint tapped.
                        */
                        case OnNodeEvent.EventType.EVENT_CONNECTIONPOINT_RECEIVE_TAPPED: {
                            var sourcePoint = e.eventSourceConnectionPoint;

                            var relatedConnections = connections
                                .Where(
                                    con => con.IsStartAtConnectionPoint(sourcePoint) ||
                                    con.IsEndAtConnectionPoint(sourcePoint)
                                )
                                .ToList();

                            /*
                                show menuContext for control these connections.
                            */
                            var menu = new GenericMenu();
                            menu.AddItem(
                                new GUIContent("delete all connections"),
                                false,
                                () => {
                                    Undo.RecordObject(this, "Delete All Connections");

                                    foreach (var con in relatedConnections) {
                                        var conId = con.connectionId;
                                        DeleteConnectionById(conId);
                                    }

                                    SaveGraphWithReload();
                                }
                            );
                            menu.ShowAsContext();
                            break;
                        }

                        case OnNodeEvent.EventType.EVENT_CLOSE_TAPPED: {

                            var deletingNodeId = e.eventSourceNode.nodeId;
                            DeleteNode(deletingNodeId);

                            SaveGraphWithReload();
                            InitializeGraph();
                            break;
                        }

                        case OnNodeEvent.EventType.EVENT_DUPLICATE_TAPPED: {
                            var duplicateNodeId = e.eventSourceNode.nodeId;
                            var duplicatePoint = e.globalMousePosition;
                            DuplicateNode(duplicateNodeId, duplicatePoint.x, duplicatePoint.y);
                            break;
                        }

                        /*
                            releasse detected.
                                node moved.
                                node tapped.
                        */
                        case OnNodeEvent.EventType.EVENT_NODE_RELEASED: {
                            var movedNode = e.eventSourceNode;

                            var beforePosition = activeObject.pos;
                            var afterPosition = movedNode.GetPos();

                            movedNode.SetPos(beforePosition);

                            Undo.RecordObject(this, "Move Node");

                            movedNode.SetPos(afterPosition);

                            UpdateSpacerRect();
                            SaveGraph();
                            break;
                        }

                        default: {
                            // Debug.Log("unconsumed or ignored event:" + e.eventType);
                            break;
                        }
                    }
                    break;
                }
            }

            switch (e.eventType) {
                case OnNodeEvent.EventType.EVENT_CONNECTIONPOINT_UPDATED: {
                    Debug.LogError("あーポイント追加時に線が消えちゃうのが困るよな");
                    var targetNode = e.eventSourceNode;

                    var connectionsFromThisNode = connections.Where(con => con.startNodeId == targetNode.nodeId).ToList();
                    var connectionsToThisNode = connections.Where(con => con.endNodeId == targetNode.nodeId).ToList();

                    // remove connections from this node.
                    foreach (var con in connectionsFromThisNode) {
                        connections.Remove(con);
                    }

                    // remove connections to this node.
                    foreach (var con in connectionsToThisNode) {
                        connections.Remove(con);
                    }
                    break;
                }
                case OnNodeEvent.EventType.EVENT_SAVE: {
                    SaveGraphWithReload();
                    Repaint();
                    break;
                }
            }
        }
Ejemplo n.º 56
0
        /**
            emit event from node-GUI.
        */
        private void EmitNodeEvent(OnNodeEvent e)
        {
            switch (modifyMode) {
                case ModifyMode.CONNECT_STARTED: {
                    switch (e.eventType) {
                        /*
                            handling
                        */
                        case OnNodeEvent.EventType.EVENT_NODE_MOVING: {
                            // do nothing.
                            break;
                        }

                        /*
                            connection drop detected from toward node.
                        */
                        case OnNodeEvent.EventType.EVENT_NODE_CONNECTION_RAISED: {
                            // finish connecting mode.
                            modifyMode = ModifyMode.CONNECT_ENDED;

                            if (currentEventSource == null) break;

                            var sourceNode = currentEventSource.eventSourceNode;
                            var sourceConnectionPoint = currentEventSource.eventSourceConnectionPoint;

                            var targetNode = e.eventSourceNode;
                            var targetConnectionPoint = e.eventSourceConnectionPoint;

                            if (sourceNode.nodeId == targetNode.nodeId) break;

                            if (!IsConnectablePointFromTo(sourceConnectionPoint, targetConnectionPoint)) break;

                            var startNode = sourceNode;
                            var startConnectionPoint = sourceConnectionPoint;
                            var endNode = targetNode;
                            var endConnectionPoint = targetConnectionPoint;

                            // reverse if connected from input to output.
                            if (sourceConnectionPoint.isInput) {
                                startNode = targetNode;
                                startConnectionPoint = targetConnectionPoint;
                                endNode = sourceNode;
                                endConnectionPoint = sourceConnectionPoint;
                            }

                            var label = startConnectionPoint.label;
                            AddConnection(label, startNode, startConnectionPoint, endNode, endConnectionPoint);
                            SaveGraphWithReload();
                            break;
                        }

                        /*
                            connection drop detected by started node.
                        */
                        case OnNodeEvent.EventType.EVENT_NODE_CONNECTION_OVERED: {
                            // finish connecting mode.
                            modifyMode = ModifyMode.CONNECT_ENDED;

                            /*
                                connect when dropped target is connectable from start connectionPoint.
                            */
                            var candidateNodes = NodesUnderPosition(e.globalMousePosition);

                            if (!candidateNodes.Any()) break;

                            var nodeUnderMouse = candidateNodes[0];

                            // ignore if target node is source itself.
                            if (nodeUnderMouse.nodeId == e.eventSourceNode.nodeId) break;

                            var candidatePoints = nodeUnderMouse.ConnectionPointUnderGlobalPos(e.globalMousePosition);

                            if (!candidatePoints.Any()) break;

                            var sourcePoint = currentEventSource.eventSourceConnectionPoint;

                            // limit by connectable or not.
                            var connectableCandidates = candidatePoints.Where(point => IsConnectablePointFromTo(sourcePoint, point)).ToList();
                            if (!connectableCandidates.Any()) break;

                            // target point is determined.
                            var connectablePoint = connectableCandidates.First();

                            var startNode = e.eventSourceNode;
                            var startConnectionPoint = currentEventSource.eventSourceConnectionPoint;
                            var endNode = nodeUnderMouse;
                            var endConnectionPoint = connectablePoint;

                            // reverse if connected from input to output.
                            if (startConnectionPoint.isInput) {
                                startNode = nodeUnderMouse;
                                startConnectionPoint = connectablePoint;
                                endNode = e.eventSourceNode;
                                endConnectionPoint = currentEventSource.eventSourceConnectionPoint;
                            }

                            var label = startConnectionPoint.label;
                            AddConnection(label, startNode, startConnectionPoint, endNode, endConnectionPoint);
                            SaveGraphWithReload();
                            break;
                        }

                        default: {
                            // Debug.Log("unconsumed or ignored event:" + e.eventType);
                            modifyMode = ModifyMode.CONNECT_ENDED;
                            break;
                        }
                    }
                    break;
                }
                case ModifyMode.CONNECT_ENDED: {
                    switch (e.eventType) {
                        /*
                            node move detected.
                        */
                        case OnNodeEvent.EventType.EVENT_NODE_MOVING: {
                            var tappedNode = e.eventSourceNode;
                            var tappedNodeId = tappedNode.nodeId;

                            if (activeObject.idPosDict.ContainsKey(tappedNodeId)) {
                                // already active, do nothing for this node.
                                var distancePos = tappedNode.GetPos() - activeObject.idPosDict.ReadonlyDict()[tappedNodeId];

                                foreach (var node in nodes) {
                                    if (node.nodeId == tappedNodeId) continue;
                                    if (!activeObject.idPosDict.ContainsKey(node.nodeId)) continue;
                                    var relativePos = activeObject.idPosDict.ReadonlyDict()[node.nodeId] + distancePos;
                                    node.SetPos(relativePos);
                                }
                                break;
                            }

                            if (Event.current.shift) {
                                Undo.RecordObject(this, "Select Objects");

                                var additiveIds = new List<string>(activeObject.idPosDict.ReadonlyDict().Keys);

                                additiveIds.Add(tappedNodeId);

                                activeObject = RenewActiveObject(additiveIds);

                                UpdateActivationOfObjects(activeObject);
                                UpdateSpacerRect();
                                break;
                            }

                            Undo.RecordObject(this, "Select Node");
                            activeObject = RenewActiveObject(new List<string>{tappedNodeId});
                            UpdateActivationOfObjects(activeObject);
                            break;
                        }

                        /*
                            start connection handling.
                        */
                        case OnNodeEvent.EventType.EVENT_NODE_CONNECT_STARTED: {
                            modifyMode = ModifyMode.CONNECT_STARTED;
                            currentEventSource = e;
                            break;
                        }

                        case OnNodeEvent.EventType.EVENT_CLOSE_TAPPED: {

                            Undo.RecordObject(this, "Delete Node");

                            var deletingNodeId = e.eventSourceNode.nodeId;
                            DeleteNode(deletingNodeId);

                            SaveGraphWithReload();
                            InitializeGraph();
                            break;
                        }

                        /*
                            releasse detected.
                                node move over.
                                node tapped.
                        */
                        case OnNodeEvent.EventType.EVENT_NODE_TOUCHED: {
                            var movedNode = e.eventSourceNode;
                            var movedNodeId = movedNode.nodeId;

                            // already active, node(s) are just tapped or moved.
                            if (activeObject.idPosDict.ContainsKey(movedNodeId)) {

                                /*
                                    active nodes(contains tap released node) are possibly moved.
                                */
                                var movedIdPosDict = new Dictionary<string, Vector2>();
                                foreach (var node in nodes) {
                                    if (!activeObject.idPosDict.ContainsKey(node.nodeId)) continue;

                                    var startPos = activeObject.idPosDict.ReadonlyDict()[node.nodeId];
                                    if (node.GetPos() != startPos) {
                                        // moved.
                                        movedIdPosDict[node.nodeId] = node.GetPos();
                                    }
                                }

                                if (movedIdPosDict.Any()) {

                                    foreach (var node in nodes) {
                                        if (activeObject.idPosDict.ReadonlyDict().Keys.Contains(node.nodeId)) {
                                            var startPos = activeObject.idPosDict.ReadonlyDict()[node.nodeId];
                                            node.SetPos(startPos);
                                        }
                                    }

                                    Undo.RecordObject(this, "Move Node");

                                    foreach (var node in nodes) {
                                        if (movedIdPosDict.Keys.Contains(node.nodeId)) {
                                            var endPos = movedIdPosDict[node.nodeId];
                                            node.SetPos(endPos);
                                        }
                                    }

                                    var activeObjectIds = activeObject.idPosDict.ReadonlyDict().Keys.ToList();
                                    activeObject = RenewActiveObject(activeObjectIds);
                                } else {
                                    // nothing moved, should cancel selecting this node.
                                    var cancelledActivatedIds = new List<string>(activeObject.idPosDict.ReadonlyDict().Keys);
                                    cancelledActivatedIds.Remove(movedNodeId);

                                    Undo.RecordObject(this, "Select Objects");

                                    activeObject = RenewActiveObject(cancelledActivatedIds);
                                }

                                UpdateActivationOfObjects(activeObject);

                                UpdateSpacerRect();
                                SaveGraph();
                                break;
                            }

                            if (Event.current.shift) {
                                Undo.RecordObject(this, "Select Objects");

                                var additiveIds = new List<string>(activeObject.idPosDict.ReadonlyDict().Keys);

                                // already contained, cancel.
                                if (additiveIds.Contains(movedNodeId)) {
                                    additiveIds.Remove(movedNodeId);
                                } else {
                                    additiveIds.Add(movedNodeId);
                                }

                                activeObject = RenewActiveObject(additiveIds);
                                UpdateActivationOfObjects(activeObject);

                                UpdateSpacerRect();
                                SaveGraph();
                                break;
                            }

                            Undo.RecordObject(this, "Select Node");

                            activeObject = RenewActiveObject(new List<string>{movedNodeId});
                            UpdateActivationOfObjects(activeObject);

                            UpdateSpacerRect();
                            SaveGraph();
                            break;
                        }

                        default: {
                            // Debug.Log("unconsumed or ignored event:" + e.eventType);
                            break;
                        }
                    }
                    break;
                }
            }

            switch (e.eventType) {
                case OnNodeEvent.EventType.EVENT_CONNECTIONPOINT_DELETED: {
                    var deletedConnectionPoint = e.eventSourceConnectionPoint;
                    var deletedOutputPointConnections = connections.Where(con => con.outputPoint.pointId == deletedConnectionPoint.pointId).ToList();

                    if (!deletedOutputPointConnections.Any()) break;

                    connections.Remove(deletedOutputPointConnections[0]);
                    break;
                }
                case OnNodeEvent.EventType.EVENT_CONNECTIONPOINT_LABELCHANGED: {
                    var labelChangedConnectionPoint = e.eventSourceConnectionPoint;
                    var changedLabel = labelChangedConnectionPoint.label;

                    var labelChangedOutputPointConnections = connections.Where(con => con.outputPoint.pointId == labelChangedConnectionPoint.pointId).ToList();

                    if (!labelChangedOutputPointConnections.Any()) break;

                    labelChangedOutputPointConnections[0].label = changedLabel;
                    break;
                }
                case OnNodeEvent.EventType.EVENT_BEFORESAVE: {
                    Undo.RecordObject(this, "Update Node Setting");
                    break;
                }
                case OnNodeEvent.EventType.EVENT_SAVE: {
                    SaveGraphWithReloadSilent();
                    Repaint();
                    break;
                }
            }
        }
        /**
         * Handle Node Event
        */
        private void HandleNodeEvent(NodeEvent e)
        {
            switch (modifyMode) {
                case ModifyMode.CONNECTING: {
                    switch (e.eventType) {
                        /*
                            handling
                        */
                        case NodeEvent.EventType.EVENT_NODE_MOVING: {
                            // do nothing.
                            break;
                        }

                        /*
                            connection drop detected from toward node.
                        */
                        case NodeEvent.EventType.EVENT_NODE_CONNECTION_RAISED: {
                            // finish connecting mode.
                            modifyMode = ModifyMode.NONE;

                            if (currentEventSource == null) {
                                break;
                            }

                            var sourceNode = currentEventSource.eventSourceNode;
                            var sourceConnectionPoint = currentEventSource.point;

                            var targetNode = e.eventSourceNode;
                            var targetConnectionPoint = e.point;

                            if (sourceNode.Id == targetNode.Id) {
                                break;
                            }

                            if (!IsConnectablePointFromTo(sourceConnectionPoint, targetConnectionPoint)) {
                                break;
                            }

                            var startNode = sourceNode;
                            var startConnectionPoint = sourceConnectionPoint;
                            var endNode = targetNode;
                            var endConnectionPoint = targetConnectionPoint;

                            // reverse if connected from input to output.
                            if (sourceConnectionPoint.IsInput) {
                                startNode = targetNode;
                                startConnectionPoint = targetConnectionPoint;
                                endNode = sourceNode;
                                endConnectionPoint = sourceConnectionPoint;
                            }

                            var outputPoint = startConnectionPoint;
                            var inputPoint = endConnectionPoint;
                            var label = startConnectionPoint.Label;

                            // if two nodes are not supposed to connect, dismiss
                            if(!ConnectionData.CanConnect(startNode.Data, endNode.Data)) {
                                break;
                            }

                            AddConnection(label, startNode, outputPoint, endNode, inputPoint);
                            SaveGraphWithReload();
                            break;
                        }

                        /*
                            connection drop detected by started node.
                        */
                        case NodeEvent.EventType.EVENT_NODE_CONNECTION_OVERED: {
                            // finish connecting mode.
                            modifyMode = ModifyMode.NONE;

                            /*
                                connect when dropped target is connectable from start connectionPoint.
                            */
                            var node = FindNodeByPosition(e.globalMousePosition);
                            if (node == null) {
                                break;
                            }

                            // ignore if target node is source itself.
                            if (node == e.eventSourceNode) {
                                break;
                            }

                            var pointAtPosition = node.FindConnectionPointByPosition(e.globalMousePosition);
                            if (pointAtPosition == null) {
                                break;
                            }

                            var sourcePoint = currentEventSource.point;

                            // limit by connectable or not.
                            if(!IsConnectablePointFromTo(sourcePoint, pointAtPosition)) {
                                break;
                            }

                            var isInput = currentEventSource.point.IsInput;
                            var startNode = (isInput)? node : e.eventSourceNode;
                            var endNode   = (isInput)? e.eventSourceNode: node;
                            var startConnectionPoint = (isInput)? pointAtPosition : currentEventSource.point;
                            var endConnectionPoint   = (isInput)? currentEventSource.point: pointAtPosition;
                            var outputPoint = startConnectionPoint;
                            var inputPoint = endConnectionPoint;
                            var label = startConnectionPoint.Label;

                            // if two nodes are not supposed to connect, dismiss
                            if(!ConnectionData.CanConnect(startNode.Data, endNode.Data)) {
                                break;
                            }

                            AddConnection(label, startNode, outputPoint, endNode, inputPoint);
                            SaveGraphWithReload();
                            break;
                        }

                        default: {
                            modifyMode = ModifyMode.NONE;
                            break;
                        }
                    }
                    break;
                }
                case ModifyMode.NONE: {
                    switch (e.eventType) {
                        /*
                            node move detected.
                        */
                        case NodeEvent.EventType.EVENT_NODE_MOVING: {
                            var tappedNode = e.eventSourceNode;
                            var tappedNodeId = tappedNode.Id;

                            if (activeObject.idPosDict.ContainsKey(tappedNodeId)) {
                                // already active, do nothing for this node.
                                var distancePos = tappedNode.GetPos() - activeObject.idPosDict.ReadonlyDict()[tappedNodeId];

                                foreach (var node in nodes) {
                                    if (node.Id == tappedNodeId) continue;
                                    if (!activeObject.idPosDict.ContainsKey(node.Id)) continue;
                                    var relativePos = activeObject.idPosDict.ReadonlyDict()[node.Id] + distancePos;
                                    node.SetPos(relativePos);
                                }
                                break;
                            }

                            if (Event.current.shift) {
                                Undo.RecordObject(this, "Select Objects");

                                var additiveIds = new List<string>(activeObject.idPosDict.ReadonlyDict().Keys);

                                additiveIds.Add(tappedNodeId);

                                activeObject = RenewActiveObject(additiveIds);

                                UpdateActivationOfObjects(activeObject);
                                UpdateSpacerRect();
                                break;
                            }

                            Undo.RecordObject(this, "Select " + tappedNode.Name);
                            activeObject = RenewActiveObject(new List<string>{tappedNodeId});
                            UpdateActivationOfObjects(activeObject);
                            break;
                        }

                        /*
                            start connection handling.
                        */
                        case NodeEvent.EventType.EVENT_NODE_CONNECT_STARTED: {
                            modifyMode = ModifyMode.CONNECTING;
                            currentEventSource = e;
                            break;
                        }

                        case NodeEvent.EventType.EVENT_CLOSE_TAPPED: {

                            Undo.RecordObject(this, "Delete Node");

                            var deletingNodeId = e.eventSourceNode.Id;
                            DeleteNode(deletingNodeId);

                            SaveGraphWithReload();
                            InitializeGraph();
                            break;
                        }

                        /*
                            releasse detected.
                                node move over.
                                node tapped.
                        */
                        case NodeEvent.EventType.EVENT_NODE_TOUCHED: {
                            var movedNode = e.eventSourceNode;
                            var movedNodeId = movedNode.Id;

                            // already active, node(s) are just tapped or moved.
                            if (activeObject.idPosDict.ContainsKey(movedNodeId)) {

                                /*
                                    active nodes(contains tap released node) are possibly moved.
                                */
                                var movedIdPosDict = new Dictionary<string, Vector2>();
                                foreach (var node in nodes) {
                                    if (!activeObject.idPosDict.ContainsKey(node.Id)) continue;

                                    var startPos = activeObject.idPosDict.ReadonlyDict()[node.Id];
                                    if (node.GetPos() != startPos) {
                                        // moved.
                                        movedIdPosDict[node.Id] = node.GetPos();
                                    }
                                }

                                if (movedIdPosDict.Any()) {

                                    foreach (var node in nodes) {
                                        if (activeObject.idPosDict.ReadonlyDict().Keys.Contains(node.Id)) {
                                            var startPos = activeObject.idPosDict.ReadonlyDict()[node.Id];
                                            node.SetPos(startPos);
                                        }
                                    }

                                    Undo.RecordObject(this, "Move " + movedNode.Name);

                                    foreach (var node in nodes) {
                                        if (movedIdPosDict.Keys.Contains(node.Id)) {
                                            var endPos = movedIdPosDict[node.Id];
                                            node.SetPos(endPos);
                                        }
                                    }

                                    var activeObjectIds = activeObject.idPosDict.ReadonlyDict().Keys.ToList();
                                    activeObject = RenewActiveObject(activeObjectIds);
                                } else {
                                    // nothing moved, should cancel selecting this node.
                                    var cancelledActivatedIds = new List<string>(activeObject.idPosDict.ReadonlyDict().Keys);
                                    cancelledActivatedIds.Remove(movedNodeId);

                                    Undo.RecordObject(this, "Select Objects");

                                    activeObject = RenewActiveObject(cancelledActivatedIds);
                                }

                                UpdateActivationOfObjects(activeObject);

                                UpdateSpacerRect();
                                SaveGraph();
                                break;
                            }

                            if (Event.current.shift) {
                                Undo.RecordObject(this, "Select Objects");

                                var additiveIds = new List<string>(activeObject.idPosDict.ReadonlyDict().Keys);

                                // already contained, cancel.
                                if (additiveIds.Contains(movedNodeId)) {
                                    additiveIds.Remove(movedNodeId);
                                } else {
                                    additiveIds.Add(movedNodeId);
                                }

                                activeObject = RenewActiveObject(additiveIds);
                                UpdateActivationOfObjects(activeObject);

                                UpdateSpacerRect();
                                SaveGraph();
                                break;
                            }

                            Undo.RecordObject(this, "Select " + movedNode.Name);

                            activeObject = RenewActiveObject(new List<string>{movedNodeId});
                            UpdateActivationOfObjects(activeObject);

                            UpdateSpacerRect();
                            SaveGraph();
                            break;
                        }

                        default: {
                            break;
                        }
                    }
                    break;
                }
            }

            switch (e.eventType) {
                case NodeEvent.EventType.EVENT_CONNECTIONPOINT_DELETED: {
                    // deleting point is handled by caller, so we are deleting connections associated with it.
                    connections.RemoveAll( c => (c.InputPoint == e.point || c.OutputPoint == e.point) );
                    Repaint();
                    break;
                }
                case NodeEvent.EventType.EVENT_CONNECTIONPOINT_LABELCHANGED: {
                    // point label change is handled by caller, so we are changing label of connection associated with it.
                    var affectingConnections = connections.FindAll( c=> c.OutputPoint == e.point );
                    affectingConnections.ForEach(c => c.Label = e.point.Label);
                    Repaint();
                    break;
                }
                case NodeEvent.EventType.EVENT_RECORDUNDO: {
                    Undo.RecordObject(this, e.message);
                    break;
                }
                case NodeEvent.EventType.EVENT_SAVE: {
                    SaveGraphWithReload(true);
                    Repaint();
                    break;
                }
            }
        }