コード例 #1
0
        protected override void InitBulletForward(AbilityTriggerBullet bullet)
        {
            int       num       = this._traceBullets.SeekAddPosition <TraceDelay>();
            Vector3   position  = new Vector3(UnityEngine.Random.Range(-this.config.RandomPosX, this.config.RandomPosX), UnityEngine.Random.Range(-this.config.RandomPosY, this.config.RandomPosY), UnityEngine.Random.Range(-this.config.RandomPosZ, this.config.RandomPosZ));
            Transform transform = bullet.triggerBullet.transform;

            transform.position += bullet.triggerBullet.transform.TransformPoint(position) - bullet.triggerBullet.transform.localPosition;
            Transform transform2 = bullet.triggerBullet.transform;

            transform2.localRotation *= Quaternion.Euler(10f, 0f, UnityEngine.Random.Range(-2, 3) * 10f);
            this._offsetAngle        += 1.795196f;
            Vector3    vector2 = new Vector3(this.config.TargetOffset * Mathf.Sin(this._offsetAngle), 0f, this.config.TargetOffset * Mathf.Cos(this._offsetAngle));
            TraceDelay delay   = new TraceDelay {
                bulletID     = bullet.runtimeID,
                holdTimer    = this.config.HoldTime,
                lifeTimer    = this.config.LifeTime,
                startPos     = bullet.triggerBullet.transform.position,
                dummyPos     = bullet.triggerBullet.transform.position,
                targetOffset = vector2
            };

            this._traceBullets[num] = delay;
            if (this._attackTarget != null)
            {
                this._traceBullets[num].dummyPos = this._attackTarget.transform.position;
            }
        }
コード例 #2
0
        private void InitBulletDirAndPos(AbilityTriggerBullet bullet, Vector3 foward)
        {
            int num = this._traceBullets.SeekAddPosition <TraceDelay>();

            bullet.triggerBullet.transform.forward = foward;
            bullet.triggerBullet.SetCollisionEnabled(false);
            TraceDelay delay = new TraceDelay {
                bulletID      = bullet.runtimeID,
                delayTime     = this.config.DelayTime,
                tarPos        = bullet.triggerBullet.transform.position + ((Vector3)((foward * this.config.Offset) * UnityEngine.Random.value)),
                SpeedY        = 0f,
                isTriggered   = false,
                isStuck       = false,
                hitGroundTime = 0
            };

            this._traceBullets[num] = delay;
            float speed   = base.actor.Evaluate(this.config.BulletSpeed);
            float num3    = Vector3.Distance(this._traceBullets[num].tarPos, bullet.triggerBullet.transform.position);
            float y       = bullet.triggerBullet.transform.position.y;
            float gravity = this.config.Gravity;

            while (num3 < ((1f * Mathf.Sqrt((2f * y) / gravity)) * speed))
            {
                bullet.triggerBullet.speed *= 0.8f;
                speed = bullet.triggerBullet.speed;
                if (speed < 3f)
                {
                    break;
                }
            }
            this._traceBullets[num].SpeedY = ((num3 * gravity) / (3f * speed)) * UnityEngine.Random.Range((float)0.5f, (float)2f);
        }
コード例 #3
0
        protected override void InitBulletForwardWithArgument(AbilityTriggerBullet bullet, HitExplodeTracingBulletMixinArgument arg, uint otherID)
        {
            base.InitBulletForwardWithArgument(bullet, arg, otherID);
            if (this.config.IsRandomInit)
            {
                if (this.config.IsRandomInitCone)
                {
                    bullet.triggerBullet.transform.forward = (Vector3)((Quaternion.AngleAxis((float)UnityEngine.Random.Range(-40, 40), base.entity.transform.up) * Quaternion.AngleAxis((float)-UnityEngine.Random.Range(-10, 40), base.entity.transform.right)) * base.entity.transform.forward);
                }
                else
                {
                    bullet.triggerBullet.transform.forward = (Vector3)(Quaternion.AngleAxis((float)-UnityEngine.Random.Range(20, 0x2d), base.entity.transform.right) * base.entity.transform.forward);
                }
            }
            BaseMonoEntity entity = null;

            if (otherID != 0)
            {
                entity = Singleton <EventManager> .Instance.GetEntity(otherID);
            }
            int        num   = this._traceBullets.SeekAddPosition <TraceDelay>();
            TraceDelay delay = new TraceDelay {
                lineTimer       = this.config.TurnStartDelay,
                turnTimer       = this.config.TraceStartDelay,
                bulletID        = bullet.runtimeID,
                subAttackTarget = entity
            };

            this._traceBullets[num] = delay;
        }
