public static void Hover(CastleObject _object) { if (!_object) { if (hoveredObject) { hoveredObject.ExitHover(); hoveredObject = null; } } else if (!hoveredObject) { hoveredObject = _object; hoveredObject.EnterHover(); } else if (hoveredObject == _object) { hoveredObject.Hover(); } else { hoveredObject.ExitHover(); hoveredObject = _object; hoveredObject.EnterHover(); } }
/// <summary> /// Call this function using your game manager to handle touch input. /// </summary> public static void CastleUpdate() { switch (inputMode) { case CastleInputMode.SIMPLE: worldTapPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); break; case CastleInputMode.COMPLEX: //inputPlane.SetNormalAndPosition(-Vector3.forward, Vector3.zero); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); float hitdist = 0.0f; if (inputPlane.Raycast(ray, out hitdist)) { worldTapPos = Camera.main.ScreenToWorldPoint(Input.mousePosition + (Vector3.forward * hitdist)); } break; } tapPosition = new Vector2(worldTapPos.x, worldTapPos.y); colliderBuffer = Physics2D.OverlapPointAll(tapPosition); focusedObject = IsolateObject(colliderBuffer); Hover(focusedObject); Select(focusedObject); }
public static void Unselect() { if (selectedObject) { selectedObject.Release(); selectedObject = null; } }
public static void Drag(this CastleObject _object, float dragDelay = 10, bool instant = false) { if (instant) { _object.transform.position = CastleTools.Vec3RepZ(tapPosition, _object.transform.position.z); } else { _object.transform.position = Vector3.Lerp(_object.transform.position, CastleTools.Vec3RepZ(tapPosition, _object.transform.position.z), Time.deltaTime * dragDelay); } }
private List <CastleObject> restoreWay(List <CastleObject> visitedObjects, CastleObject startObject, CastleObject targetObject) { List <CastleObject> way = new List <CastleObject>(); way.Add(targetObject); if (targetObject != startObject) { CastleObject previousObject = getPreviousObject(targetObject); way.AddRange(restoreWay(visitedObjects, startObject, previousObject)); } return(way); }
private CastleObject getPreviousObject(CastleObject targetObject) { CastleObject previous = null; foreach (CastleObject connectedObject in targetObject.getConnectedObjects()) { if (connectedObject.getConnectedObjects().Contains(targetObject) && (connectedObject.getStep() == targetObject.getStep() - 1)) { previous = connectedObject; break; } } Debug.Assert(previous != null, "Previous object for room is not defined"); return(previous); }
public List <Room> paiwWay(CastleObject startObject, CastleObject targetObject) { setToBig(); List <CastleObject> startObjectList = new List <CastleObject>(); startObjectList.Add(startObject); startObject.setStep(0); List <CastleObject> visitedObjects = findMinimalWay(startObjectList, targetObject, 0); List <CastleObject> restoredWay = restoreWay(visitedObjects, startObject, targetObject); List <Room> restoredWayRooms = new List <Room>(); foreach (CastleObject castleObject in restoredWay) { if (castleObject is Room) { restoredWayRooms.Add(castleObject as Room); } } restoredWayRooms.Reverse(); return(restoredWayRooms); }
public static void Select(CastleObject _object, bool _override = false) { if (!selectedObject && !_object) { return; } if (_override) { if (selectedObject) { selectedObject.Release(); } selectedObject = _object; selectedObject.Tap(); return; } if (Input.GetMouseButtonDown(0)) { selectedObject = _object; selectedObject.Tap(); } else if (Input.GetMouseButton(0)) { if (selectedObject) { selectedObject.Hold(); } } else if (Input.GetMouseButtonUp(0)) { if (selectedObject) { selectedObject.Release(); selectedObject = null; } } }
private List <CastleObject> findMinimalWay(List <CastleObject> currentObjects, CastleObject target, int step) { List <CastleObject> visitedObjects = new List <CastleObject>(); foreach (CastleObject currentObject in currentObjects) { foreach (CastleObject connectedObject in currentObject.getConnectedObjects()) { if (connectedObject.getStep() > step) { connectedObject.setStep(step + 1); visitedObjects.Add(connectedObject); } if (connectedObject == target) { return(visitedObjects); } } } visitedObjects.AddRange(findMinimalWay(visitedObjects, target, ++step)); return(visitedObjects); }
public static void Select(CastleObject _object, bool _override = false) { if (!selectedObject && !_object) { return; } if (_override) { if (selectedObject) { selectedObject.Release(); } selectedObject = _object; selectedObject.Tap(); return; } if (Input.GetMouseButtonDown(0)) { selectedObject = _object; selectedObject.Tap(); } else if (Input.GetMouseButton(0)) { if (selectedObject) { if (CheckObject(selectedObject.coll)) { selectedObject.Hold(); } else { selectedObject.DragOff(); } } } else if (Input.GetMouseButtonUp(0)) { if (selectedObject) { selectedObject.Release(); selectedObject = null; } } if (editingText) { if (Input.GetKeyDown(KeyCode.Return) || Input.GetMouseButtonDown(0)) { editingText = false; focusedText = null; } foreach (KeyCode vKey in System.Enum.GetValues(typeof(KeyCode))) { if (Input.GetKeyDown(vKey)) { if (vKey == KeyCode.Backspace || vKey == KeyCode.Delete) { Debug.Log("delete"); focusedText.text = CastleTools.StripBack(focusedText.text, 1); } else if (vKey == KeyCode.Space) { focusedText.text += " "; } else if (CastleTools.ValidateText(vKey.ToString())) { focusedText.text += vKey.ToString(); } } } } }
public void addConnectedObject(CastleObject castleObject) { this.connectedObjects.Add(castleObject); }