예제 #1
0
        private static GameObject LoadTrailWithPool(TrailRendererEventProperties properties, bool isCrit = false)
        {
            GameObject trail = null;

            if (GenericPoolSingleton.Instance.trailPool != null)
            {
                string name = string.Empty;
                if (isCrit)
                {
                    if (properties._trailRendererCrit != null)
                    {
                        name = properties._trailRendererCrit.name;
                    }
                    else
                    {
                        name = properties.TrailRendererNameCrit;
                    }
                }
                else
                {
                    if (properties._trailRenderer != null)
                    {
                        name = properties._trailRenderer.name;
                    }
                    else
                    {
                        name = properties.TrailRendererName;
                    }
                }
                trail = GenericPoolSingleton.Instance.trailPool.Use(name);
            }
            return(trail);
        }
예제 #2
0
        public void OnPlayTrailRenderer(MoveAnimationEvent e)
        {
            TrailRendererEventInfo       evt        = e.EventRef as TrailRendererEventInfo;
            TrailRendererEventProperties properties = evt._trailRendererProperties;

            PlayTrailRenderer(properties);
        }
예제 #3
0
        private static GameObject LoadTrailWithoutPool(TrailRendererEventProperties properties, bool isCrit = false)
        {
            GameObject trail = null;

            if (isCrit)
            {
                trail = (GameObject)GameObject.Instantiate(properties._trailRendererCrit);
            }
            else
            {
                trail = (GameObject)GameObject.Instantiate(properties._trailRenderer);
            }
            return(trail);
        }
예제 #4
0
        public void Init(TrailRendererEventProperties properties, Animator animator, float startTime, bool flipped, bool isCrit)
        {
            //_properties   = properties;
            _startTime     = startTime;
            _animClip      = properties._rigAnimClip;
            _trailRenderer = MoveUtils.InstantiateTrailInstance(properties, animator, flipped, isCrit, true).GetComponent <TrailRendererInstance>();
            _animRoot      = EB.Util.GetObjectExactMatch(_trailRenderer.gameObject, "anim_root");
            _played        = false;

            if (properties._parent)
            {
                _attachTransform = _trailRenderer.GetComponent <AttachTransform>();
            }
        }
예제 #5
0
        public void PlayTrailRenderer(TrailRendererEventProperties properties)
        {
            bool isCrit = false;

            Hotfix_LT.Combat.Combatant combatant = gameObject.GetComponent <Hotfix_LT.Combat.Combatant>();
            if (combatant != null)
            {
                isCrit = combatant.IsCurrentAttackCritical();
            }
            GameObject trail = MoveUtils.InstantiateTrailInstance(properties, GetComponent <Animator>(), _flipped, isCrit);

            if (trail != null)
            {
                RegisterTrail(trail, properties._eventName, properties._isInterruptible);
                trail.GetComponent <TrailRendererInstance>().Play(Time.time);

                if (!string.IsNullOrEmpty(properties.RigAnimClipName))
                {
                    Animation animRoot = trail.transform.Find("anim_root").GetComponent <Animation>();
                    animRoot.Play(properties.RigAnimClipName);
                }
            }
        }
예제 #6
0
        public static GameObject InstantiateTrailInstance(TrailRendererEventProperties properties, Animator animator, bool flipped, bool isCrit, bool bypassPools = false)
        {
            GameObject trail = null;

            if (Application.isPlaying)
            {
                if (!bypassPools)
                {
                    trail = LoadTrailWithPool(properties, isCrit);
                }
                else
                {
                    trail = LoadTrailWithoutPool(properties, isCrit);
                }
            }
            else
            {
                trail = LoadTrailWithoutPool(properties, isCrit);
            }

            if (trail != null)
            {
                TrailRendererInstance tri    = trail.GetComponent <TrailRendererInstance>();
                Transform             parent = null;

                if (tri != null)
                {
                    Vector3 offset1 = properties._offset1;
                    Vector3 offset2 = properties._offset2;

                    tri.OffsetPoints(offset1, offset2, properties._useLocalOffsets);

                    if (tri._TimeUnits == TrailRenderer.eTIME_UNITS.Frames)
                    {
                        tri.ConvertFramesToSeconds(properties._fps);
                    }
                }

                if (animator != null)
                {
                    parent = GetBodyPartTransform(animator, properties._attachment, properties._attachmentPath);
                    trail.transform.parent = parent;

                    trail.transform.localPosition = properties._rigOffset;

                    if (properties._worldSpace)
                    {
                        trail.transform.eulerAngles = properties._angles;

                        if (flipped)
                        {
                            // rotate this by 180
                            trail.transform.RotateAround(trail.transform.position, Vector3.up, 180.0f);
                        }
                    }
                    else
                    {
                        trail.transform.localEulerAngles = properties._angles;
                    }
                }

                trail.transform.localScale = Vector3.one;

                if (!properties._parent)
                {
                    trail.transform.parent = null;
                }
                else
                {
                    AttachTransform at = AttachTransform.LockPosition(trail, properties._lockXOffset, properties._lockYOffset, properties._lockZOffset);
                    tri.SetAttachTransform(at);
                }
            }

            return(trail);
        }