From 46b1ac233bae64b656ce4ef323d170ae1d7eda12 Mon Sep 17 00:00:00 2001 From: Talon Date: Sun, 11 Apr 2021 02:01:24 +0200 Subject: [PATCH] Initial spaceship --- .vs/EvilSatellites/v16/.suo | Bin 68096 -> 68608 bytes EvilSatellites/Objects/AbstractGameObject.cs | 13 +++++ EvilSatellites/Objects/IGameObject.cs | 2 + EvilSatellites/Objects/Player.cs | 52 ++++++++++++++++++ EvilSatellites/Objects/SynthyProp.cs | 4 +- EvilSatellites/Program.cs | 1 + EvilSatellites/Screens/GameScreen.cs | 48 +++++++++++++++- .../sfx/engine/int/engineThrust.wav | 4 +- EvilSatellites/sfx/engine/int/engineWhine.wav | 4 +- 9 files changed, 119 insertions(+), 9 deletions(-) diff --git a/.vs/EvilSatellites/v16/.suo b/.vs/EvilSatellites/v16/.suo index 22fd7c96cdefe14f84ffecce38c535fa0f1f29c1..a5b4eb402e9d09a64130dfcdc89c3814e7941df1 100644 GIT binary patch delta 2534 zcmeH}eN0nV6u{qk^z|ETDJX(K8QpLSSOtwRX%IWdWSN#NekFj#ujw)>rbz|PUjs>%@ zmam0g4D$87F#>BNYQc`dh^*LH3g!@Vi3vm!G0|n2ghsgpwzw<_fc|hi}6ln}J zVs})NzDF8I3KC0fZUCsq?IbuH<2#CpQvvXn`jWVrd4#_PN?xVbNn z>P#W;BkGi;LJU=4okAI`NV;ffB55rVO-v$^iOB?u)ss#jB!rHT67dA9CM@9xc#8a~ z#M49wUFp-|E$m27fCVl~7OI6C_?x0x@*xGWS?ScWD|FM~3~`p|!9>;9ZsqpJWkeO? zeSLasO%y;E+9x>F)ijxv$He{DC{$xm>wp@xM>}8>2I;p7?K%fkU{L3f7SWu55o=?9 zg>tmVI$)I;jCH6VnQwepzDnXr;yni5lgWNDJ3}LC($_#tDJ7Q?>`7TCnZ||;1MU^% z3O1-DrwwOj=+Kxh!AlwG-dVSK7!~hi%LK2v=HFbwGmH1mGlQJurs zdk;Dehc9CpH&cO)` z_!?!l>dN)i);G|y;}<-;u?O$Ie}Sc8dxr^gt%to8X5n$Yn!Ja~xI{3iBO-~niSgdW zJfXdd!r`Aj#_R74fKL2iu#Wc@`y@|F@5EfI5wO&6d{BQ;gqH2DG12?jhagD|{IDIg z)52coOkW<^da>dYKZwJZ_kva*j*(6w)b4$5_goKXrP3zLsdiPThqR6B2?i&E{)`_n`9B4ldN|wbAYV)7hWmVa9 zxpK+)B2E6@Bzu@0_-G-!lTtzR*&%N}$JRDpxvs_cHqOApqj$9Lk~=Id%n)C`ehea6 zc32Eze8&)o^_Lm}J%deRsb2{=m5;=$eM|9Nw;J=iecDRSM%%H1GtnwnvYDvuoFRj8 z8@jU;7S2xFmPP72^JL5W#u;mGn_*7;V)}=) fk=D#=uHjJH0_%z|W|zkZ+b&eqZ#mpA1ta_pI<#OD delta 2712 zcmb_e4NOy46n^*F*FtH5mV%5Q0YOnGSSX-4M1BhRmyEK7ZK5cD$`*c#z*KZ=k!jFO zB0Wr&#Tcy`-82Dt4h4c1L=>1J5#8qIHWSTQWKpL$oe_5KqeEo6>E=zocg{Wc+}nH3 z`QAGfNN5sYGQLtbK42!g(75PXG%lr8cS7lbm}Q-BK&h$J zIgv2>5LN0DoK@B(G0IQ`4O0eJgZ;sVbG1!F%L2qgn99B7N!QYGmVwAbWFb}{RwCq; zx(t(Sn~3^AmDDJ2N8@S48N?tcVt)LWRr`4&nx1M$37N8|$exgWQ0!ok>Cq-a&|!MI z57EPb!a!C*vC=>aU;v-_Q0!zNIWXX45C`JU%s?nn{Xv#Pv9p1s@&nEW+28%S9Qqsl zgI6W2NmV4CkF)Ht`|LyzqH*LMgENVWhPn)$sHBOasey8hpDi`y;v^4(G)|xn7TFZx zte7tMYNne5S@Q(8F62H-`uGQ763#rGt&7qU(7LOkC_2%GUYM3eNCn)Db|r?xx*Afc z*P68?t`Aq}OF(O^?9aJ#`G^HK&q+>h0&&s{Oq5gxNZvEFp;w1VDKa?)Gr&n_ds)q-P_jL8# z(w{(G-&7eEo%C*7E$WLuyz}Li_7!kL>kMjEW{zj;B8vWVI-xB=#jDo$+tnpoMBGix ziUVwn_a`h=#82RBQleRjT6pOgfYbm}YBIPio5mYc`&rfcb@9=fSgj@~E+Bl?%$R_X z5KS}~(~Qb|MvvsqViC2#_v+D9CoT%fvd-7fi{Vg3?1`Ff&$kg{j;lPRu;F(nc%QEKh^Y^I?rKmt}!u1nynE}^xI?*lH6n5Xrm%5^7k%jvL@6!vn6P&?b`{|5^MR&5F@{dQ!A2@EYh5WWqAzg_X_F!yM zL+R!Uer-8Nh!PYH+i04hqqfMj*fN#`P?PdLl%@odM0j&a4cQ5`DaF2p_!V1)MW$sg zWR~DJERD&<*(f_yEzNLR0A7Gx#LIV(H9 z8k-qdTOJ8L>0Lz08#eDJ;M5=x5i@k#Wth>F)eJ*BoHs(-Gs5A>m2-ISdRrn7K>P5B zu;}=`r#>O1Meyp&4254lzp9{Zb$EDNXbW=V*B@#jaII0`G>@Dn9Broz@6d3OkT%>5 zz~=MGa?$Dcp>J>jo4UM7@Am@GB?e)=*@ z>`?NJU7HADAi8U=ien0#SRs7jVVQu!7Na%nUpVf0N+A_Wft$21R*09H z;Z_fq|C!-xqm+cXVTZMj@_PT+w0ACrrmMJ3=L*U;@IEoMWZ3C(vc@`ruCNf67iNy& hCstvK5OMU6opHF?CLXmBlUbxX%8pp-#UyH2`x6C%zE1!E diff --git a/EvilSatellites/Objects/AbstractGameObject.cs b/EvilSatellites/Objects/AbstractGameObject.cs index 4e311e7..c228136 100644 --- a/EvilSatellites/Objects/AbstractGameObject.cs +++ b/EvilSatellites/Objects/AbstractGameObject.cs @@ -14,6 +14,19 @@ namespace EvilSatellites.Objects get => _Position; set => _Position = value; } + private Vector3 _Dimensions; + public Vector3 Dimensions + { + get => _Dimensions; + set => _Dimensions = value; + } + public Vector3 Movement; + // public Vector3 Movement + // { + // get => _Movement; + // set => _Movement = value; + // } + private Vector3 _Orientation; public Vector3 Orientation { diff --git a/EvilSatellites/Objects/IGameObject.cs b/EvilSatellites/Objects/IGameObject.cs index aa5119a..69d6ea0 100644 --- a/EvilSatellites/Objects/IGameObject.cs +++ b/EvilSatellites/Objects/IGameObject.cs @@ -10,7 +10,9 @@ namespace EvilSatellites.Objects void Activate(); void Destroy(); Vector3 Position { get; set; } + Vector3 Dimensions { get; set; } Vector3 Orientation { get; set; } + // Vector3 Movement { get; set; } float Theta { get; set; } Matrix Rotation { get; set; } void Update(GameTime gameTime); diff --git a/EvilSatellites/Objects/Player.cs b/EvilSatellites/Objects/Player.cs index 768ce96..c215d10 100644 --- a/EvilSatellites/Objects/Player.cs +++ b/EvilSatellites/Objects/Player.cs @@ -2,16 +2,23 @@ using System.Collections.Generic; using System.Text; using Microsoft.Xna.Framework; +using SynthySound; namespace EvilSatellites.Objects { public class Player : AbstractGameObject { private Vector3 _PrevPos; + private Vector3 MaxSpeed = new Vector3(1, 1, 1); + private Vector3 Deceleration = new Vector3(0.005f, 0.005f, 0.005f); + private ISoundEffect sfxEngine; + private ISoundEffect sfxWhine; public Player(IScreen screen): base(screen) { Type = ObjectType.Player; Position = new Vector3(10, 0, 0); + Dimensions = new Vector3(5, 5, 5); + Movement = new Vector3(0, 0, 0); Rotation = Matrix.Identity; Orientation = Rotation.Forward; Activate(); @@ -19,6 +26,12 @@ namespace EvilSatellites.Objects override public void Activate() { + sfxEngine = Screen.Manager.Sound.Load(@"sfx/engine/int/engineThrust.wav", false); + sfxWhine = Screen.Manager.Sound.Load(@"sfx/engine/int/engineWhine.wav", false); + sfxEngine.Loop = true; + sfxWhine.Loop = true; + sfxEngine.Play(); + sfxWhine.Play(); return; } @@ -30,6 +43,45 @@ namespace EvilSatellites.Objects } override public void Update(GameTime gameTime) { + Move(Movement); + sfxEngine.Pitch = 0.5 + (Movement.Length() / MaxSpeed.Length()) * 4; + sfxWhine.Pitch = 0.5 + (Movement.Length() / MaxSpeed.Length()) * 1; + sfxWhine.Volume = MathF.Pow(Movement.Length() / MaxSpeed.Length(), 2f); + if (Movement.Length() != 0) + { + if (Movement.X > 0) + { + Movement.X -= Deceleration.X; + } else + { + Movement.X += Deceleration.X; + } + if (Movement.Y > 0) + { + Movement.Y -= Deceleration.Y; + } + else + { + Movement.Y += Deceleration.Y; + } + if (Movement.Z > 0) + { + Movement.Z -= Deceleration.Z; + } + else + { + Movement.Z += Deceleration.Z; + } + } + } + + public void Accelerate() + { + Vector3 acc = new Vector3(0f, 0f, -0.035f); + if (Math.Abs(Movement.X) < MaxSpeed.X && Math.Abs(Movement.Y) < MaxSpeed.Y && Math.Abs(Movement.Z) < MaxSpeed.Z) + { + Movement += acc; + } } } } diff --git a/EvilSatellites/Objects/SynthyProp.cs b/EvilSatellites/Objects/SynthyProp.cs index f9c84b3..82bff7c 100644 --- a/EvilSatellites/Objects/SynthyProp.cs +++ b/EvilSatellites/Objects/SynthyProp.cs @@ -11,11 +11,11 @@ namespace EvilSatellites.Objects private ISoundEffect3D Sound; public SynthyProp(IScreen screen, Vector3 pos): base(screen) { - Sound = Screen.Manager.Sound.Load3D(@"sfx/ambience/water1.wav"); + Sound = Screen.Manager.Sound.Load3D(@"sfx/ui/chat.wav"); Sound.Loop = true; Position = pos; Sound.Position = new System.Numerics.Vector3(pos.X, pos.Y, pos.Z); - Sound.ConnectToEffect(Screen.Manager.EnvironmentEffect); + // Sound.ConnectToEffect(Screen.Manager.EnvironmentEffect); Activate(); } diff --git a/EvilSatellites/Program.cs b/EvilSatellites/Program.cs index 8e8c7f0..83eaca6 100644 --- a/EvilSatellites/Program.cs +++ b/EvilSatellites/Program.cs @@ -7,6 +7,7 @@ namespace EvilSatellites [STAThread] static void Main() { + DavyKager.Tolk.Load(); using (var game = new Game1()) game.Run(); } diff --git a/EvilSatellites/Screens/GameScreen.cs b/EvilSatellites/Screens/GameScreen.cs index 2676dd1..3eef893 100644 --- a/EvilSatellites/Screens/GameScreen.cs +++ b/EvilSatellites/Screens/GameScreen.cs @@ -6,6 +6,7 @@ using Microsoft.Xna.Framework.Input; using SynthySound; using System.Linq; using EvilSatellites.Objects; +using DavyKager; namespace EvilSatellites.Screens { @@ -15,11 +16,19 @@ namespace EvilSatellites.Screens public ScreenState State { get; set; } public List Objects = new List(); private float Theta = 0; + private Player _player; + private ISoundEffect radarNoise; public void Activate() { State = ScreenState.Active; Player player = new Player(this); Objects.Add(player); + _player = player; + SynthyProp prop = new SynthyProp(this, new Vector3(15, 0, 15)); + Objects.Add(prop); + radarNoise = Manager.Sound.Load(@"sfx/ui/voiceError.wav", false); + radarNoise.Loop = true; + radarNoise.Play(); return; } @@ -28,6 +37,7 @@ namespace EvilSatellites.Screens State = ScreenState.Hidden; return; } + public void Update(GameTime gameTime) { foreach (var obj in Objects) @@ -35,22 +45,54 @@ namespace EvilSatellites.Screens obj.Update(gameTime); if (obj.Type == ObjectType.Player) { - // obj.TranslateForward(); Manager.Sound.ListenerPosition = new System.Numerics.Vector3(obj.Position.X, obj.Position.Y, obj.Position.Z); Manager.Sound.ListenerOrientationForward = System.Numerics.Vector3.Normalize(new System.Numerics.Vector3(obj.Rotation.Forward.X, obj.Rotation.Forward.Y, obj.Rotation.Forward.Z)); Manager.Sound.ListenerOrientationUpwards = System.Numerics.Vector3.Normalize(new System.Numerics.Vector3(obj.Rotation.Up.X, obj.Rotation.Up.Y, obj.Rotation.Up.Z)); Manager.Listener.Position = obj.Position; Manager.Listener.Forward = obj.Rotation.Forward; Manager.Listener.Up = obj.Rotation.Up; - // Console.WriteLine(Manager.Sound.ListenerOrientationForward); - // Console.WriteLine(Manager.Sound.ListenerOrientationUpwards); } } + Vector3 radarTarget = (Objects[1].Position - _player.Position); + radarTarget.Normalize(); + radarNoise.Pitch = MathHelper.Clamp(0.1f / Vector3.Distance(_player.Rotation.Forward, radarTarget)*3f, 0, 1); return; } public void HandleInput(GameTime gameTime, KeyboardState inputs) { + if (inputs.IsKeyDown(Keys.W)) + { + _player.Accelerate(); + } + if (inputs.IsKeyDown(Keys.Left)) + { + _player.RotateY(0.05f); + } + if (inputs.IsKeyDown(Keys.Right)) + { + _player.RotateY(-0.05f); + } + if (inputs.IsKeyDown(Keys.Up)) + { + _player.RotateX(0.05f); + } + if (inputs.IsKeyDown(Keys.Down)) + { + _player.RotateX(-0.05f); + } + if (inputs.IsKeyDown(Keys.V)) + { + Tolk.Speak(_player.Movement.Length().ToString(), true); + } + if (inputs.IsKeyDown(Keys.X)) + { + Tolk.Speak(radarNoise.Pitch.ToString(), true); + } + if (inputs.IsKeyDown(Keys.C)) + { + Tolk.Speak(_player.Position.ToString()); + } } } diff --git a/EvilSatellites/sfx/engine/int/engineThrust.wav b/EvilSatellites/sfx/engine/int/engineThrust.wav index 6f61f06..ba7142c 100644 --- a/EvilSatellites/sfx/engine/int/engineThrust.wav +++ b/EvilSatellites/sfx/engine/int/engineThrust.wav @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d47cb047800cfbd9189404b46991b7e2c5d1623a37cb1d235e34b5389d90cbd -size 2778404 +oid sha256:70cee281d65bdf707d46e5ecba24c98ae6066b85965fd930826becaedf78a532 +size 2508512 diff --git a/EvilSatellites/sfx/engine/int/engineWhine.wav b/EvilSatellites/sfx/engine/int/engineWhine.wav index 529fec2..6316851 100644 --- a/EvilSatellites/sfx/engine/int/engineWhine.wav +++ b/EvilSatellites/sfx/engine/int/engineWhine.wav @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b77babc3153c25d827a353c6f8acccee57b562364dd33ddfbbaea4afba9ed83c -size 3146198 +oid sha256:79fc765256e9b99f1b34de78fcbc38b6685caecf1b3b948896c04a8285eebe86 +size 2876306