Beispiel #1
0
 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();
     }
 }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
 public static void Unselect()
 {
     if (selectedObject)
     {
         selectedObject.Release();
         selectedObject = null;
     }
 }
Beispiel #4
0
 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);
     }
 }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
 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;
         }
     }
 }
Beispiel #9
0
        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);
        }
Beispiel #10
0
 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();
                 }
             }
         }
     }
 }
Beispiel #11
0
 public void addConnectedObject(CastleObject castleObject)
 {
     this.connectedObjects.Add(castleObject);
 }