コード例 #1
0
        public ChartItemEffect LockHoverObject(int index)
        {
            int             count  = mHoverFreeObjects.Count;
            ChartItemEffect effect = null;

            if (count > 0)
            {
                effect = mHoverFreeObjects[count - 1];
                mHoverFreeObjects.RemoveAt(count - 1);
            }
            else
            {
                if (mHoverPrefab == null)
                {
                    return(null);
                }
                GameObject      obj = GameObject.Instantiate(mHoverPrefab.gameObject);
                MaskableGraphic g   = obj.GetComponent <MaskableGraphic>();
                if (g != null)
                {
                    g.maskable = false;
                }
                ChartCommon.EnsureComponent <ChartItem>(obj);
                obj.transform.SetParent(transform);
                effect             = obj.GetComponent <ChartItemEffect>();
                effect.Deactivate += Effect_Deactivate;
            }
            effect.LineTag = index;
            mHoverObjectes.Add(effect);
            return(effect);
        }
コード例 #2
0
 /// <summary>
 /// Shuts down a hover prefab effect
 /// </summary>
 /// <param name="hover"></param>
 void TriggerOut(ChartItemEffect hover)
 {
     hover.TriggerOut(true);
     ChartMaterialController control = hover.GetComponent<ChartMaterialController>();
     if (control)
         control.TriggerOff();
 }
コード例 #3
0
        /// <summary>
        /// Takes a hover object out of the pool , or creates a new one if the pool is empty
        /// </summary>
        /// <param name="index">the index of the data item , this index will be assigned to the returned object</param>
        /// <returns></returns>
        public ChartItemEffect LockHoverObject(int index,int type,object selectionData)
        {
            int count = mHoverFreeObjects.Count;
            ChartItemEffect effect = null;

            if (count > 0)
            {
                effect = mHoverFreeObjects[count - 1];
                mHoverFreeObjects.RemoveAt(count - 1); 
            }
            else
            {
                if (mHoverPrefab == null)
                    return null;
                GameObject obj = GameObject.Instantiate(mHoverPrefab.gameObject);
                MaskableGraphic g = obj.GetComponent<MaskableGraphic>();
                if (g != null)
                    g.maskable = false;
                ChartCommon.EnsureComponent<ChartItem>(obj);
                Transform parent = transform;
                if (mHoverTransform != null)
                    parent = mHoverTransform;
                obj.transform.SetParent(parent);
                effect = obj.GetComponent<ChartItemEffect>();
                effect.Deactivate += Effect_Deactivate;
            }

            effect.ItemType = type;
            effect.ItemIndex = index;
            effect.ItemData = selectionData;
            mHoverObjectes.Add(effect);
            return effect;
        }
コード例 #4
0
 /// <summary>
 /// Shuts down a hover prefab effect
 /// </summary>
 /// <param name="hover"></param>
 void TriggerIn(ChartItemEffect hover)
 {
     hover.TriggerIn(false);
     ChartMaterialController control = hover.GetComponent<ChartMaterialController>();
     if (control)
         control.TriggerOn();
 }
コード例 #5
0
        protected override void SetUpHoverObject(ChartItemEffect hover, int index, int type, object selectionData)
        {
            Rect selectionRect = (Rect)selectionData;

            selectionRect  = RectFromIndex(index, type, selectionRect);
            hover.ItemData = selectionRect;
            SetupHoverObjectToRect(hover, index, type, selectionRect);
        }
コード例 #6
0
 public void Unregister(ChartItemEffect effect)
 {
     mEffects.Remove(effect);
     if (mEffects.Count == 0)
     {
         enabled = false;
     }
 }
コード例 #7
0
 /// <summary>
 /// helped method that extract the index from the hover object and then call SetUpHoverObject overload with index
 /// </summary>
 /// <param name="hover"></param>
 void SetUpHoverObject(ChartItemEffect hover)
 {
     if (hover == null)
         return;
     int pickedIndex = hover.ItemIndex - refrenceIndex;
     if (pickedIndex < 0)
         return;
     SetUpHoverObject(hover, pickedIndex,hover.ItemType,hover.ItemData);
 }
