diff --git a/GreatSpringGameJam/Content/Maps/Level1.tmx b/GreatSpringGameJam/Content/Maps/Level1.tmx index 7a9eec7..8b4e6dd 100644 --- a/GreatSpringGameJam/Content/Maps/Level1.tmx +++ b/GreatSpringGameJam/Content/Maps/Level1.tmx @@ -27,12 +27,12 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,1,2,2,3,0,0,0,0,0,0,0,0,1,2,2,2,2,3,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,33,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,116,117,118,119,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,5,18,18,19,0,0,0,0,0,0,0,0,17,18,18,18,18,4,2,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,49,0,0,0,0,0, -0,0,68,69,70,0,0,84,85,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,17,18,18,18,18,18,18,18,4,2,2,2,2,3,0,0,1,5,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,81,81,0,55,54,0, -0,0,71,72,73,0,0,100,101,102,103,104,0,0,0,0,0,0,39,0,0,0,0,0,0,0,0,1,2,2,2,3,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,17,18,4,2,2,2,5,18,18,18,19,39,39,0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,3,0,0,0,0,0,0,0,17,18,18,18,19,0,0,0,17,4,2,2,2,2,5,18,18,18,18,18,18,19,0,0,9,21,18,18,18,18,18,18,18,18,4,2,2,3,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18, -0,0,0,0,0,0,0,0,0,0,0,0,17,18,18,18,18,18,18,19,0,0,0,0,38,39,0,17,4,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,4,2,2,5,19,0,0,0,9,10,21,18,18,18,18,18,18,18,18,18,19,0,0,0,17,4,2,2,2,2,2,5,18,18,18,18,18,18,18, -2,2,2,2,2,2,2,2,2,2,2,2,5,18,4,2,2,2,5,19,0,0,0,1,2,2,2,5,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,0,0,17,18,4,2,2,2,2,2,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,4,2,2,2,5,18, -18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,17,18,18,4,2,2,2,2,2,2,5,18,18,19,0,37,0,82,0,17,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +0,0,68,69,70,0,0,84,85,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,17,18,18,18,18,18,18,18,4,2,2,2,2,3,0,0,0,17,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,81,81,0,55,54,0, +0,0,71,72,73,0,0,100,101,102,103,104,0,0,0,0,0,0,39,0,0,0,0,0,0,0,0,1,2,2,2,3,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,1,5,4,2,2,2,5,18,18,18,19,39,39,0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,3,0,0,0,0,0,0,0,17,18,18,18,19,0,0,0,17,4,2,2,2,2,5,18,18,18,18,18,18,19,0,0,9,10,10,21,18,18,18,18,18,18,4,2,2,3,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +0,0,0,0,0,0,0,0,0,0,0,0,17,18,18,18,18,18,18,19,0,0,0,0,38,39,0,17,4,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,4,2,2,5,19,0,0,0,0,0,17,18,18,18,18,18,18,18,18,18,19,0,0,0,17,4,2,2,2,2,2,5,18,18,18,18,18,18,18, +2,2,2,2,2,2,2,2,2,2,2,2,5,18,4,2,2,2,5,19,0,0,0,1,2,2,2,5,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,82,0,17,18,4,2,2,2,2,2,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,4,2,2,2,5,18, +18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,17,18,18,4,2,2,2,2,2,2,5,18,18,19,0,37,0,0,0,17,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18, 18,18,18,18,18,18,4,2,2,2,2,2,5,18,18,18,18,18,18,19,0,0,0,17,4,2,2,2,2,5,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,1,2,2,2,5,18,18,18,18,18,4,2,2,5,19,0,0,0,17,18,18,18,4,2,2,2,2,2,5,18,18,18,18, 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,9,21,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18, 18,4,2,2,2,5,18,18,18,18,4,2,2,2,2,2,2,5,18,19,0,0,0,17,18,4,2,2,2,2,5,19,0,0,0,17,4,2,2,2,2,5,18,18,18,18,18,18,19,0,0,17,4,2,2,2,2,2,5,18,18,18,18,18,19,0,0,0,17,4,2,2,2,2,2,5,18,18,18,18,18,18,18, diff --git a/GreatSpringGameJam/Content/Maps/Level2.tmx b/GreatSpringGameJam/Content/Maps/Level2.tmx index e028259..c925ad8 100644 --- a/GreatSpringGameJam/Content/Maps/Level2.tmx +++ b/GreatSpringGameJam/Content/Maps/Level2.tmx @@ -32,10 +32,10 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,0,0,0,0,0,0,0,0,0,1,2,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,18,18,4,2,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,3,0,0,0,0,0,0,0,0,0,17,18,18,18,19,39,0,0,0,0,0,0,0,38,0,0,0,0,17,18,18,18,18,18,18,18,19,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,65,81,0,54,55,0,0,54,0,0, 0,0,0,0,0,39,0,0,0,0,0,0,0,0,0,0,0,17,4,2,5,4,2,3,0,0,0,0,39,0,0,17,4,2,5,4,3,0,0,0,0,1,2,2,2,2,2,2,2,5,4,2,2,2,5,18,18,19,0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,3,0,0,0,0,0,0,0,17,18,18,18,18,18,19,0,0,0,1,2,2,2,5,18,18,18,18,19,0,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,4,2,2,2,5,18, -18,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,17,18,4,2,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,19,0,0,0,0,9,10,10,21,4,2,2,2,5,18,18,18,18,18,18,18,4,3,0,0,38,17,18,4,2,2,2,2,2,2,5,18,4,2,2,5,18,18,18,18,18,18, -18,18,4,2,2,2,2,5,18,4,3,0,0,0,0,37,39,17,18,18,18,18,18,19,0,0,0,17,18,4,2,2,2,2,2,5,19,0,0,0,0,0,0,0,17,18,18,18,18,18,18,4,2,2,2,2,2,5,19,0,0,1,5,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, -18,18,18,18,18,4,2,2,5,18,19,0,0,0,1,2,2,5,4,2,2,5,18,19,0,0,0,17,4,2,2,2,5,18,18,18,4,2,2,3,0,0,82,0,17,4,2,2,2,2,5,18,18,18,18,18,18,18,19,0,0,17,18,4,2,2,2,5,18,18,18,4,2,2,2,2,2,2,2,5,18,18,18, +2,2,2,2,2,2,2,2,2,3,0,0,0,0,0,0,0,17,18,18,18,18,18,19,0,0,0,1,2,2,2,5,18,18,18,18,19,0,0,0,0,9,10,10,21,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,4,2,2,2,5,18, +18,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,17,18,4,2,2,5,19,0,0,0,17,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,17,4,2,2,2,5,18,18,18,18,18,18,18,4,3,0,0,38,17,18,4,2,2,2,2,2,2,5,18,4,2,2,5,18,18,18,18,18,18, +18,18,4,2,2,2,2,5,18,4,3,0,0,0,0,37,39,17,18,18,18,18,18,19,0,0,0,17,18,4,2,2,2,2,2,5,19,0,0,0,0,0,82,0,17,18,18,18,18,18,18,4,2,2,2,2,2,5,19,0,0,1,5,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +18,18,18,18,18,4,2,2,5,18,19,0,0,0,1,2,2,5,4,2,2,5,18,19,0,0,0,17,4,2,2,2,5,18,18,18,4,2,2,3,0,0,0,0,17,4,2,2,2,2,5,18,18,18,18,18,18,18,19,0,0,17,18,4,2,2,2,5,18,18,18,4,2,2,2,2,2,2,2,5,18,18,18, 18,18,18,18,18,18,18,18,18,18,4,3,0,0,17,18,18,18,18,18,18,18,18,19,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,19,0,1,2,2,5,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18 diff --git a/GreatSpringGameJam/Content/Maps/Level3.tmx b/GreatSpringGameJam/Content/Maps/Level3.tmx index ee5372f..30e59ce 100644 --- a/GreatSpringGameJam/Content/Maps/Level3.tmx +++ b/GreatSpringGameJam/Content/Maps/Level3.tmx @@ -48,8 +48,8 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,4,2,2,2,5,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,17,18,18,4,2,2,2,2,2,2,5,18,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,3,0,0,0,0,0,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,0,17,18,18,4,3,0,0,0,0,0,0,0,17,18,18,18,18,18,18,4,2,2,2,5,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,5,18,18,18,19,0,0,0,0,82,0,0,17,18,18,18,18,18,18,18,18,18,18,18,20,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,0,17,18,18,4,3,0,0,0,82,0,0,0,17,18,18,18,18,18,18,4,2,2,2,5,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,5,18,18,18,19,0,0,0,0,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,20,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,18,18,18,18,18,18,18,4,2,2,2,2,2,2,2,5,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,4,2,2,2,2,2,2,5,18,18,18,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, diff --git a/GreatSpringGameJam/GameImpl.cs b/GreatSpringGameJam/GameImpl.cs index f4203df..cdb1346 100644 --- a/GreatSpringGameJam/GameImpl.cs +++ b/GreatSpringGameJam/GameImpl.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using Coroutine; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; @@ -50,7 +51,7 @@ namespace GreatSpringGameJam { AutoScaleWithScreen = true, Scale = 4 }; - this.StartLevel(3); + this.StartLevel(1); } protected override void DoUpdate(GameTime gameTime) { @@ -79,7 +80,7 @@ namespace GreatSpringGameJam { // display end of level info var snowRemoved = this.Map.TotalSnow - this.Map.GetTotalTiles("Snow"); var plantsGrown = this.Map.TotalSeeds - this.Map.GetTotalTiles("Seed"); - var gnomesCollected = this.Map.TotalGnomes - this.Map.GetTotalTiles("Gnome"); + var gnomesCollected = this.Map.TotalGnomes - this.Map.GetEntities().Count(); // snow removal is less important, gnomes are more important var completion = (snowRemoved / 3F + plantsGrown + gnomesCollected * 10F) / (this.Map.TotalSnow / 3F + this.Map.TotalSeeds + this.Map.TotalGnomes * 10F); diff --git a/GreatSpringGameJam/Gnome.cs b/GreatSpringGameJam/Gnome.cs new file mode 100644 index 0000000..8650675 --- /dev/null +++ b/GreatSpringGameJam/Gnome.cs @@ -0,0 +1,27 @@ +using System; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using MLEM.Misc; +using MLEM.Textures; + +namespace GreatSpringGameJam { + public class Gnome : Entity { + + public Gnome(Map map, Vector2 position) : base(map, position) { + } + + public override void Update(GameTime time) { + if (GameImpl.Instance.Player.Bounds.Contains(this.Position + Vector2.One / 2)) + this.Map.RemoveEntity(this); + } + + public override void Draw(GameTime time, SpriteBatch batch) { + base.Draw(time, batch); + var tex = StuffTexture[1, 1]; + var offset = new Vector2(0, MathF.Sin((float) time.TotalGameTime.TotalSeconds * 2) * 0.15F); + var rotation = MathF.Sin((float) time.TotalGameTime.TotalSeconds * 1.5F) * 0.25F; + batch.Draw(tex, this.Position * this.Map.TileSize + tex.Size.ToVector2() / 2 + offset * this.Map.TileSize, Color.White, rotation, tex.Size.ToVector2() / 2, 1, SpriteEffects.None, 1); + } + + } +} \ No newline at end of file diff --git a/GreatSpringGameJam/Map.cs b/GreatSpringGameJam/Map.cs index b40825c..b6ca87c 100644 --- a/GreatSpringGameJam/Map.cs +++ b/GreatSpringGameJam/Map.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using MLEM.Cameras; @@ -34,7 +35,12 @@ namespace GreatSpringGameJam { this.Collisions = new TiledMapCollisions(this.map); this.TotalSnow = this.GetTotalTiles("Snow"); this.TotalSeeds = this.GetTotalTiles("Seed"); - this.TotalGnomes = this.GetTotalTiles("Gnome"); + + foreach (var (pos, _) in this.EnumerateTiles("Gnome")) { + this.entities.Add(new Gnome(this, new Vector2(pos.X, pos.Y))); + this.SetTile(pos.Layer, pos.X, pos.Y, 0); + } + this.TotalGnomes = this.entities.OfType().Count(); } public void AddEntity(Entity entity) { @@ -45,6 +51,10 @@ namespace GreatSpringGameJam { this.entities.Remove(entity); } + public IEnumerable GetEntities() where T : Entity { + return this.entities.OfType(); + } + public void Update(GameTime time) { this.renderer.UpdateAnimations(time); for (var i = this.entities.Count - 1; i >= 0; i--) @@ -96,19 +106,22 @@ namespace GreatSpringGameJam { } public int GetTotalTiles(string type) { - var total = 0; + return this.EnumerateTiles(type).Count(); + } + + public IEnumerable<(LayerPosition, TiledMapTilesetTile)> EnumerateTiles(string type) { for (var x = 0; x < this.map.Width; x++) { for (var y = 0; y < this.map.Height; y++) { - foreach (var tile in this.map.GetTiles(x, y)) { + foreach (var layer in this.map.TileLayers) { + var tile = layer.GetTile(x, y); if (tile.IsBlank) continue; var tilesetTile = this.GetTilesetTile(tile, this.GetTileset(tile)); if (tilesetTile.Properties.GetBool(type)) - total++; + yield return (new LayerPosition(layer.Name, x, y), tilesetTile); } } } - return total; } private void DrawLayer(SpriteBatch batch, string layer, Camera camera) { diff --git a/GreatSpringGameJam/Player.cs b/GreatSpringGameJam/Player.cs index c2ade91..ceccaae 100644 --- a/GreatSpringGameJam/Player.cs +++ b/GreatSpringGameJam/Player.cs @@ -47,13 +47,11 @@ namespace GreatSpringGameJam { jumpHeight = 0.25F; var (_, foregroundInside) = this.GetTileBelow(Vector2.Zero, "Foreground"); - var ((insideX, insideY), tileInside) = this.GetTileBelow(Vector2.Zero); + var (_, tileInside) = this.GetTileBelow(Vector2.Zero); if (foregroundInside != null && foregroundInside.Properties.GetBool("Goal")) { GameImpl.Instance.Finish(); return; } - if (tileInside != null && tileInside.Properties.GetBool("Gnome")) - this.Map.SetTile("Ground", insideX, insideY, 0); // input var move = Vector2.Zero;