Ejemplo n.º 1
0
 private void UpdateTarget(MultiTargetMissileAction.TargetInfo targetInfo)
 {
     if (targetInfo == null || targetInfo.missile == null)
     {
         return;
     }
     if (this.curveType == MultiTargetMissileAction.CurveType.Bezier)
     {
         float num = Time.time - targetInfo.timeStamp;
         if (num > targetInfo.duration)
         {
             this.OnReachTarget(targetInfo);
             return;
         }
         float num2 = num / this.BezierDutationMin;
         num2 *= num2;
         Vector3 pointAtTime = targetInfo.curveBezier.GetPointAtTime(num2);
         targetInfo.missile.transform.position = pointAtTime;
         Vector3 forward = targetInfo.targetPosition - pointAtTime;
         if (forward.sqrMagnitude > 0.1f)
         {
             Quaternion to = Quaternion.LookRotation(forward);
             this.damping += 0.9f;
             this.missile.transform.rotation = Quaternion.Slerp(this.missile.transform.rotation, to, Time.deltaTime * this.damping);
         }
     }
     else
     {
         if (targetInfo.target != null && !targetInfo.actor.IsDead)
         {
             targetInfo.targetPosition = targetInfo.target.transform.position;
             targetInfo.targetPosition.y = targetInfo.targetPosition.y + this.YOffset;
         }
         Vector3 vector = this.Accel * Time.deltaTime;
         targetInfo.speed.x = Mathf.Clamp(targetInfo.speed.x + vector.x, 1f, this.SpeedMax.x);
         targetInfo.speed.y = Mathf.Clamp(targetInfo.speed.y + vector.y, 1f, this.SpeedMax.y);
         targetInfo.speed.z = Mathf.Clamp(targetInfo.speed.z + vector.z, 1f, this.SpeedMax.z);
         if (this.parabolaAngle <= 0f)
         {
             Vector3 vector2 = targetInfo.targetPosition - targetInfo.missile.transform.position;
             if (vector2 != Vector3.zero)
             {
                 Quaternion to2 = Quaternion.LookRotation(vector2);
                 this.damping += 0.9f;
                 targetInfo.missile.transform.rotation = Quaternion.Slerp(targetInfo.missile.transform.rotation, to2, Time.deltaTime * this.damping);
             }
             Vector3 vector3 = targetInfo.speed * Time.deltaTime;
             targetInfo.missile.transform.position += vector2.normalized * vector3.x;
             targetInfo.missile.transform.position += vector2.normalized * vector3.y;
             targetInfo.missile.transform.position += vector2.normalized * vector3.z;
             if (vector2.magnitude < vector3.magnitude)
             {
                 targetInfo.targetPosition.y = targetInfo.targetPosition.y - this.YOffset;
                 this.OnReachTarget(targetInfo);
                 return;
             }
         }
         else
         {
             targetInfo.missile.transform.LookAt(targetInfo.targetPosition);
             float num3 = targetInfo.speed.x * targetInfo.speed.y * targetInfo.speed.z * Time.deltaTime;
             float num4 = Vector3.Distance(targetInfo.missile.transform.position, targetInfo.targetPosition);
             float num5 = (targetInfo.distanceToTarget > 0f) ? (Mathf.Min(1f, num4 / targetInfo.distanceToTarget) * this.parabolaAngle) : 0f;
             num5 = Mathf.Clamp(-num5, -this.parabolaAngle, this.parabolaAngle);
             targetInfo.missile.transform.rotation = targetInfo.missile.transform.rotation * Quaternion.Euler(num5, 0f, 0f);
             targetInfo.missile.transform.Translate(Vector3.forward * num3);
             if (num4 < num3)
             {
                 targetInfo.targetPosition.y = targetInfo.targetPosition.y - this.YOffset;
                 this.OnReachTarget(targetInfo);
                 return;
             }
         }
     }
 }
Ejemplo n.º 2
0
 private void OnReachTarget(MultiTargetMissileAction.TargetInfo targetInfo)
 {
     if (targetInfo == null)
     {
         return;
     }
     if (this.explodePrefab != null)
     {
         Transform instance = PoolMgr.SpawnParticleSystem(this.explodePrefab.transform, targetInfo.missile.transform.position, Quaternion.identity, 1f);
         PoolMgr.spawnPool.Despawn(instance, this.explodeLifeTime);
     }
     if (targetInfo.missile != null)
     {
         PoolMgr.spawnPool.Despawn(targetInfo.missile.transform, this.MissileDeleteDelay);
         targetInfo.missile = null;
     }
     if (base.variables != null && base.variables.skillCaster != null && targetInfo.actor != null)
     {
         base.variables.skillCaster.DoEffectOnTarget(base.variables.skillInfo, targetInfo.actor, 0);
     }
 }