コード例 #4
0
        protected override void InitBulletForward(AbilityTriggerBullet bullet)
        {
            int        num   = this._traceBullets.SeekAddPosition <TraceDelay>();
            TraceDelay delay = new TraceDelay {
                traceTimer = this.config.TraceStartDelay,
                bulletID   = bullet.runtimeID
            };

            this._traceBullets[num] = delay;
        }
コード例 #5
0
        public override void Core()
        {
            base.Core();
            for (int i = 0; i < this._traceBullets.Count; i++)
            {
                if (this._traceBullets[i] != null)
                {
                    TraceDelay           delay = this._traceBullets[i];
                    AbilityTriggerBullet actor = Singleton <EventManager> .Instance.GetActor <AbilityTriggerBullet>(delay.bulletID);

                    if (actor != null)
                    {
                        if (!delay.isStuck)
                        {
                            actor.triggerBullet.SetCollisionEnabled(false);
                            if ((actor.triggerBullet.transform.position.y < 0.03f) && (delay.SpeedY < 0f))
                            {
                                delay.SpeedY *= -this.config.Elasticity;
                                delay.hitGroundTime++;
                                delay.isTriggered = true;
                                if ((delay.SpeedY < 0.1f) || (delay.hitGroundTime >= 3))
                                {
                                    delay.isStuck = true;
                                    delay.SpeedY  = 0f;
                                }
                            }
                            actor.triggerBullet.speedAdd = new Vector3(0f, delay.SpeedY, 0f);
                            actor.triggerBullet.SetupTracing();
                            delay.SpeedY -= (this.config.Gravity * Time.deltaTime) * base.entity.TimeScale;
                        }
                        else
                        {
                            actor.triggerBullet.speedAdd = Vector3.zero;
                            actor.triggerBullet.SetupTracing(actor.triggerBullet.transform.position, 100f, 0f, false);
                        }
                        if (delay.isTriggered)
                        {
                            if (delay.delayTime > 0f)
                            {
                                delay.delayTime -= Time.deltaTime * base.entity.TimeScale;
                            }
                            else
                            {
                                actor.triggerBullet.SetCollisionEnabled(true);
                                if (delay.isStuck)
                                {
                                    this._traceBullets[i] = null;
                                }
                            }
                        }
                        Debug.DrawLine(delay.tarPos, actor.triggerBullet.transform.position, Color.blue);
                    }
                }
            }
        }
コード例 #6
0
        protected override void InitBulletForward(AbilityTriggerBullet bullet)
        {
            int        num   = this._traceBullets.SeekAddPosition <TraceDelay>();
            TraceDelay delay = new TraceDelay {
                bulletID  = bullet.runtimeID,
                lifeTimer = this.config.LifeTime,
                holdTimer = this.config.HoldTime,
                center    = base.entity.transform.position,
                centerDir = base.entity.transform.forward
            };

            this._traceBullets[num] = delay;
        }
コード例 #7
0
        public override void Core()
        {
            base.Core();
            for (int i = 0; i < this._traceBullets.Count; i++)
            {
                if (this._traceBullets[i] != null)
                {
                    TraceDelay           delay = this._traceBullets[i];
                    AbilityTriggerBullet actor = Singleton <EventManager> .Instance.GetActor <AbilityTriggerBullet>(delay.bulletID);

                    if (actor != null)
                    {
                        if (this._attackTarget != null)
                        {
                            delay.dummyPos += Vector3.ClampMagnitude(this._attackTarget.transform.position - delay.dummyPos, this.config.TraceSpeed * base.entity.TimeScale);
                        }
                        if (delay.holdTimer > 0f)
                        {
                            actor.triggerBullet.SetCollisionEnabled(false);
                            actor.triggerBullet.SetupTracing(actor.triggerBullet.transform.position, this.config.SteerCoef, 0f, false);
                            actor.triggerBullet.IgnoreTimeScale = this.config.IgnoreTimeScale;
                            delay.holdTimer -= Time.deltaTime * base.entity.TimeScale;
                        }
                        else if (delay.lifeTimer > 0f)
                        {
                            actor.triggerBullet.SetCollisionEnabled(true);
                            Vector3 vector3        = delay.dummyPos - delay.startPos;
                            Vector3 normalized     = vector3.normalized;
                            Vector3 targetPosition = actor.triggerBullet.transform.position + ((Vector3)((normalized * base.instancedAbility.Evaluate(this.config.BulletSpeed)) * this.config.LifeTime));
                            targetPosition.y = 0f;
                            targetPosition  += delay.targetOffset;
                            actor.triggerBullet.SetupTracing(targetPosition, this.config.SteerCoef, 0f, false);
                            actor.triggerBullet.IgnoreTimeScale = this.config.IgnoreTimeScale;
                            delay.lifeTimer -= Time.deltaTime * base.entity.TimeScale;
                        }
                        else
                        {
                            this._traceBullets[i] = null;
                        }
                    }
                }
            }
        }
