protected void Fire() { //TODO: fire sound Bullet newBullet = (Bullet)bullet.Instance(); GetTree().Root.AddChild(newBullet); newBullet.GlobalTransform = barrel.GlobalTransform; newBullet.damage = -8; newBullet.ApplyImpulse(new Vector3(0, 0, 0), -newBullet.GlobalTransform.basis.z * newBullet.speed); parent.UpdatePath(parent.playerPos); snd.PitchScale = fireRate; snd.Play(); }
protected void Fire(int i) { Bullet newBullet = (Bullet)bullet.Instance(); newBullet.Transform = GlobalTransform * barrels[i]; GetTree().Root.AddChild(newBullet); newBullet.ApplyImpulse(new Vector3(0, 0, 0), -newBullet.GlobalTransform.basis.z * newBullet.speed * (launchSpeedByDistance ? ToGlobal(Translation).DistanceTo(player.Translation) : 1)); //parent.GetTarget(); //find a new target //parent.UpdatePath(parent.targetNavPos); //start over pathfinding using new target //snd.PitchScale = fireRate; // should I use different randoms for pitchscale later? if (snd != null) { snd.Play(); } }
protected void FireFlame() { /*Flames aren't done using the particle system because Godot does not support per-particle collission * so what we have instead is an extremely rapid fire bullet with short lifespan, effectively limiting its range */ if (player.fuel > 0) { coolMeter.Value = 100; player.fuel--; int fuelInt = (int)player.fuel; ammoNum.Text = fuelInt.ToString(); Bullet newBullet = (Bullet)instanceFlame.Instance(); newBullet.Transform = GlobalTransform * barrels[0]; //newBullet.Translate(barrels[0].origin); GetTree().Root.AddChild(newBullet); newBullet.ApplyImpulse(new Vector3(0, 0, 0), -newBullet.GlobalTransform.basis.z * newBullet.speed); } }
protected void FireGrenades() { if (grenades > 0) { switchSnd.Stream = fireGren; switchSnd.Play(); coolMeter.Value = 100; grenades--; ammoNum.Text = grenades.ToString(); Bullet newBullet = (Bullet)instanceGrenade.Instance(); newBullet.Transform = GlobalTransform * barrels[0]; GetTree().Root.AddChild(newBullet); newBullet.ApplyImpulse(new Vector3(0, 0, 0), -newBullet.GlobalTransform.basis.z * newBullet.speed); } }
protected void FireRepeater() //this one is gonna need extra parameters when we add multiple weapons { if (bullets > 0) { switchSnd.Stream = fireRep; switchSnd.Play(); coolMeter.Value = 100; bullets--; ammoNum.Text = bullets.ToString(); Bullet newBullet = (Bullet)instanceRepeater.Instance(); newBullet.Transform = GlobalTransform * barrels[0]; GetTree().Root.AddChild(newBullet); newBullet.ApplyImpulse(new Vector3(0, 0, 0), -newBullet.GlobalTransform.basis.z * newBullet.speed); } }
protected void FireFlame() { /*Flames aren't done using the particle system because Godot does not support per-particle collission * so what we have instead is an extremely rapid fire bullet with short lifespan, effectively limiting its range */ if (player.fuel > 0) { coolMeter.Value = 100; player.fuel -= 2; int fuelInt = (int)player.fuel; ammoNum.Text = fuelInt.ToString(); PackedScene newWeapon = (PackedScene)ResourceLoader.Load("res://Prefabs/Bullets/Player_Flame.tscn"); Bullet newBullet = (Bullet)newWeapon.Instance(); newBullet.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet); newBullet.friendly = true; newBullet.ApplyImpulse(new Vector3(0, 0, 0), -newBullet.GlobalTransform.basis.z * newBullet.speed); } }
protected void FireGrenades() { if (grenades > 0) { switchSnd.SetStream(fireGren); switchSnd.Play(); coolMeter.Value = 100; grenades--; ammoNum.Text = grenades.ToString(); PackedScene newWeapon = (PackedScene)ResourceLoader.Load("res://Prefabs/Bullets/Player_Grenades.tscn"); Bullet newBullet = (Bullet)newWeapon.Instance(); newBullet.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet); newBullet.friendly = true; newBullet.ApplyImpulse(new Vector3(0, 0, 0), -newBullet.GlobalTransform.basis.z * newBullet.speed); } }
protected void FireRepeater()//this one is gonna need extra parameters when we add multiple weapons { if (bullets > 0) { switchSnd.SetStream(fireShot); switchSnd.Play(); coolMeter.Value = 100; bullets--; ammoNum.Text = bullets.ToString(); PackedScene newWeapon = (PackedScene)ResourceLoader.Load("res://Prefabs/Bullets/Player_Repeater.tscn"); Bullet newBullet = (Bullet)newWeapon.Instance(); newBullet.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet); newBullet.friendly = true; newBullet.ApplyImpulse(new Vector3(0, 0, 0), -newBullet.GlobalTransform.basis.z * newBullet.speed); } }
protected void FireBuckshot() //this one is why I gave the player 9 barrel transforms { if (shells > 0) { switchSnd.Stream = fireShot; switchSnd.Play(); coolMeter.Value = 100; shells--; ammoNum.Text = shells.ToString(); for (int i = 0; i < barrels.Count; i++) { Bullet newBullet = (Bullet)instanceBuckshot.Instance(); newBullet.Transform = GlobalTransform * barrels[i]; GetTree().Root.AddChild(newBullet); newBullet.ApplyImpulse(new Vector3(0, 0, 0), -newBullet.GlobalTransform.basis.z * newBullet.speed); } } }
protected void FireBuckshot() //this one is SUPER hacked together for now but I don't see any easier way to implement spread shots at the current moment { //because Godot's C# support isn't complete enough to it the same way I did in the Unity version //forgive me master, but this code is going to be super messy. if (shells > 0) { switchSnd.SetStream(fireShot); switchSnd.Play(); coolMeter.Value = 100; shells--; ammoNum.Text = shells.ToString(); PackedScene newWeapon = (PackedScene)ResourceLoader.Load("res://Prefabs/Bullets/Player_Buckshot.tscn"); //center Bullet newBullet = (Bullet)newWeapon.Instance(); newBullet.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet); newBullet.friendly = true; newBullet.ApplyImpulse(new Vector3(0, 0, 0), -newBullet.GlobalTransform.basis.z * newBullet.speed); //left Bullet newBullet2 = (Bullet)newWeapon.Instance(); newBullet2.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet2); newBullet2.RotateObjectLocal(new Vector3(0, 1, 0), buckshotSpread); newBullet2.friendly = true; newBullet2.ApplyImpulse(new Vector3(0, 0, 0), -newBullet2.GlobalTransform.basis.z * newBullet2.speed); //right Bullet newBullet3 = (Bullet)newWeapon.Instance(); newBullet3.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet3); newBullet3.RotateObjectLocal(new Vector3(0, 1, 0), -buckshotSpread); newBullet3.friendly = true; newBullet3.ApplyImpulse(new Vector3(0, 0, 0), -newBullet3.GlobalTransform.basis.z * newBullet3.speed); //up Bullet newBullet4 = (Bullet)newWeapon.Instance(); newBullet4.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet4); newBullet4.RotateObjectLocal(new Vector3(1, 0, 0), buckshotSpread); newBullet4.friendly = true; newBullet4.ApplyImpulse(new Vector3(0, 0, 0), -newBullet4.GlobalTransform.basis.z * newBullet4.speed); //down Bullet newBullet5 = (Bullet)newWeapon.Instance(); newBullet5.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet5); newBullet5.RotateObjectLocal(new Vector3(1, 0, 0), -buckshotSpread); newBullet5.friendly = true; newBullet5.ApplyImpulse(new Vector3(0, 0, 0), -newBullet5.GlobalTransform.basis.z * newBullet5.speed); //down-left Bullet newBullet6 = (Bullet)newWeapon.Instance(); newBullet6.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet6); newBullet6.RotateObjectLocal(new Vector3(1, 0, 0), -buckshotSpread / 1.3f); newBullet6.RotateObjectLocal(new Vector3(0, 1, 0), buckshotSpread / 1.3f); newBullet6.friendly = true; newBullet6.ApplyImpulse(new Vector3(0, 0, 0), -newBullet6.GlobalTransform.basis.z * newBullet6.speed); //up-left Bullet newBullet7 = (Bullet)newWeapon.Instance(); newBullet7.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet7); newBullet7.RotateObjectLocal(new Vector3(1, 0, 0), buckshotSpread / 1.3f); newBullet7.RotateObjectLocal(new Vector3(0, 1, 0), buckshotSpread / 1.3f); newBullet7.friendly = true; newBullet7.ApplyImpulse(new Vector3(0, 0, 0), -newBullet7.GlobalTransform.basis.z * newBullet7.speed); //up-right Bullet newBullet8 = (Bullet)newWeapon.Instance(); newBullet8.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet8); newBullet8.RotateObjectLocal(new Vector3(1, 0, 0), buckshotSpread / 1.3f); newBullet8.RotateObjectLocal(new Vector3(0, 1, 0), -buckshotSpread / 1.3f); newBullet8.friendly = true; newBullet8.ApplyImpulse(new Vector3(0, 0, 0), -newBullet8.GlobalTransform.basis.z * newBullet8.speed); //down-right Bullet newBullet9 = (Bullet)newWeapon.Instance(); newBullet9.GlobalTransform = barrel.GlobalTransform; GetTree().Root.AddChild(newBullet9); newBullet9.RotateObjectLocal(new Vector3(1, 0, 0), -buckshotSpread / 1.3f); newBullet9.RotateObjectLocal(new Vector3(0, 1, 0), -buckshotSpread / 1.3f); newBullet9.friendly = true; newBullet9.ApplyImpulse(new Vector3(0, 0, 0), -newBullet9.GlobalTransform.basis.z * newBullet9.speed); } }