コード例 #8
0
 /// <summary>
 /// utillity method that can be used in derived classes in order to 
 /// </summary>
 /// <param name="hover"></param>
 /// <param name="index"></param>
 /// <param name="type"></param>
 /// <param name="rect"></param>
 protected void SetupHoverObjectToRect(ChartItemEffect hover, int index, int type,Rect rect)
 {
     if (hover == null)
         return;
     RectTransform transform = hover.GetComponent<RectTransform>();
     transform.localScale = new Vector3(1f, 1f, 1f);
     transform.sizeDelta = new Vector2(rect.width, rect.height);
     transform.anchoredPosition3D = new Vector3(rect.center.x, rect.center.y, 0f);
 }
コード例 #9
0
 public void Set2DCategoryPrefabs(string category, ChartItemEffect lineHover, ChartItemEffect pointHover)
 {
     if (mData.ContainsKey(category) == false)
     {
         Debug.LogWarning("Invalid category name. Make sure the category is present in the graph");
         return;
     }
     CategoryData data = (CategoryData)mData[category];
     data.LineHoverPrefab = lineHover;
     data.PointHoverPrefab = pointHover;
 }
コード例 #10
0
 public void Register(ChartItemEffect effect)
 {
     if (mEffects.Contains(effect))
     {
         return;
     }
     if (enabled == false)
     {
         enabled = true;
     }
     mEffects.Add(effect);
 }
コード例 #11
0
        void DoMouse(Vector3 mouse, bool leave, bool force)
        {
            if (mLines == null)
            {
                return;
            }

            int prevI = mPickedI;
            int prevJ = mPickedJ;

            if (leave)
            {
                mPickedI = -1;
                mPickedJ = -1;
            }
            else
            {
                Pick(mouse, out mPickedI, out mPickedJ);
            }

            if (prevI != mPickedI || prevJ != mPickedJ)
            {
                if (mCurrentHover != null)
                {
                    TriggerOut(mCurrentHover);
                    if (mPickedI == -1 && mPickedJ == -1)
                    {
                        if (Leave != null)
                        {
                            Leave();
                        }
                    }
                    mCurrentHover = null;
                }

                if (mPickedI != -1 && mPickedJ != -1)
                {
                    mCurrentHover = LockHoverObject(mPickedJ);
                    if (mCurrentHover == null)
                    {
                        return;
                    }
                    if (Hover != null)
                    {
                        Hover(mPickedJ, mouse);
                    }
                    mCurrentHover.gameObject.SetActive(true);
                    SetUpHoverObject(mCurrentHover);
                    TriggerIn(mCurrentHover);
                }
            }
        }
コード例 #12
0
        /// <summary>
        /// Handle mouse events
        /// </summary>
        /// <param name="mouse"></param>
        /// <param name="leave"></param>
        /// <param name="force"></param>
        void DoMouse(Vector3 mouse, bool leave, bool force)
        {
            int prevI = mPickedIndex;
            int prevJ = mPickedType;

            if (leave)
            {
                mPickedIndex = -1;
                mPickedType  = -1;
                mPickedData  = null;
            }
            else
            {
                Pick(mouse, out mPickedIndex, out mPickedType, out mPickedData);
            }

            if (prevI != mPickedIndex || prevJ != mPickedType)
            {
                if (mCurrentHover != null)
                {
                    TriggerOut(mCurrentHover);
                    if (mPickedIndex == -1 && mPickedType == -1)
                    {
                        if (Leave != null)
                        {
                            Leave();
                        }
                    }
                    mCurrentHover = null;
                }

                if (mPickedIndex != -1 && mPickedType != -1)
                {
                    mCurrentHover = LockHoverObject(mPickedIndex, mPickedType, mPickedData);
                    if (mCurrentHover == null)
                    {
                        return;
                    }
                    if (Hover != null)
                    {
                        Hover(mPickedIndex, mPickedType, mPickedData, mouse);
                    }
                    mCurrentHover.gameObject.SetActive(true);
                    SetUpHoverObject(mCurrentHover);
                    TriggerIn(mCurrentHover);
                }
            }
        }
