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; } }
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); }
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; }
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; }
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); } } } }
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; }
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; } } } } }
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; } } } } }
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); }
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); } } } } }
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; } } } } }