예제 #1
0
        public void SetStations(List <string> names, BeefMap beefmap)
        {
            List <Vector3> pos = new List <Vector3>();

            for (int i = 0; i < Stations.Length; i++)
            {
                if (i < names.Count)
                {
                    Stations[i].gameObject.SetActive(true);
                    Tails[i].gameObject.SetActive(true);
                    Stations[i].GetComponentInChildren <Text>().text = names[i];
                    var     start = raceCamera.WorldToScreenPoint(beefmap.stationWorldPositions[names[i]]);
                    Vector2 p;
                    RectTransformUtility.ScreenPointToLocalPointInRectangle(Stations[i].transform.parent.GetComponent <RectTransform>(), start, uiCamera, out p);
                    var   local  = Stations[i].transform.localPosition;
                    var   parent = Stations[i].transform.parent.GetComponent <RectTransform>();
                    float min    = parent.rect.xMin + (Stations[i].sizeDelta.x / 2 + 10);
                    local.x = Mathf.Max(p.x, min);// 左画面外対応
                    Stations[i].transform.localPosition = local;
                    Tails[i].focusPosition = start;
                }
                else
                {
                    Stations[i].gameObject.SetActive(false);
                    Tails[i].gameObject.SetActive(false);
                }
            }

            // 重ねないように一つずつ右へずらす
            for (int i = 1; i < names.Count; i++)
            {
                var lhs   = Stations[i - 1].transform.localPosition;
                var width = Stations[i - 1].sizeDelta.x + 10;// / 2 + 10;
                var rhs   = Stations[i].transform.localPosition;
                rhs.x = Mathf.Max(rhs.x, lhs.x + width);
                Stations[i].transform.localPosition = rhs;
            }

            // 右へ画面外になる場合、左側へ
            float?max = null;

            for (int i = names.Count - 1; i >= 0; i--)
            {
                var p = Stations[i].transform.parent.GetComponent <RectTransform>();

                if (!max.HasValue)
                {
                    // 初回
                    max = p.rect.xMax - (Stations[i].sizeDelta.x / 2 + 10);
                }
                else
                {
                    max = max.Value - (Stations[i].sizeDelta.x + 10);
                }

                var local = Stations[i].transform.localPosition;
                local.x = Mathf.Min(local.x, max.Value);
                Stations[i].transform.localPosition = local;
            }
        }
예제 #2
0
    /// <summary>
    /// バイナリからロードする
    /// </summary>
    /// <param name="bytes"></param>
    public IEnumerator LoadAsync(byte[] bytes, Vector2 worldCenter, Vector2 worldScale)
    {
        var thread = new Thread(new ParameterizedThreadStart(LoadAsyncInternal));

        thread.Start(new Parameter {
            beefmap = this, bytes = bytes, worldCenter = worldCenter, worldScale = worldScale
        });

        while (thread.ThreadState == ThreadState.Running)
        {
            yield return(null);
        }

        Current = this;
    }