예제 #1
0
        /// <summary>
        /// Use this function to prewarm the pool at the start of your game.
        /// It will generate enough damage numbers to fill the pool size.
        /// </summary>
        public void PrewarmPool()
        {
            if (enablePooling)
            {
                int instanceId = GetInstanceID();

                //Initialize Dictionary:
                if (pools == null)
                {
                    pools = new Dictionary <int, HashSet <DamageNumber> >();
                }

                //Initialize Pool:
                if (!pools.ContainsKey(instanceId))
                {
                    pools.Add(instanceId, new HashSet <DamageNumber>());
                }

                //Fill Pool:
                HashSet <DamageNumber> pool = pools[instanceId];
                for (int n = 0; n < poolSize - pool.Count; n++)
                {
                    DamageNumber dn = CreateNew(123, Vector3.zero);
                    dn.destroyOnStart = true;
                    dn.GetReferences();
                    dn.SetFadeIn(0);
                }
            }
        }
        void OnEnable()
        {
            dn = (DamageNumber)target;
            try
            {
                if (!Application.isPlaying || dn.GetTextA() == false)
                {
                    dn.GetReferences();
                }
            }catch
            {
                return;
            }

            if (!Application.isPlaying)
            {
                currentFadeIn = currentFadeOut = 0;
                dn.SetFadeIn(1);
            }

            textA = dn.GetTextA();
            textB = dn.GetTextB();
        }
예제 #3
0
        void SpawnNumber()
        {
            Vector3 position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, -Camera.main.transform.position.z));

            position.z = 0;

            RaycastHit hit3D;

            Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit3D, 500);

            if (hit3D.collider != null)
            {
                position = hit3D.point;
            }
            else
            {
                if (Camera.main.GetComponent <DNP_DemoCamera>() != null)
                {
                    return;                                                     //Only spawn numbers on ray hits.
                }
            }

            float number = 1 + Mathf.Pow(Random.value, 2.5f) * 200;

            if (numberPrefabs[currentIndex].name == "Gold")
            {
                number = 1;
            }

            if (numberPrefabs[currentIndex].name == "Big Numbers")
            {
                number *= 800000 * Random.value;
            }

            DamageNumber dn = numberPrefabs[currentIndex].CreateNew(Mathf.RoundToInt(number), position); //Creating a new Damage Number from Prefab.

            if (numberPrefabs[currentIndex].name == "Text")
            {
                float random = Random.value;
                if (random < 0.33f)
                {
                    dn.prefix = "Wow";
                }
                else if (random < 0.66f)
                {
                    dn.prefix = "Nice";
                }
                else
                {
                    dn.prefix = "Great";
                }
            }

            RaycastHit2D hit = Physics2D.Raycast(position, Vector2.down, 0.1f);

            if (hit.collider != null || hit3D.collider != null)
            {
                DNP_Player target          = null;
                Transform  targetTransform = null;

                if (hit.collider != null)
                {
                    target = hit.collider.GetComponent <DNP_Player>();

                    if (target != null)
                    {
                        targetTransform = hit.collider.transform;
                    }
                }
                else
                {
                    if (hit3D.collider != null && hit3D.collider.GetComponent <DNP_SineMover>() != null)
                    {
                        targetTransform = hit3D.collider.transform;
                        dn.followDrag   = 0;
                        dn.followSpeed  = 10;
                    }
                }

                if (targetTransform != null)
                {
                    if (target != null && Input.GetMouseButtonDown(0) && numberPrefabs[currentIndex].name != "Text" && numberPrefabs[currentIndex].name != "Gold" && numberPrefabs[currentIndex].name != "Health" && numberPrefabs[currentIndex].name != "Experience")
                    {
                        target.Hurt();
                    }

                    dn.followedTarget = targetTransform;
                    dn.combinationSettings.combinationGroup += targetTransform.GetInstanceID();
                }
            }

            if (numberPrefabs[currentIndex].name == "Outline")
            {
                dn.GetReferences();
                dn.GetTextA().color = dn.GetTextB().color = Color.HSVToRGB(Random.value, 1f, 1f);
            }

            if (numberPrefabs[currentIndex].name == "Shadow")
            {
                dn.GetReferences();
                dn.GetTextA().color = dn.GetTextB().color = Color.HSVToRGB(Random.value, 0.5f, 0.9f);
            }
        }