コード例 #13
0
        /// <summary>
        /// sets the lines for this renderer
        /// </summary>
        /// <param name="lines"></param>
        internal void SetLines(List <LineSegement> lines)
        {
            //    mUseCache = false;
            mLines   = lines;
            mMinX    = float.PositiveInfinity;
            mMinY    = float.PositiveInfinity;
            mMaxX    = float.NegativeInfinity;
            mMaxY    = float.NegativeInfinity;
            mControl = GetComponentInParent <SensitivityControl>();

            if (mLines != null)
            {
                for (int i = 0; i < mLines.Count; i++)
                {
                    LineSegement seg         = mLines[i];
                    int          totalPoints = seg.PointCount;
                    for (int j = 0; j < totalPoints; j++)
                    {
                        Vector3 point = seg.getPoint(j);
                        mMinX = Mathf.Min(mMinX, point.x);
                        mMinY = Mathf.Min(mMinY, point.y);
                        mMaxX = Mathf.Max(mMaxX, point.x);
                        mMaxY = Mathf.Max(mMaxY, point.y);
                    }
                }
            }

            SetAllDirty();
            mIsMouseIn = false;
            for (int i = 0; i < mHoverObjectes.Count; i++)
            {
                mHoverObjectes[i].gameObject.SetActive(false);
                mHoverFreeObjects.Add(mHoverObjectes[i]);
            }
            mHoverObjectes.Clear();

            if (mCurrentHover != null)
            {
                mCurrentHover.gameObject.SetActive(false);
                mHoverFreeObjects.Add(mCurrentHover);
                mCurrentHover = null;
            }
            mPickedI = mPickedJ = -1;
            Rebuild(CanvasUpdate.PreRender);
        }
コード例 #14
0
 public void SetCategoryHover(string category, ChartItemEffect lineHover, ChartItemEffect pointHover)
 {
     try
     {
         CategoryData data = mDataSource.Columns[category].UserData as CategoryData;
         if (data == null)
         {
             throw new Exception("category not set"); // should never happen
         }
         data.LineHover  = lineHover;
         data.PointHover = pointHover;
         RaiseDataChanged();
     }
     catch
     {
         Debug.LogWarning("Invalid category name. Make sure the category is present in the graph");
     }
 }
コード例 #15
0
        /// <summary>
        /// call this to free all hover objects and reset event input. This is useful mostly when the entire data of the graphic has been replaced and old animations should be discarded
        /// </summary>
        public void ClearEvents()
        {
            mIsMouseIn = false;
            for (int i = 0; i < mHoverObjectes.Count; i++)
            {
                mHoverObjectes[i].gameObject.SetActive(false);
                mHoverFreeObjects.Add(mHoverObjectes[i]);
            }
            mHoverObjectes.Clear();

            if (mCurrentHover != null)
            {
                mCurrentHover.gameObject.SetActive(false);
                mHoverFreeObjects.Add(mCurrentHover);
                mCurrentHover = null;
            }
            mPickedIndex = mPickedType = -1;
            mPickedData  = null;
        }
コード例 #16
0
            public void Restore(object store)
            {
                var cat = (CategoryData)store;

                LineHoverPrefab  = cat.LineHoverPrefab;
                PointHoverPrefab = cat.PointHoverPrefab;
                LineMaterial     = cat.LineMaterial;
                LineTiling       = cat.LineTiling;
                LineThickness    = cat.LineThickness;
                FillMaterial     = cat.FillMaterial;
                StetchFill       = cat.StetchFill;
                PointMaterial    = cat.PointMaterial;
                PointSize        = cat.PointSize;
                LinePrefab       = cat.LinePrefab;
                FillPrefab       = cat.FillPrefab;
                DotPrefab        = cat.DotPrefab;
                Depth            = cat.Depth;
                IsBezierCurve    = cat.IsBezierCurve;
                SegmentsPerCurve = cat.SegmentsPerCurve;
            }