コード例 #8
0
        public override void Core()
        {
            base.Core();
            for (int i = 0; i < this._traceBullets.Count; i++)
            {
                if (this._traceBullets[i] != null)
                {
                    TraceDelay           delay = this._traceBullets[i];
                    AbilityTriggerBullet actor = Singleton <EventManager> .Instance.GetActor <AbilityTriggerBullet>(delay.bulletID);

                    if (actor != null)
                    {
                        if (delay.holdTimer > 0f)
                        {
                            actor.triggerBullet.SetCollisionEnabled(false);
                            actor.triggerBullet.SetupTracing(actor.triggerBullet.transform.position, 99f, 0f, false);
                            delay.holdTimer -= Time.deltaTime * base.entity.TimeScale;
                        }
                        else if (delay.lifeTimer > 0f)
                        {
                            actor.triggerBullet.SetCollisionEnabled(true);
                            if ((this._attackTarget != null) && (Vector3.Distance(delay.center, this._attackTarget.transform.position) > this.config.CenterTraceRadial))
                            {
                                Vector3 vector4 = this._attackTarget.transform.position - delay.center;
                                delay.centerDir = vector4.normalized;
                            }
                            delay.center.y = actor.triggerBullet.transform.position.y;
                            delay.center  += (Vector3)(((delay.centerDir * this.config.CenterSpeed) * Time.deltaTime) * base.entity.TimeScale);
                            Vector3 vector6        = actor.triggerBullet.transform.position - delay.center;
                            Vector3 normalized     = vector6.normalized;
                            Vector3 vector2        = (Vector3)(Quaternion.AngleAxis(this.config.RadAngle, Vector3.up) * normalized);
                            Vector3 targetPosition = actor.triggerBullet.transform.position + ((Vector3)(vector2 * base.instancedAbility.Evaluate(this.config.BulletSpeed)));
                            actor.triggerBullet.SetupTracing(targetPosition, 99f, 0f, false);
                            delay.lifeTimer -= Time.deltaTime * base.entity.TimeScale;
                        }
                        else
                        {
                            this._traceBullets[i] = null;
                        }
                    }
                }
            }
        }
コード例 #9
0
        protected override void InitBulletForward(AbilityTriggerBullet bullet)
        {
            int num = this._traceBullets.SeekAddPosition <TraceDelay>();

            bullet.triggerBullet.transform.forward = base.entity.transform.forward;
            bullet.triggerBullet.SetCollisionEnabled(false);
            TraceDelay delay = new TraceDelay {
                bulletID      = bullet.runtimeID,
                delayTime     = this.config.DelayTime,
                tarPos        = bullet.triggerBullet.transform.position,
                SpeedY        = 0f,
                isTriggered   = false,
                isStuck       = false,
                hitGroundTime = 0
            };

            this._traceBullets[num] = delay;
            BaseMonoEntity attackTarget = base.entity.GetAttackTarget();

            if (attackTarget != null)
            {
                Vector3 vector = new Vector3(UnityEngine.Random.Range(-this.config.Offset, this.config.Offset), 0f, UnityEngine.Random.Range(-this.config.Offset, this.config.Offset));
                this._traceBullets[num].tarPos = attackTarget.transform.position + vector;
                Vector3 vector2 = this._traceBullets[num].tarPos - base.entity.transform.position;
                bullet.triggerBullet.transform.forward = vector2.normalized;
            }
            float speed   = base.actor.Evaluate(this.config.BulletSpeed);
            float num3    = Vector3.Distance(this._traceBullets[num].tarPos, base.entity.transform.position);
            float y       = bullet.triggerBullet.transform.position.y;
            float gravity = this.config.Gravity;

            while (num3 < ((4.2f * Mathf.Sqrt((2f * y) / gravity)) * speed))
            {
                bullet.triggerBullet.speed *= 0.8f;
                speed = bullet.triggerBullet.speed;
                if (speed < 3f)
                {
                    break;
                }
            }
            this._traceBullets[num].SpeedY = (num3 * gravity) / (6f * speed);
        }
