private void UpdatePlayer() { var previousPosition = player.Position.Copy(); player.UpdatePosition(keyState, currentLevel.StaticShapes); currentLevel.CollisionsInfo = CollisionSolver.ResolveCollisions(currentLevel.SceneShapes); AudioEngine.UpdateListenerPosition(player.Position); var realVelocity = player.Position - previousPosition; player.MeleeWeapon.MoveRangeBy(realVelocity); cursor.MoveBy(viewForm.GetCursorDiff() + realVelocity); player.UpdateSprites(cursor.Position); if (mouseState.RMB && player.MeleeWeapon.IsReady) { player.RaiseMeleeWeapon(); } else if (mouseState.LMB && player.CurrentWeapon.IsReady && !player.IsMeleeWeaponInAction) { player.HideMeleeWeapon(); var firedBullets = player.CurrentWeapon.Fire(player.Position, cursor); AudioEngine.PlayNewInstance("event:/gunfire/2D/misc/DROPPED_SHELL"); currentLevel.Bullets.AddRange(firedBullets); currentLevel.Particles.Add(ParticleFactory.CreateShell(player.Position, cursor.Position - player.Position, player.CurrentWeapon)); } player.IncrementTick(); }
public override List <Bullet> Fire(Vector gunPosition, CustomCursor cursor) { var spray = new List <Bullet>(); var direction = (cursor.Position - gunPosition).Normalize(); const int shotsAmount = 6; for (var i = 0; i < shotsAmount; i++) { var offset = new Vector(r.Next(-3, 3), r.Next(-3, 3)) / 30; var e = direction + offset; var position = gunPosition + e * 40; spray.Add(new Bullet( position, e * 30, bulletWeight, new Edge(position, position + e * 40), 12)); } ammo--; ticksFromLastFire = 0; AudioEngine.PlayNewInstance(fireSoundPath); cursor.MoveBy(new Vector(r.Next(-40, 40), r.Next(-40, 40))); return(spray); }
public override List <Bullet> Fire(Vector gunPosition, CustomCursor cursor) { var spray = new List <Bullet>(); var direction = (cursor.Position - gunPosition).Normalize(); var position = gunPosition + direction * 48; spray.Add(new Bullet( position, direction * 30, bulletWeight, new Edge(position, position + direction * 32), 20)); ammo--; ticksFromLastFire = 0; AudioEngine.PlayNewInstance(fireSoundPath); cursor.MoveBy(new Vector(r.Next(-10, 10), r.Next(-10, 10))); return(spray); }