From c7d4d57dbe067eca6f0917d1b508ec0c86459f6b Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Sun, 22 Jun 2025 13:48:35 +0300 Subject: [PATCH] camera movement --- Content/Content.mgcb | 7 +- Content/Tilemap.kra~ | Bin 20637 -> 0 bytes Content/Tilemap.png | Bin 494 -> 0 bytes Content/images/atlas-definition.xml | 7 ++ Content/{Tilemap.kra => images/atlas.kra} | Bin 23854 -> 22728 bytes Content/images/atlas.png | Bin 0 -> 718 bytes Game1.cs | 118 +++++++++++++++++----- World/World.cs | 50 ++++++--- tunnet.code-workspace | 11 ++ tunnet.csproj | 4 + 10 files changed, 158 insertions(+), 39 deletions(-) delete mode 100644 Content/Tilemap.kra~ delete mode 100644 Content/Tilemap.png create mode 100755 Content/images/atlas-definition.xml rename Content/{Tilemap.kra => images/atlas.kra} (81%) create mode 100644 Content/images/atlas.png create mode 100644 tunnet.code-workspace diff --git a/Content/Content.mgcb b/Content/Content.mgcb index e1a4b9c..15f5d4e 100644 --- a/Content/Content.mgcb +++ b/Content/Content.mgcb @@ -13,7 +13,10 @@ #---------------------------------- Content ---------------------------------# -#begin Tilemap.png +#begin images/atlas-definition.xml +/copy:images/atlas-definition.xml + +#begin images/atlas.png /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyColor=255,0,255,255 @@ -23,5 +26,5 @@ /processorParam:ResizeToPowerOfTwo=False /processorParam:MakeSquare=False /processorParam:TextureFormat=Color -/build:Tilemap.png +/build:images/atlas.png diff --git a/Content/Tilemap.kra~ b/Content/Tilemap.kra~ deleted file mode 100644 index e1e7c665f756b3559ced37e6221f272a0f7cffd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20637 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 + + images/atlas + + + + diff --git a/Content/Tilemap.kra b/Content/images/atlas.kra similarity index 81% rename from Content/Tilemap.kra rename to Content/images/atlas.kra index 11da0a87141343eedad2f0543fa3d8b66b705c99..32e204d7c8d24dcd1bf8abe704083db67e8a3dca 100644 GIT binary patch delta 2356 zcmb7Gc{o(-A3tNeXr>`c(`Xiyu6>kbP0gbsk8KhfLu9FGn2~h|r%_V&F-liNS?b=( zR%B^$jg*RsT)Jc(lDc+9mT}K`o-XXPk=X>6wYS_zC7{cCK zR7@HWw(sJ9u@MF!WXS1d`3SlQ01(6gU<0(|?@6V5GrV+|{(iAX+!$R1cqFg5Z>|+_ zZM2@&8C*gdr0s9M8ow?Z;mR90 zMQjZ3Y%2SEc9)^++1|+JvTk~YbW!>}ExV-qM7m-S$8@x?K$mwhTP1ajR)FCy50q$s zol&XE`8c8wV{(c&d%N4zfOMFl#qGMJ6q;N4-5`^fdv&+opiN$WpF28xl#?_hS@)}# z8y6I(Vo77ed|9Gb(_xJhpP=D|^jm}Kc3JnY_QX3%v+UF4oD5hA%5|CE<=^1b0`WTK z(m|B_M@j83dEZ(!HDtdPA2K;MACiCy1*D%Nz1>`}9Wwe4#q^qG(`A)3wuH*oXVPp= z7chrnMEnm=#a%=hP)_4yB^R#I9_n}cgZatqHuv`Y{6bWPLIcH5gH};}VHOc~;}x<6 z^IU0`G@0X$2@&(zq0MV;^qDA*>$7A}ujIlI~X# z-_v~>CuUC@$yA{zYEkHWY131GWKdelaWt2$?Jp^UB;=~;<}Y8 zT6}}6L zXL3tA%qozv@5$Dk<}c?hB8gA7_iL9u3XInh?Bv?AZN}BO&Builm4{d;DWoWw*WjCy z$GIzt0c{w3yv)UMfkInG*2J|Lue+D*L->w=gqC-m4{|wbCUd>gPtO9?(e$hspDcIs z?0dQK$J1~wFf*3t^vUi0L9|(lRa%4Pr@C~K^EC5{d0*FD@_`wZg(okUO|>1U@fC`l zp1<#rFuVVBIg*kqB{9d=hLxF`s9F+%tIyO(aU%s3c>9E(@Ef9eIG(p6 zrnO#?Q*4>^#g(@L?7+B3?2cN%zpiw5QeW{q`G4KlY02jwD}sTh$!@ z&acNE3=j6_K7QSi^x#9+W?sTSd!K>P;hypmUAq`3I<~m(l>TMN?e_u>rN2&kEYU}E zsnF&&sGhaMRO|3aeo;WFX8I}A&47Y!)ppBb@lZA#86D1$}|k8&S}6fd2-?xcP% zeDv=;>_%^`9?Pyu(W%(*R~iD{h#6aY4x-};sMi#Lf4sa&{@_g>!$x&sT<_)EjyBh# zu&1uYby-Wy;6>cA8L6Lg_aIz+KWwWoi5tqCOD4nt;0x3hq0}Cw2UCOne7qn0B_S!X zg4o(?p)3WhKotm3U4!8Cl9f1e2)Pvy|IdMqVk!W@gb?U8pa=UAc$NP_pw=S3?!>BW z6mG@pB+cX`CX+uO1oKk>%yP`B2zH)f@29Om*j8BtB&^bB_O6 z^iG~G0U3k}r|!i-Uc4r`T-Ss|Y$`dpIEmed;mnHuddNL90oR^?-9+Fro}FO+aUbSn zD6EhReTuGno!a2apn7l~?GfI%1RQ2v9pjb4uY@PAweye|GrZ+RjDb5pj;tV|V2plzzbKfUQLl(Ie(3f|E(3J$G;rnb1(* z3ZeevwXHK6#yR7%MG_y(FjLVZ5FT815rc_B1mvV1+qFW()t@e><(MY^zgh=zFF+Ik zWQ0+nCZysv)>{$IRx)p`}#LzvuklIX5@w-tRZw{e8dh-R56GMinUNV9n0K2e6(7 z?apLD11dDRzvC2aFklA&5pDqBhqeMxSiBDb4G#;zr8=KY>@^hsVbV2hO&5`6FPV8u zOoPj}*tt*cRj$&<(Wj3h_dH9$HC$#a54nbjMLQ?^O7M!ukP_OB4#1XTip0hudx
  • u5Q6zcN9np!0>4XvpZ{=2^v6}&mu#wkI4 zb+Niu(1AzbMpxZbTgy3#peFTwoyfNHAD*g*PZSPF=-0?QoeWgt3f4Ac=Z?+vE~cfZ zcKGvUHtML@@D|z%3iQ>~4h-4td#5;r3own@r}AviXP={%@Zs3rhYd5=B*mMx(l{$F zB>rsaoM-&TtwZ|ZeR=cel=jw3>-0LJF;&)AOI>u-TioxCf((NRFh*3XpO<}kXhS(! zU#XzNm-`m4?Tz*@glm^L5aT#))g4nbu^}E3`bR|VhMRH%zSGVY{PZ--Ry{E9Wq{4| zU&lSQXt!>=M4veoY+Bg0o5!mEuzONsYKRZ0DPEHn*-Ku&&DHd=({?N~h5f+A@d;|i zR}J3hn#k(PR(z)s<#TF~%5^XAG+6HoMBkyg(!_Ap{$ta6s*|Js+)q=3q1j9CW3EXK;{I}Va3DYK zLFYL{Yeu)~dZ>^D-@z|AdHzug5xGey( z&^!0ib-V|bI$`qjeT8PQaj;k+z?L#_Y`Vk#rnX-R>g;>M>)^K!ZsEh@5VuJ_Rx5o= z!7e2mzCz6>hm|&H#xIQlIA|Yo?7jC!TH}?s{d{+8ntrpO*qtiBDfc_m zcTa|Tg_#TcMci}jRVlHnPhW1&CmjkO^WvqO%D2IM=}&4|y(SK|6A!D`+~+vo*A;;P zKx8!el&V8+6lV@n|F4WO z**)VnR*upVSf?s!$=AcmR(bUjyQGumQM0M1+B8;Y>1NUj^&wRi`bT5kP%6b4NsqtZ zPeV_MaT0=*&S~DyRQg=Fa>2;1?DevEuG^8fDh2v z4Hftl7KaHy5zG0xc(^tJvP0&3d7%vsXee$2=m-J$=KkmtrVt0T5vBwHQrr9G;Q|VZ zhglJ3iw`YZLlm-r287v)fWV=`F+n6m0E%>84^G5}VQ?f24ud9R33$)~e6&uN=Rzpx z@R^&QGKD6j7E;T`-9k%uzabw8Yz#|4o}iy{F@6x-{2av3vUPDmi%=8*`TvE1`(S)g z!8r0}a1aF6H-K+W$z6N)yrT`|P@fF|5dYT`pe+YFO*<>&B_^@a#lJDFgKu@U5E*ZM@%Ne`qhjNDiGfF#EnZoi z+l`h)a-j8|mY>uV&F^}6EuzzDIr(>rfhN*cD63?=&zfy&*AI!i^2q7+A+^+KQS{!d zGTzQ`(%sn?@!mHmi>qulyGP=A^z>+%>Z=rQ&FTzDilpFt8;N5u%Or>#4f&vskk zuSzydo{9>I=OcJBTarPp`U~4E{)qktfCn1?uZB=DEviS<2_{E3-mg z&eyVDY_}TTe_muw*igWYjKK55onLhyv8`N_ZN0x0mXn6q}PXbhToiI%5H03eKF4e+K(F&0AoasuLE znCHiS$Dm6{k;svxpzJ?dZj`!~hVbC5#SD1ZG)Fe%HBLL`tP7!KGhE${B5P&V9<3m-3XAO1UzmO&i0~mmLffw+|wQK z_|Q9FF@kk=t8zyru!q$szrZ(!K%eBM1!HD933w~X0JX8|TRBiD9xK$A+zh#8He3IGXvKC+3J5VZ$&DN6!? zfmvL{GsMEW+YKd3UFL(Iyxst~#%iEZ*rR271uRG|iSuF{0p9X(7NI7R&o2b6>Iy$= z6n-q16PXGHB>tWbaVynHULEU7vph#o>FQWN+qN|9W!mpzJQH z$z0_+h1XxS_Axgg^K=EANBTegkCi;PK<*YKB$KuHR{)9!fLtd z=JQrSf7D?)$B;Y5tF zA{iTi2}0rhFy$J~93VSHExL}2-X_Ji@1XP`7fl5g>vn!IS=q2ONtt$yonGT2ziB_{ zBEyE`q_4P0?PJ;O6k(PP>rtkaLd5(#N%|32=}q)bMg9xRLU#*nqY(l!^y{tyo7(uV zUfI;>Z3|h!e=N2Hc~h5l;aD`{Rk?H?EL6{+;HQo42arM zZ+jetH2i;i{Kg?Y$yI9e6?aNC%hO-Sen96xJdynWOSgBX`S0^%NzK-yOzY4E0Pd{< z$+*dGQeaznAPL#RLbEcB*O~6>CbwC|omAYyDbx13{*y5MhMTOAARq{&L-#M*X%^;B DWXe{< diff --git a/Content/images/atlas.png b/Content/images/atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..02346dad0dec5c35020bd5a7683a973b8e26e657 GIT binary patch literal 718 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%U;1OBOz`!j8!i<;h*8O2% zU~2GmaSW-5dwVCasL4RYA#jP#^1DUhH*_Pc7p*sKObAt3^t>kIlgr;-vd1iP%Fg~? zmpLnK_sehmXSdZ_+Z?MZj@iD^@A>_oe-2%*uc^)Z#hg(1_TTxfAMZ)kpJ}wZmHk-M ze$D-dTn`Ra9OXa1aJR|5osarW1N?u<9#FVcqE}a;SAU<8N6Gj3_YV7WjIS)>7@tgB zwy{foUa)zONpI=9AO45?pEp?b?PhrV5hxlR-BsTC0_X+?z^}Z>MAtD@AE74|C#mU z@hj#Pi}eloizO;E?PP(bB!4`7IPE1&XtC*79ldGgo(Zv62u@$WyO4Q_uv$~nkR{?4r79yhC7{@Rk+*8d{j z&+WE<<{+D1#<=V-Fd%Lp(K}GGqxeYuFR6selYbe!8mB!!JmDz+Yr~@O2mf1VAD4gl wp7;FRI{pQHIpPZZTTI05fzdXM!GT+U7`8k8Fu3PG^)kqtp00i_>zopr0Kx+A7XSbN literal 0 HcmV?d00001 diff --git a/Game1.cs b/Game1.cs index 9ad43a7..2715c9e 100644 --- a/Game1.cs +++ b/Game1.cs @@ -1,45 +1,49 @@ -// using System.Collections.Generic; +using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; -using static tunnet.World.World; + +using MonoGameLibrary; +using MonoGameLibrary.Graphics; + +// using tunnet.World; namespace tunnet; -public class Game1 : Game +public class Game1 : Core { - private GraphicsDeviceManager _graphics; - private SpriteBatch _spriteBatch; - // - private Map _world; + // private World.Map _world; + // private Texture2D _logo; - public Game1() + public Game1() : base("Tunnet but not", 1280, 720, fullScreen: false) { - _graphics = new GraphicsDeviceManager(this); - Content.RootDirectory = "Content"; - IsMouseVisible = true; + // Content.RootDirectory = "Content"; + // IsMouseVisible = true; } protected override void Initialize() { // TODO: Add your initialization logic here - _world = new Map(mapId: 0); - _world.LoadMap(); + // _world = new World.Map(mapId: 0); + // _world.LoadMap(); // base.Initialize(); } + private Sprite _404; + // private AnimatedSprite _animatedSprite; protected override void LoadContent() { - _spriteBatch = new SpriteBatch(GraphicsDevice); - // _world.setContent(Content); + TextureAtlas atlas = TextureAtlas.FromFile(Content, "images/atlas-definition.xml"); - // TODO: use this.Content to load your game content here - // _world._defaultTile = Texture2D.FromFile(GraphicsDevice, "src/Content/Tilemap.png"); - _world._defaultTile = Content.Load("Tilemap.png"); + _404 = atlas.CreateSprite("404"); + // _animatedSprite = atlas.CreateAnimatedSprite("404"); } + private const int _CAMERA_SPEED = 5; + Viewport _cameraPosition; + Point _mousePosition; protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) @@ -47,21 +51,89 @@ public class Game1 : Game // TODO: Add your update logic here + // Animations + // _animatedSprite.Update(gameTime); + + // Inputs + // https://docs.monogame.net/articles/tutorials/building_2d_games/10_handling_input/ + + if (_cameraPosition.Equals(new Viewport())) _cameraPosition = GraphicsDevice.Viewport; + + CheckKeyboardInput(); + CheckMouseInput(); + base.Update(gameTime); } + private void CheckKeyboardInput() + { + // Get the state of keyboard input + KeyboardState keyboardState = Keyboard.GetState(); + + // If the space key is held down, the movement speed increases by 1.5 + int speed = _CAMERA_SPEED; + if (keyboardState.IsKeyDown(Keys.Space)) + { + speed = (int)Math.Floor(speed * 1.5); + } + if (keyboardState.IsKeyDown(Keys.W) || keyboardState.IsKeyDown(Keys.Up)) + { + _cameraPosition.Y += speed; + } + if (keyboardState.IsKeyDown(Keys.S) || keyboardState.IsKeyDown(Keys.Down)) + { + _cameraPosition.Y -= speed; + } + if (keyboardState.IsKeyDown(Keys.A) || keyboardState.IsKeyDown(Keys.Left)) + { + _cameraPosition.X += speed; + } + if (keyboardState.IsKeyDown(Keys.D) || keyboardState.IsKeyDown(Keys.Right)) + { + _cameraPosition.X -= speed; + } + // + GraphicsDevice.Viewport = _cameraPosition; + } + private void CheckMouseInput() + { + // Get the state of mouse input + MouseState mouseState = Mouse.GetState(); + + //Move camera with right mouse button + if (mouseState.RightButton == ButtonState.Pressed) + { + _mousePosition -= mouseState.Position; // delta + + _cameraPosition!.X = _cameraPosition.X - _mousePosition.X; + _cameraPosition.Y = _cameraPosition.Y - _mousePosition.Y; + } + // + GraphicsDevice.Viewport = _cameraPosition; + _mousePosition = mouseState.Position; // here because of wasd breaking it + } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); - // TODO: Add your drawing code here - _spriteBatch.Begin(); + SpriteBatch.Begin(sortMode: SpriteSortMode.Deferred); - _world.Draw(ref _spriteBatch); + // World.Map.Draw draw = new World.Map.Draw(in _spriteBatch); //TODO: fix + // _spriteBatch.Draw(_world._defaultTile, _world._defaultTile.Bounds.Center.ToVector2(), Color.White); //TODO: fix - _spriteBatch.Draw(_world._defaultTile, Vector2.Zero, Color.White); + /// TODO: Draw + /// 1. floor + /// 2. wires + /// 3. buildings + /// 4. entities + /// 5. walls + /// + /// MINIMIZE texture swaps + /// MAXIMIZE drawRectangle usage per texture - _spriteBatch.End(); + _404.Draw(SpriteBatch, Vector2.Zero); + + SpriteBatch.End(); // base.Draw(gameTime); } diff --git a/World/World.cs b/World/World.cs index 0182580..693b544 100644 --- a/World/World.cs +++ b/World/World.cs @@ -1,11 +1,13 @@ // using System; using System.Collections.Generic; using System.IO; +using System.Threading; using Microsoft.Xna.Framework; // using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; namespace tunnet.World; + struct World { private class Tile // TODO: sprite, buildings[] @@ -21,8 +23,8 @@ struct World } private class Chunk { - public const int Width = 16; - public const int Height = 16; + public const int Width = 32; + public const int Height = 32; internal Tile[,] Tiles { get; private set; } public Chunk() @@ -89,21 +91,19 @@ struct World return null; } } - public class Map : Game + public class Map { private readonly Dictionary _loadedChunks = new Dictionary(); private IReadOnlyDictionary Chunks => _loadedChunks; + private Mutex _loadWait = new(); private readonly int id; - private readonly int TileSize; - public Texture2D _defaultTile; + // private readonly int TileSize; + // public Texture2D _defaultTile; public Map(int mapId) { id = mapId; - TileSize = 32; - // Console.WriteLine(Content.Load("Tilemap.png").Width); - // _defaultTile = Texture2D.FromFile(GraphicsDevice, "Tilemap.png"); - // _defaultTile = Content.Load("Tilemap.png"); + // TileSize = 32; } // Load the map by ID @@ -161,9 +161,30 @@ struct World keysToRemove.ForEach(k => _loadedChunks.Remove(k)); } - public void Draw(ref SpriteBatch spriteBatch) + /*public class Draw(in SpriteBatch spriteBatch) { - foreach (var kvp in _loadedChunks) + private SpriteBatch spriteBatch = spriteBatch; + }*/ + + // private ref struct Draw + // { + // private ref SpriteBatch _spriteBatch; + // public Draw(ref SpriteBatch spriteBatch) + // { + // _spriteBatch = ref spriteBatch; + // } + // } + + // private readonly IReadOnlyDictionary _chunks; + + /*public void Draw() + { + if (_chunks.Count == 0) + { + Console.WriteLine("No chunks loaded"); + return; + } + foreach (var kvp in _chunks) { Point chunkCoord = kvp.Key; // var chunk = kvp.Value; @@ -179,10 +200,11 @@ struct World ); // draw the default tile for now - spriteBatch.Draw(_defaultTile, pos, Color.White); + Console.WriteLine("Sprite location: ", pos); + _spriteBatch.Draw(_defaultTile, pos, Color.White); } } } - } + }*/ } -} \ No newline at end of file +} diff --git a/tunnet.code-workspace b/tunnet.code-workspace new file mode 100644 index 0000000..de141ec --- /dev/null +++ b/tunnet.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "../lib-bird" + } + ], + "settings": {} +} \ No newline at end of file diff --git a/tunnet.csproj b/tunnet.csproj index 06680d2..3a77701 100644 --- a/tunnet.csproj +++ b/tunnet.csproj @@ -5,6 +5,7 @@ Major false false + app.manifest @@ -26,6 +27,9 @@ + + +