Beispiel #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);
        }
Beispiel #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();
 }
Beispiel #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;
        }
Beispiel #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();
 }
        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);
        }
 public void Unregister(ChartItemEffect effect)
 {
     mEffects.Remove(effect);
     if (mEffects.Count == 0)
     {
         enabled = false;
     }
 }
Beispiel #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);
 }
Beispiel #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);
 }
Beispiel #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;
 }
 public void Register(ChartItemEffect effect)
 {
     if (mEffects.Contains(effect))
     {
         return;
     }
     if (enabled == false)
     {
         enabled = true;
     }
     mEffects.Add(effect);
 }
Beispiel #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);
                }
            }
        }
        /// <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);
                }
            }
        }
Beispiel #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);
        }
 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");
     }
 }
        /// <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;
        }
Beispiel #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;
            }
        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;
        }
 /// <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);
 }
 /// <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);
 public void SetHoverPrefab(ChartItemEffect prefab)
 {
     mHoverPrefab = prefab;
 }
Beispiel #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);
            }
        }
Beispiel #22
0
 private void Effect_Deactivate(ChartItemEffect obj)
 {
     mHoverObjectes.Remove(obj);
     mHoverFreeObjects.Add(obj);
 }