コード例 #10
0
        public override void Core()
        {
            base.Core();
            for (int i = 0; i < this._traceBullets.Count; i++)
            {
                if (this._traceBullets[i] != null)
                {
                    TraceDelay delay = this._traceBullets[i];
                    delay.traceTimer -= Time.deltaTime * base.entity.TimeScale;
                    if (delay.traceTimer <= 0f)
                    {
                        this._traceBullets[i] = null;
                        AbilityTriggerBullet actor = Singleton <EventManager> .Instance.GetActor <AbilityTriggerBullet>(delay.bulletID);

                        if (((actor != null) && (actor.triggerBullet != null)) && actor.triggerBullet.IsActive())
                        {
                            actor.triggerBullet.SetupTracing(this.CalculateTraceTargetPosition(this.config.BaseOnTarget, this.config.Distance, this.config.Angle), this.config.TracingLerpCoef, this.config.TracingLerpCoefAcc, false);
                        }
                    }
                }
            }
        }
コード例 #11
0
        public override void Core()
        {
            base.Core();
            for (int i = 0; i < this._traceBullets.Count; i++)
            {
                if (this._traceBullets[i] != null)
                {
                    TraceDelay           delay = this._traceBullets[i];
                    AbilityTriggerBullet actor = Singleton <EventManager> .Instance.GetActor <AbilityTriggerBullet>(delay.bulletID);

                    if (actor != null)
                    {
                        BaseMonoEntity subAttackTarget;
                        if (delay.subAttackTarget != null)
                        {
                            subAttackTarget = delay.subAttackTarget;
                        }
                        else
                        {
                            subAttackTarget = this._attackTarget;
                        }
                        if (delay.lineTimer > 0f)
                        {
                            delay.lineTimer -= Time.deltaTime * base.entity.TimeScale;
                        }
                        else if (delay.turnTimer > 0f)
                        {
                            if (Mathf.Approximately(delay.turnTimer, this.config.TraceStartDelay) && (subAttackTarget != null))
                            {
                                Vector3 position     = actor.triggerBullet.transform.position;
                                Vector3 onUnitSphere = UnityEngine.Random.onUnitSphere;
                                Vector2 lhs          = new Vector2(onUnitSphere.x, onUnitSphere.z);
                                if (Vector2.Dot(lhs, new Vector2(actor.triggerBullet.transform.forward.x, actor.triggerBullet.transform.forward.z)) < 0f)
                                {
                                    lhs = (Vector2)(lhs * -1f);
                                }
                                onUnitSphere = new Vector3(lhs.x, onUnitSphere.y, lhs.y);
                                Vector3 vector4 = (Vector3)(onUnitSphere * Vector3.Distance(actor.triggerBullet.transform.position, subAttackTarget.transform.position));
                                position += vector4;
                                Mathf.Clamp(position.y, -this.config.RandomHeight, this.config.RandomHeight);
                                actor.triggerBullet.SetupTracing(position, this.config.TracingLerpCoef, 0f, false);
                            }
                            delay.turnTimer -= Time.deltaTime * base.entity.TimeScale;
                        }
                        else
                        {
                            if (subAttackTarget != null)
                            {
                                Vector3 vector5;
                                if (this.config.TraceRootNode)
                                {
                                    vector5 = subAttackTarget.GetAttachPoint("RootNode").position;
                                }
                                else
                                {
                                    vector5 = subAttackTarget.transform.position;
                                }
                                if (this.config.RandomOffsetDistance > 0f)
                                {
                                    Vector3 vector9 = new Vector3(UnityEngine.Random.value - 0.5f, UnityEngine.Random.value - 0.5f);
                                    Vector3 vector6 = (Vector3)(vector9.normalized * this.config.RandomOffsetDistance);
                                    vector6 += (Vector3)(Vector3.up * UnityEngine.Random.Range(0f, this.config.RandomHeight));
                                    vector5 += vector6;
                                }
                                if (!this.config.TraceY)
                                {
                                    vector5.y = actor.triggerBullet.transform.position.y;
                                }
                                actor.triggerBullet.SetupTracing(vector5, this.config.TracingLerpCoef, 0f, this.config.PassBy);
                            }
                            this._traceBullets[i] = null;
                        }
                    }
                }
            }
        }