Ejemplo n.º 1
0
    public void OnEndDrag(PointerEventData EventData)
    {
        //transform.position = StartingPosition;
        Button[]      AndroidElements = Parent.gameObject.GetComponentsInChildren <Button>();
        RectTransform DraggedRect     = GetComponent <RectTransform>();
        RectTransform TestRect;

        foreach (Button Element in AndroidElements)
        {
            //Skip self.
            if (Element.name == name)
            {
                continue;
            }
            TestRect = Element.GetComponent <RectTransform>();
            //Make sure we don't overlaps other buttons.
            if (UIRectOverlaps(DraggedRect, TestRect))
            {
                transform.position = StartingPosition;
                return;
            }
            //Make sure we drag within the boundaries
            if (!RectTransformUtility.RectangleContainsScreenPoint(Parent.GetComponent <RectTransform>(), EventData.position,
                                                                   EventData.pressEventCamera))
            {
                transform.position = StartingPosition;
                return;
            }
        }
        AndroidButtonPosition ButtonPosition = InputManager.Instance.DumpCurrentAndroidButtonPosition(Parent.gameObject);

        ButtonPosition.Save();
    }
Ejemplo n.º 2
0
    /*
     *      Given a valid Android Panel It returns an AndroidButtonPosition
     *      containing all the current position info.
     */
    public AndroidButtonPosition DumpCurrentAndroidButtonPosition(GameObject AndroidPanel)
    {
        AndroidButtonPosition ButtonPosition = new AndroidButtonPosition();

        Button[] Entities = AndroidPanel.GetComponentsInChildren <Button>();
        foreach (Button Entity in Entities)
        {
            Debug.Log("Saving " + Entity.name + " At position: " + Entity.transform.position.ToString());
            Vector3 LocalPos         = Entity.GetComponent <RectTransform>().localPosition;
            Vector2 AnchoredPosition = Entity.GetComponent <RectTransform>().anchoredPosition;
            switch (Entity.name)
            {
            case "LeftButton":
                ButtonPosition.LeftButton = new SerializableRectTransform(LocalPos, AnchoredPosition);
                break;

            case "RightButton":
                ButtonPosition.RightButton = new SerializableRectTransform(LocalPos, AnchoredPosition);
                break;

            case "UpButton":
                ButtonPosition.UpButton = new SerializableRectTransform(LocalPos, AnchoredPosition);
                break;

            case "ActionButton":
                ButtonPosition.ActionButton = new SerializableRectTransform(LocalPos, AnchoredPosition);
                break;

            default:
                Debug.Log("Unknown button in android panel( " + Entity.name + ")!");
                break;
            }
        }
        return(ButtonPosition);
    }
Ejemplo n.º 3
0
    /*
     *      Set the android button position by loading the configuration either from the file
     *      or defaulting to the one of the prefab.
     *      At the ends it calls SetAndroidButtonPosition that does the actual job of moving things
     *      in the panel!
     */
    public void SetAndroidButtonPosition(GameObject AndroidPanel)
    {
        AndroidButtonPosition ButtonPosition = AndroidButtonPosition.Load();

        if (ButtonPosition == null)
        {
            Debug.Log("Load Failed dumping now");
            //Init
            ButtonPosition = DumpCurrentAndroidButtonPosition(AndroidPanel);
            ButtonPosition.Save();
        }
        else
        {
            Debug.Log("Setting button position");
            SetAndroidButtonPosition(AndroidPanel, ButtonPosition);
        }
    }
Ejemplo n.º 4
0
    /*
     *      Load the button position from the file and returns the new class if found
     *      null if not.
     */
    public static AndroidButtonPosition Load()
    {
        BinaryFormatter BFormatter = new BinaryFormatter();
        FileStream      LoadFile;

        try {
            LoadFile = File.Open(Application.persistentDataPath + "/" +
                                 PlayerPrefs.GetString("AndroidControlPanelFile", "AndroidControlPanelSettings.bin"), FileMode.Open);
            AndroidButtonPosition Instance = (AndroidButtonPosition)BFormatter.Deserialize(LoadFile);
            Debug.Log("Loaded " + Instance.ToString());
            LoadFile.Close();
            return(Instance);
        } catch (FileNotFoundException Exception) {
            Debug.Log("File was not found " + Exception.Message);
        }
        return(null);
    }
Ejemplo n.º 5
0
    /*
     *      Given a valid Android Panel and an AndroidButtonPositon
     *      It sets the buttons inside the panel.
     */
    public void SetAndroidButtonPosition(GameObject AndroidPanel, AndroidButtonPosition ButtonPosition)
    {
        Button[] Entities = AndroidPanel.GetComponentsInChildren <Button>();

        foreach (Button Entity in Entities)
        {
            RectTransform EntityRect = Entity.GetComponent <RectTransform>();
            switch (Entity.name)
            {
            case "LeftButton":
                EntityRect.anchoredPosition = ButtonPosition.LeftButton.AnchoredPosition.ToVector3();
                EntityRect.localPosition    = ButtonPosition.LeftButton.LocalPosition.ToVector3();
                break;

            case "RightButton":
                EntityRect.anchoredPosition = ButtonPosition.RightButton.AnchoredPosition.ToVector3();
                EntityRect.localPosition    = ButtonPosition.RightButton.LocalPosition.ToVector3();
                break;

            case "UpButton":
                EntityRect.anchoredPosition = ButtonPosition.UpButton.AnchoredPosition.ToVector3();
                EntityRect.localPosition    = ButtonPosition.UpButton.LocalPosition.ToVector3();
                break;

            case "ActionButton":
                EntityRect.anchoredPosition = ButtonPosition.ActionButton.AnchoredPosition.ToVector3();
                EntityRect.localPosition    = ButtonPosition.ActionButton.LocalPosition.ToVector3();
                break;

            default:
                Debug.Log("Unknown button in android panel( " + Entity.name + ")!");
                break;
            }
        }
        if (GameHandler.Instance && GameHandler.Instance.IsPaused)
        {
            Debug.Log("Updating android panel");
            GameHandler.Instance.MarkAndroidPanelDirty();
        }
        return;
    }
Ejemplo n.º 6
0
 public void WriteDefaults()
 {
     if (Application.platform == RuntimePlatform.Android)
     {
         GameObject            DefaultAndroidPanel   = Instantiate(Resources.Load("Prefabs/AndroidControlPanel")) as GameObject;
         AndroidButtonPosition DefaultButtonPosition = DumpCurrentAndroidButtonPosition(DefaultAndroidPanel);
         DefaultButtonPosition.Save();
         Destroy(DefaultAndroidPanel);
     }
     else
     {
         PlayerPrefs.SetString("LeftButton", "A");
         PlayerPrefs.SetString("AltLeftButton", "LeftArrow");
         PlayerPrefs.SetString("RightButton", "D");
         PlayerPrefs.SetString("AltRightButton", "RightArrow");
         PlayerPrefs.SetString("UpButton", "Space");
         PlayerPrefs.SetString("AltUpButton", "UpArrow");
         PlayerPrefs.SetString("ActionButton", "LeftControl");
         PlayerPrefs.SetString("AltActionButton", "RightControl");
         Init();
     }
 }