コード例 #17
0
        void Update()
        {
            Transform trans = transform;

            if (WorkOnParent)
            {
                trans = Parent;
                if (trans == null)
                {
                    return;
                }
            }
            Vector3 scale = new Vector3(1f, 1f, 1f);

            if (InitialScale)
            {
                scale = mInitialScale;
            }
            Vector3    translation = Vector3.zero;
            Quaternion rotation    = Quaternion.identity;

            for (int i = 0; i < mEffects.Count; i++)
            {
                ChartItemEffect effect = mEffects[i];
                if (effect == null || effect.gameObject == null)
                {
                    mEffects.RemoveAt(i);
                    --i;
                    continue;
                }
                scale.x *= effect.ScaleMultiplier.x;
                scale.y *= effect.ScaleMultiplier.y;
                scale.z *= effect.ScaleMultiplier.z;

                translation += effect.Translation;
                rotation    *= effect.Rotation;
            }
            trans.localScale = scale;
        }
コード例 #18
0
 /// <summary>
 /// called when an effect is done animating. Reclaims the object into the hover object pool
 /// </summary>
 /// <param name="obj"></param>
 private void Effect_Deactivate(ChartItemEffect obj)
 {
     obj.gameObject.SetActive(false);
     mHoverObjectes.Remove(obj);
     mHoverFreeObjects.Add(obj);
 }
コード例 #19
0
 /// <summary>
 /// Set up the position of the hover prefab
 /// </summary>
 /// <param name="hover">the hovered gameobject passesd using it's ChartItemEffect component</param>
 /// <param name="index">index of the data item which is hovered</param>
 protected abstract void SetUpHoverObject(ChartItemEffect hover, int index, int type, object selectionData);
コード例 #20
0
 public void SetHoverPrefab(ChartItemEffect prefab)
 {
     mHoverPrefab = prefab;
 }
コード例 #21
0
        /// <summary>
        /// sets the transform of the hover object based on the data in this graphic
        /// </summary>
        /// <param name="hover"></param>
        /// <param name="index"></param>
        protected override void SetUpHoverObject(ChartItemEffect hover, int index, int type, object data)
        {
            if (hover == null)
            {
                return;
            }
            if (mLines == null || mLines.Count == 0)
            {
                return;
            }
            if (index < 0)
            {
                return;
            }

            if (mPointRender)
            {
                if (index >= mLines[0].PointCount)
                {
                    return;
                }
                Vector4       point     = mLines[0].getPoint(index);
                RectTransform transform = hover.GetComponent <RectTransform>();
                transform.localScale = new Vector3(1f, 1f, 1f);
                float size = mPointSize;
                if (point.w >= 0f)
                {
                    size = point.w;
                }
                transform.sizeDelta          = new Vector2(size, size);
                transform.anchoredPosition3D = new Vector3(point.x, point.y, 0f);
            }
            else
            {
                if (index >= mLines[0].LineCount)
                {
                    return;
                }
                Vector3 from;
                Vector3 to;
                mLines[0].GetLine(index, out from, out to);

                if (ViewRect.HasValue)
                {
                    Vector2 vFrom = from;
                    Vector2 vTo   = to;
                    TrimLine(ViewRect.Value, ref vFrom, ref vTo);
                    from = new Vector3(vFrom.x, vFrom.y, from.z);
                    to   = new Vector3(vTo.x, vTo.y, to.z);
                }

                Vector3       dir       = (to - from);
                float         angle     = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
                RectTransform transform = hover.GetComponent <RectTransform>();
                transform.sizeDelta     = new Vector2(dir.magnitude, Thickness);
                transform.localScale    = new Vector3(1f, 1f, 1f);
                transform.localRotation = Quaternion.Euler(0f, 0f, angle);
                Vector3 point = (from + to) * 0.5f;
                transform.anchoredPosition3D = new Vector3(point.x, point.y, 0f);
            }
        }
コード例 #22
0
 private void Effect_Deactivate(ChartItemEffect obj)
 {
     mHoverObjectes.Remove(obj);
     mHoverFreeObjects.Add(obj);
 }