Inheritance: MonoBehaviour
示例#1
0
            public void FireProjectile(BasePlayer player, Vector3 position, Vector3 velocity)
            {
                //var item = ItemManager.CreateByName("ammo.rifle.incendiary");
                var itemModProjectile = item.info.GetComponent <ItemModProjectile>();
                var projectile        = itemModProjectile.projectileObject.Get().GetComponent <Projectile>();

                //Puts($"itemModProjectile.projectileVelocity: {itemModProjectile.projectileVelocity}");

                FiredProjectile firedProjectile = new FiredProjectile
                {
                    itemDef          = item.info,
                    itemMod          = itemModProjectile,
                    projectilePrefab = projectile,
                    firedTime        = UnityEngine.Time.realtimeSinceStartup,
                    travelTime       = 0f,
                    position         = position,
                    velocity         = velocity,
                    initialPosition  = position,
                    initialVelocity  = velocity
                };

                Add(firedProjectile);

                Effect effect = new Effect();

                effect.Clear();
                effect.Init(global::Effect.Type.Projectile, position, velocity, null);
                effect.scale        = 2;
                effect.pooledString = itemModProjectile.projectileObject.resourcePath;
                effect.number       = 1;
                EffectNetwork.Send(effect);
            }
示例#2
0
        private static float GetTimeout(FiredProjectile projectile, float distance)
        {
            double maxVelocity = OpCodes.GetMaxVelocity(projectile.AmmoType);

            if (projectile.AmmoType > 0)
            {
                maxVelocity *= OpCodes.GetProjectileVelocityScale((EPrefabUID)projectile.PrefabID);
            }
            double y = projectile.FiredTime + 1f;
            double z = maxVelocity;
            double w = OpCodes.GetProjectileInitialDistance(projectile.AmmoType);
            double f = distance;
            double x = (-w + f + 1.5f * y * z - 0.09799f * z);

            return((float)((x / (1.5f * z)) - GetCurrentTime()));
        }
示例#3
0
        // Token: 0x06000128 RID: 296 RVA: 0x0000A06C File Offset: 0x0000826C
        private static float GetTimeout(FiredProjectile projectile, float distance)
        {
            double maxVelocity = (double)OpCodes.GetMaxVelocity(projectile.AmmoType);
            bool   flag        = projectile.AmmoType > 0;

            if (flag)
            {
                maxVelocity *= (double)OpCodes.GetProjectileVelocityScale((EPrefabUID)projectile.PrefabID);
            }
            double y        = (double)(projectile.FiredTime + 1f);
            double z        = maxVelocity;
            double w        = (double)OpCodes.GetProjectileInitialDistance(projectile.AmmoType);
            double f        = (double)distance;
            double chisl    = -w + f + 1.5 * y * z - 0.0979899987578392 * z;
            double znam     = 1.5 * z;
            double drob     = chisl / znam;
            double normDrob = drob - (double)RangeAim.GetCurrentTime();

            return((float)normDrob);
        }
示例#4
0
            bool SimulateProjectile(FiredProjectile firedProjectile, float dt)
            {
                if (firedProjectile.travelTime == 0)
                {
                    dt = Time.realtimeSinceStartup - firedProjectile.firedTime;
                }
                else if (firedProjectile.travelTime > 8.0f)
                {
                    return(false);
                }

                Vector3 gravity     = UnityEngine.Physics.gravity * firedProjectile.projectilePrefab.gravityModifier;
                Vector3 oldPosition = firedProjectile.position;

                firedProjectile.position   += firedProjectile.velocity * dt;
                firedProjectile.velocity   += gravity * dt;
                firedProjectile.velocity   -= firedProjectile.velocity * firedProjectile.projectilePrefab.drag * dt;
                firedProjectile.travelTime += dt;

                //Line(andrew, oldPosition, firedProjectile.position, (toggle) ? Color.red : Color.blue, 1);
                toggle = !toggle;

                Vector3 vec  = firedProjectile.position - oldPosition;
                var     list = new List <RaycastHit>();

                GamePhysics.TraceAll(new Ray(oldPosition, vec), 0f, list, vec.magnitude, 1219701521, QueryTriggerInteraction.Ignore);

                bool didntHit = true;

                foreach (var hit in list)
                {
                    BaseEntity ent = hit.GetEntity();

                    didntHit = false;

                    HitInfo hitInfo = new HitInfo();
                    hitInfo.ProjectilePrefab   = firedProjectile.projectilePrefab;
                    hitInfo.Initiator          = firedProjectile.owner.Get(true);
                    hitInfo.HitEntity          = ent;
                    hitInfo.HitPositionWorld   = hit.point;
                    hitInfo.HitNormalWorld     = hit.normal;
                    hitInfo.PointStart         = firedProjectile.initialPosition;
                    hitInfo.ProjectileDistance = (firedProjectile.position - firedProjectile.initialPosition).magnitude;

                    hitInfo.ProjectilePrefab.CalculateDamage(hitInfo, firedProjectile.projectileModifier, 1);
                    firedProjectile.itemMod.ServerProjectileHit(hitInfo);
                    Effect.server.ImpactEffect(hitInfo);

                    if (ent == null)
                    {
                        return(false);
                    }

                    ent.OnAttacked(hitInfo);

                    if (ent.ShouldBlockProjectiles())
                    {
                        break;
                    }
                }

                return(didntHit);
            }
示例#5
0
 public void Add(FiredProjectile firedProjectile)
 {
     firedProjectiles.Add(firedProjectile);
 }