From 1c2fc7b86b4f4616a8d0e30e903f9cb04444ff4c Mon Sep 17 00:00:00 2001 From: Talon Date: Sun, 11 Apr 2021 14:12:55 +0200 Subject: [PATCH] Add collision detection with octree --- .../DesignTimeBuild/.dtbcache.v2 | Bin 0 -> 62845 bytes .vs/EvilSatellites/v16/.suo | Bin 68608 -> 64000 bytes EvilSatellites/Objects/AbstractGameObject.cs | 12 +++-- EvilSatellites/Objects/IGameObject.cs | 6 +-- EvilSatellites/Objects/Player.cs | 5 +-- EvilSatellites/Objects/SynthyProp.cs | 6 +++ EvilSatellites/Quadtree/Positional.cs | 6 +-- EvilSatellites/Quadtree/Quadtree.cs | 2 +- EvilSatellites/Quadtree/QuadtreeNode.cs | 2 +- EvilSatellites/Screens/GameScreen.cs | 42 +++++++++++++++++- EvilSatellites/sfx/engine/int/engineWhine.wav | 4 +- .../sfx/engine/int/engineWhine_2.wav | 3 ++ .../sfx/weapons/LaserCannon/fire/1.wav | 3 ++ .../sfx/weapons/LaserCannon/fire/2.wav | 3 ++ .../sfx/weapons/LaserCannon/fire/3.wav | 3 ++ .../sfx/weapons/LaserCannon/reload.wav | 3 ++ EvilSatellites/sfx/weapons/LaserMG/fire/1.wav | 3 ++ EvilSatellites/sfx/weapons/LaserMG/fire/2.wav | 3 ++ EvilSatellites/sfx/weapons/LaserMG/fire/3.wav | 3 ++ EvilSatellites/sfx/weapons/LaserMG/fire/4.wav | 3 ++ EvilSatellites/sfx/weapons/LaserMG/reload.wav | 3 ++ 21 files changed, 94 insertions(+), 21 deletions(-) create mode 100644 .vs/EvilSatellites/DesignTimeBuild/.dtbcache.v2 create mode 100644 EvilSatellites/sfx/engine/int/engineWhine_2.wav create mode 100644 EvilSatellites/sfx/weapons/LaserCannon/fire/1.wav create mode 100644 EvilSatellites/sfx/weapons/LaserCannon/fire/2.wav create mode 100644 EvilSatellites/sfx/weapons/LaserCannon/fire/3.wav create mode 100644 EvilSatellites/sfx/weapons/LaserCannon/reload.wav create mode 100644 EvilSatellites/sfx/weapons/LaserMG/fire/1.wav create mode 100644 EvilSatellites/sfx/weapons/LaserMG/fire/2.wav create mode 100644 EvilSatellites/sfx/weapons/LaserMG/fire/3.wav create mode 100644 EvilSatellites/sfx/weapons/LaserMG/fire/4.wav create mode 100644 EvilSatellites/sfx/weapons/LaserMG/reload.wav diff --git a/.vs/EvilSatellites/DesignTimeBuild/.dtbcache.v2 b/.vs/EvilSatellites/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000000000000000000000000000000000000..ec4de394538891c229ca4858ce0808f01ace1b9f GIT binary patch literal 62845 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 J!J|X0|HSw5rhh8s-h^MXbAxVdLUpUhbRF; z2=`rwI3|s>!K7)OihLb|Q3(n$Ripfnim@?jJ8cngA_)qP5xRSTar#F|+qBb}c5go4 z@9w_$_Py`!zJ2cugJy>P(&~_D&u|wZz>zuI!7jB;Rhf zkQ(Pfp(IMq<{&FYKzp<&y9oCsB@(R}6q*%A<)Su1fe$1Z;xSr%nrIdxYiyGvED+NW zL5SxNQxR?m2V=Y=zW|xt#&{Q=N5&F0%-k3st<<1Ic4!*15B)0FXP2TthKVAOUxtW8 zL?M^BrxW=mRxs zC-uRsr+r{r4?dJQkk&f!{r31ZDXyrb52j8I__jgVA{-I!i0KGwE5Wx5f?RHgn1XOd zOc8wCoR$=W8!^@x?xCL))S zN}i0&Y6K@fR!1;7BR_hhXfmLGzEaTGf~~_*2siTsLx>cH9WI*qK}RiU1a}j!7h>g1 zi-Y_p1`Y~sa?TH>fN@R831qG!h!%6(@wWv7>dS3LF3di7O^PA1hd(%TwDflC`N90T zH+EF-dX)3ZK<8VBP9=d>e^0f$|AUp+Rc@DK&M%W*__kX&(6al>y2=BeJ@??~qW&)J>OnK!MgA3koSf#&E%pp{s| zqJny*-^abbSo)fBq^o?x``={fek0iG|CLCR7yq-7F8Jb2zj(_<`OT zqf2E@LypCq5eJGn&<+|4r4w`)Iu(S8?+lKjSrKnV;GW(4NJ5;HS0&tx5`AYM+KG9h3T?c5J)OsT2akc}4|jOcB_|GxI0Xf=a%HP+v%Dc`!4m(z$_ULZ0PztRUO4mTcj& zpfX`5>gre|)F&KaHITe+uVpru!KH8o*uD*h*CoQe^-3_TUkzU;dNm}vG4?$8CB_RI zgV|zYAbUd?1aEAx)8n8QxhxtsUOqy=*dGKz&qi2c!>1?y(K7sbs*P;BCAPC-E z1?}nP5V|Q4`ZBA)~Mcx%XZaOkkbegU@HoVX*{hv%NF)A~QP2!!~4peN$NYzXiUpfhN zCrw@~y<)p(?2F7HAi}`*j!N>DFW^CRfxl zm|NikKAm#$Sa%1rz_MW?UF-N-r+{OozbL(ZSORUSm!V>B9<-O^<}O=qRWsg~UT=!k zWgjyex}{DKtw(K|bi)?8*mP+=Gy2HHBY&J@2Hp}2@b6s>*ZXF$TIjf242$|SmQ`Fh z_cE7ls!!%UL1v7zfaLYl!S#;D3~fP4PpJ9YHoCTPaHcm13_YHZ*5d@tJ%>fx-Wd!# zy28jEdr0lu|D9P@h1Dn*j>kBO75xt+px)yTvE5ei+0{r$><<5b(Eg#I?b1VI?@uQ@ zEf@aX0n3wt;l4pMd}ZK8!~JBYvRIQ*vM1=k*`&>V-2>dGbKm=N`H?r=U$C%ld@n!s z$4jo$jdKcJIWS3X4h8e{7gz%C4DA#i-1?^n?`IK^ax)m#4sTo@%WdM)F-JFZWyd|j rQxdKQY_jJ|FXxo(F5u$u2&4=iyQ@#ORADF_bT3VVfuW^O?0fzdcb%Y# diff --git a/EvilSatellites/Objects/AbstractGameObject.cs b/EvilSatellites/Objects/AbstractGameObject.cs index c228136..4bbc64d 100644 --- a/EvilSatellites/Objects/AbstractGameObject.cs +++ b/EvilSatellites/Objects/AbstractGameObject.cs @@ -21,12 +21,6 @@ namespace EvilSatellites.Objects set => _Dimensions = value; } public Vector3 Movement; - // public Vector3 Movement - // { - // get => _Movement; - // set => _Movement = value; - // } - private Vector3 _Orientation; public Vector3 Orientation { @@ -42,7 +36,7 @@ namespace EvilSatellites.Objects } public IScreen Screen; public ObjectType Type { get; set; } - + public bool IsDynamic { get => true; } public AbstractGameObject(IScreen screen) { Screen = screen; @@ -90,5 +84,9 @@ namespace EvilSatellites.Objects public abstract void Activate(); public abstract void Destroy(); + public virtual void OnCollision(IGameObject obj) + { + return; + } } } diff --git a/EvilSatellites/Objects/IGameObject.cs b/EvilSatellites/Objects/IGameObject.cs index 69d6ea0..2081aeb 100644 --- a/EvilSatellites/Objects/IGameObject.cs +++ b/EvilSatellites/Objects/IGameObject.cs @@ -5,20 +5,20 @@ using Microsoft.Xna.Framework; namespace EvilSatellites.Objects { - public interface IGameObject + public interface IGameObject : EvilSatellites.Quadtree.Positional { void Activate(); void Destroy(); Vector3 Position { get; set; } Vector3 Dimensions { get; set; } Vector3 Orientation { get; set; } - // Vector3 Movement { get; set; } + bool IsDynamic { get; } float Theta { get; set; } Matrix Rotation { get; set; } void Update(GameTime gameTime); ObjectType Type { get; set; } void Move(Vector3 pose); - + void OnCollision(IGameObject obj); } } diff --git a/EvilSatellites/Objects/Player.cs b/EvilSatellites/Objects/Player.cs index c215d10..c23bf77 100644 --- a/EvilSatellites/Objects/Player.cs +++ b/EvilSatellites/Objects/Player.cs @@ -75,12 +75,11 @@ namespace EvilSatellites.Objects } } - public void Accelerate() + public void Accelerate(Vector3 direction) { - 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; + Movement += direction; } } } diff --git a/EvilSatellites/Objects/SynthyProp.cs b/EvilSatellites/Objects/SynthyProp.cs index 82bff7c..4da4165 100644 --- a/EvilSatellites/Objects/SynthyProp.cs +++ b/EvilSatellites/Objects/SynthyProp.cs @@ -14,6 +14,7 @@ namespace EvilSatellites.Objects Sound = Screen.Manager.Sound.Load3D(@"sfx/ui/chat.wav"); Sound.Loop = true; Position = pos; + Dimensions = new Vector3(5, 5, 5); Sound.Position = new System.Numerics.Vector3(pos.X, pos.Y, pos.Z); // Sound.ConnectToEffect(Screen.Manager.EnvironmentEffect); Activate(); @@ -32,5 +33,10 @@ namespace EvilSatellites.Objects { Sound.Position = new System.Numerics.Vector3(Position.X, Position.Y, Position.Z); } + + public override void OnCollision(IGameObject obj) + { + Sound.Stop(); + } } } diff --git a/EvilSatellites/Quadtree/Positional.cs b/EvilSatellites/Quadtree/Positional.cs index 5273170..e1a5b32 100644 --- a/EvilSatellites/Quadtree/Positional.cs +++ b/EvilSatellites/Quadtree/Positional.cs @@ -1,10 +1,10 @@ -using System.Numerics; +using Microsoft.Xna.Framework; namespace EvilSatellites.Quadtree { public interface Positional { - Vector3 Position { get; } - Vector3 Dimensions { get; } + Vector3 Position { get; set; } + Vector3 Dimensions { get; set; } } } diff --git a/EvilSatellites/Quadtree/Quadtree.cs b/EvilSatellites/Quadtree/Quadtree.cs index a510c03..9b448cc 100644 --- a/EvilSatellites/Quadtree/Quadtree.cs +++ b/EvilSatellites/Quadtree/Quadtree.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using System.Numerics; +using Microsoft.Xna.Framework; namespace EvilSatellites.Quadtree { diff --git a/EvilSatellites/Quadtree/QuadtreeNode.cs b/EvilSatellites/Quadtree/QuadtreeNode.cs index 6482296..e2ec5aa 100644 --- a/EvilSatellites/Quadtree/QuadtreeNode.cs +++ b/EvilSatellites/Quadtree/QuadtreeNode.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Numerics; +using Microsoft.Xna.Framework; namespace EvilSatellites.Quadtree { diff --git a/EvilSatellites/Screens/GameScreen.cs b/EvilSatellites/Screens/GameScreen.cs index 3eef893..92a7bbf 100644 --- a/EvilSatellites/Screens/GameScreen.cs +++ b/EvilSatellites/Screens/GameScreen.cs @@ -7,6 +7,7 @@ using SynthySound; using System.Linq; using EvilSatellites.Objects; using DavyKager; +using EvilSatellites.Quadtree; namespace EvilSatellites.Screens { @@ -15,6 +16,7 @@ namespace EvilSatellites.Screens public ScreenManager Manager { get; set; } public ScreenState State { get; set; } public List Objects = new List(); + private Quadtree objtree = new Quadtree(new Vector3(10000, 10000, 10000), 10, 20); private float Theta = 0; private Player _player; private ISoundEffect radarNoise; @@ -40,8 +42,10 @@ namespace EvilSatellites.Screens public void Update(GameTime gameTime) { + objtree.Clear(); foreach (var obj in Objects) { + objtree.Add(obj); obj.Update(gameTime); if (obj.Type == ObjectType.Player) { @@ -56,14 +60,28 @@ namespace EvilSatellites.Screens Vector3 radarTarget = (Objects[1].Position - _player.Position); radarTarget.Normalize(); radarNoise.Pitch = MathHelper.Clamp(0.1f / Vector3.Distance(_player.Rotation.Forward, radarTarget)*3f, 0, 1); + CheckCollisions(); return; } public void HandleInput(GameTime gameTime, KeyboardState inputs) { + Vector3 move = new Vector3(0, 0, 0); if (inputs.IsKeyDown(Keys.W)) { - _player.Accelerate(); + move.Z = -0.035f; + } + if (inputs.IsKeyDown(Keys.S)) + { + move.Z = 0.035f; + } + if (inputs.IsKeyDown(Keys.A)) + { + move.X = -0.035f; + } + if (inputs.IsKeyDown(Keys.D)) + { + move.X = 0.035f; } if (inputs.IsKeyDown(Keys.Left)) { @@ -81,6 +99,7 @@ namespace EvilSatellites.Screens { _player.RotateX(-0.05f); } + _player.Accelerate(move); if (inputs.IsKeyDown(Keys.V)) { Tolk.Speak(_player.Movement.Length().ToString(), true); @@ -95,5 +114,26 @@ namespace EvilSatellites.Screens } } + private void CheckCollisions() + { + foreach (var obj in Objects) + { + var candidates = objtree.Find(obj.Position, obj.Dimensions); + foreach (var target in candidates) + { + if (obj == target) continue; + if (Intersects(obj, target)) + { + obj.OnCollision(target); + target.OnCollision(obj); + } + } + } + } + + public bool Intersects(IGameObject obj1, IGameObject obj2) + { + return (obj1.Position.X <= (obj2.Position.X + obj2.Dimensions.X) && (obj1.Position.X + obj1.Dimensions.X) >= obj2.Position.X) && (obj1.Position.Y <= (obj2.Position.Y + obj2.Dimensions.Y) && (obj1.Position.Y + obj1.Dimensions.Y) >= obj2.Position.Y) && (obj1.Position.Z <= (obj2.Position.Z + obj2.Dimensions.Z) && (obj1.Position.Z + obj1.Dimensions.Z) >= obj2.Position.Z); + } } } diff --git a/EvilSatellites/sfx/engine/int/engineWhine.wav b/EvilSatellites/sfx/engine/int/engineWhine.wav index 6316851..8141b74 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:79fc765256e9b99f1b34de78fcbc38b6685caecf1b3b948896c04a8285eebe86 -size 2876306 +oid sha256:182dff19352c93c533e164ab8d1aca1579022ac9ae26be41e2ffa1033c8d73ec +size 1429960 diff --git a/EvilSatellites/sfx/engine/int/engineWhine_2.wav b/EvilSatellites/sfx/engine/int/engineWhine_2.wav new file mode 100644 index 0000000..6316851 --- /dev/null +++ b/EvilSatellites/sfx/engine/int/engineWhine_2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79fc765256e9b99f1b34de78fcbc38b6685caecf1b3b948896c04a8285eebe86 +size 2876306 diff --git a/EvilSatellites/sfx/weapons/LaserCannon/fire/1.wav b/EvilSatellites/sfx/weapons/LaserCannon/fire/1.wav new file mode 100644 index 0000000..4ab9c96 --- /dev/null +++ b/EvilSatellites/sfx/weapons/LaserCannon/fire/1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0adb40d387297f6ecf47972d1409eaa1947200a14cff30bd8639d5ac7fdc4bd8 +size 1289018 diff --git a/EvilSatellites/sfx/weapons/LaserCannon/fire/2.wav b/EvilSatellites/sfx/weapons/LaserCannon/fire/2.wav new file mode 100644 index 0000000..29bd617 --- /dev/null +++ b/EvilSatellites/sfx/weapons/LaserCannon/fire/2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7417dd254621e65db44f18be439dd5353e726accbc429b95d4d858f23420bc3c +size 1313078 diff --git a/EvilSatellites/sfx/weapons/LaserCannon/fire/3.wav b/EvilSatellites/sfx/weapons/LaserCannon/fire/3.wav new file mode 100644 index 0000000..6cea2c1 --- /dev/null +++ b/EvilSatellites/sfx/weapons/LaserCannon/fire/3.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5189949bd3c368a8e5db29d69fc2f6ed0f71403c24e1a5bb4c851a02cccb6c15 +size 1536272 diff --git a/EvilSatellites/sfx/weapons/LaserCannon/reload.wav b/EvilSatellites/sfx/weapons/LaserCannon/reload.wav new file mode 100644 index 0000000..69e1974 --- /dev/null +++ b/EvilSatellites/sfx/weapons/LaserCannon/reload.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baf4ad57a88674a27eedd1d03e46c158673f2046a0f2fbd33a2b3f9c63012af2 +size 715046 diff --git a/EvilSatellites/sfx/weapons/LaserMG/fire/1.wav b/EvilSatellites/sfx/weapons/LaserMG/fire/1.wav new file mode 100644 index 0000000..3193ac9 --- /dev/null +++ b/EvilSatellites/sfx/weapons/LaserMG/fire/1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cea116eda9180d3b354317d926a03f89889fbec72f3a00790401c9d0ba1a700 +size 17684 diff --git a/EvilSatellites/sfx/weapons/LaserMG/fire/2.wav b/EvilSatellites/sfx/weapons/LaserMG/fire/2.wav new file mode 100644 index 0000000..971f4de --- /dev/null +++ b/EvilSatellites/sfx/weapons/LaserMG/fire/2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c21046932ad1dc328d2cbaead959a92e6520b6eb2b7cfe9e58a6bb4dff6a36fa +size 15920 diff --git a/EvilSatellites/sfx/weapons/LaserMG/fire/3.wav b/EvilSatellites/sfx/weapons/LaserMG/fire/3.wav new file mode 100644 index 0000000..00d60ae --- /dev/null +++ b/EvilSatellites/sfx/weapons/LaserMG/fire/3.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a0e062260906fb32689c692848f9c176f9da5ce0868fdbe82b81baab0eaac86 +size 15920 diff --git a/EvilSatellites/sfx/weapons/LaserMG/fire/4.wav b/EvilSatellites/sfx/weapons/LaserMG/fire/4.wav new file mode 100644 index 0000000..24fa605 --- /dev/null +++ b/EvilSatellites/sfx/weapons/LaserMG/fire/4.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb94beafa9649350dacba9f15d70ec346e7ebe8a48136a9ecd203541c4a4a9c1 +size 18260 diff --git a/EvilSatellites/sfx/weapons/LaserMG/reload.wav b/EvilSatellites/sfx/weapons/LaserMG/reload.wav new file mode 100644 index 0000000..eaffbb8 --- /dev/null +++ b/EvilSatellites/sfx/weapons/LaserMG/reload.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddb2c37d0e6e3b4253afcf1d45a07e22fbf32d80ec62510b6c0f36eb54a7e5b9 +size 332210