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; }
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()); }
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; }
// 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; }
bool DoesObjectExist(VuMarkIdentifier markerId, string objectId) { ActiveObject activeObject = null; if (m_activeResourceObjects.TryGetValue(objectId, out activeObject)) { return(activeObject.MarkerObjects.ContainsKey(markerId)); } return(false); }
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); }
/// <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); }
ActiveObject GetOrCreateActiveObject(string objectId) { ActiveObject activeObject = null; if (!m_activeResourceObjects.TryGetValue(objectId, out activeObject)) { activeObject = new ActiveObject(); m_activeResourceObjects.Add(objectId, activeObject); } return(activeObject); }
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(); }
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)); }
// 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); } }
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"); } }
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()); }
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); }
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); }
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()); }
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)); }
void HandleActiveItems() { FindItemForSelection(); if (Input.GetKeyDown(KeyCode.Space)) { if (sheltered) { sheltered = false; spriteRenderer.sprite = originalSprite; } else if (highlighted != null) { highlighted.Use(); highlighted = null; } } }
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()); }
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); }
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); } }
/// <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)); } }
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; }
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; } } }
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); } }
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++; } } } }
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); }
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; } } }
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); } } } }
public void LiftEnemy() { ActiveObject[] playerEnemy = new ActiveObject[]{this, EnemyPushed}; Game.EventMgr.Notify (Event.LiftEnemy, playerEnemy); }
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 } }
// 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(); } }
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); }
/// <summary> /// Display all components and initialize them. /// </summary> public abstract void Initialize(ActiveObject c);
/// <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); }
/// <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; } } }
/// <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; } } }
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); } } } }
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; } } }
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); } } } }
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 } }
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; }
public void Awake() { AO = GetComponent <ActiveObject>(); }
/** 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; } } }
/** 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; } } }