using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using Microsoft.Xna.Framework.Graphics; using VBXSE; namespace LD31 { public static partial class Main { //=====CONSTANTS==== private const int DRAW_HUNGER_X = 1164; private const int DRAW_HUNGER_Y = 467; private const int DRAW_ICON_HOLDING_X = 1168; private const int DRAW_ICON_HOLDING_Y = 97; private const int DRAW_ICON_UNDER_X = 1168; private const int DRAW_ICON_UNDER_Y = 287; private const int DRAW_SIDEBAR_X = 1088; private const int DRAW_SIDEBAR_Y = 0; private const int DRAW_TILE_SIZE_X = 32; private const int DRAW_TILE_SIZE_Y = 32; private const int DRAW_TEXT_FINALTURNS_X = 640; private const int DRAW_TEXT_FINALTURNS_Y = 400; private const int DRAW_TEXT_HOLDING_X = 1184; private const int DRAW_TEXT_HOLDING_Y = 139; private const int DRAW_TEXT_SEASON_X = 1184; private const int DRAW_TEXT_SEASON_Y = 400; private const int DRAW_TEXT_TURN_X = 1184; private const int DRAW_TEXT_TURN_Y = 16; private const int DRAW_TEXT_UNDER_X = 1184; private const int DRAW_TEXT_UNDER_Y = 329; private const int DRAW_WORLD_OFFSET_X = 0; private const int DRAW_WORLD_OFFSET_Y = 8; //=====VARIABLES==== private static GText gText_finalturns = null; private static GText gText_holding = null; private static GText gText_seasonAndYear = null; private static GText gText_turn = null; private static GText gText_under = null; private static Sprite icon_directions = null; private static Sprite icon_holding = null; private static Sprite icon_under = null; private static Sprite overlay_gameover = null; private static Sprite overlay_pickup = null; private static Sprite overlay_quit = null; private static Sprite overlay_use = null; private static Sprite ui_hunger = null; //=====PUBLIC METHODS==== public static Sprite CreateSprite(string spriteName) { Sprite toReturn = SpriteEngine.CreateSprite(spriteName); return toReturn; } public static Sprite CreateAnimatedSprite(string[] spriteNames, string deadSprite = null) { string[] allSpriteNames = new string[spriteNames.Length]; if (deadSprite != null) allSpriteNames = new string[spriteNames.Length + 1]; int currentSprite = 0; for (currentSprite = 0; currentSprite < spriteNames.Length; currentSprite++) { allSpriteNames[currentSprite] = spriteNames[currentSprite]; } if (deadSprite != null) { allSpriteNames[currentSprite] = deadSprite; } Sprite toReturn = SpriteEngine.CreateMultiSprite(allSpriteNames, -32, -32, 1f); toReturn.AddAnimation("idle", new Animation("idle", spriteNames[0], spriteNames.Length, 500)); toReturn.ChangeAnimation("idle"); if (deadSprite != null) { toReturn.AddAnimation("dead", new Animation("dead", deadSprite, 1, 1000)); } toReturn.depth = -10; return toReturn; } public static void SetSpritePosition(Sprite sprite, int x, int y) { int targetX = x * DRAW_TILE_SIZE_X + DRAW_WORLD_OFFSET_X; int targetY = y * DRAW_TILE_SIZE_Y + DRAW_WORLD_OFFSET_Y; sprite.SetPosition(targetX, targetY); } //=====PRIVATE METHODS==== private static void InitializeGraphics() { //Load graphics DirectoryInfo di = new DirectoryInfo("Data/graphics/"); FileInfo[] files = di.GetFiles("*.png", SearchOption.AllDirectories); for (int i = 0; i < files.Length; i++) { string fullName = files[i].FullName; fullName = fullName.Replace("\\", "/"); //Cut off directory name string practicalName = fullName.Substring(fullName.LastIndexOf("/") + 1); //Cut off extension practicalName = practicalName.Substring(0, practicalName.Length - 4); //'.png' LoadTextureFromFile(fullName, practicalName); } //Create sidebar Sprite sidebar = SpriteEngine.CreateSprite("sidebar", DRAW_SIDEBAR_X, DRAW_SIDEBAR_Y, 1f); sidebar.depth = -200; overlay_pickup = SpriteEngine.CreateSprite("canpickup", DRAW_SIDEBAR_X, DRAW_SIDEBAR_Y, 1f); overlay_pickup.depth = -201; overlay_pickup.enabled = false; overlay_use = SpriteEngine.CreateSprite("canuse", DRAW_SIDEBAR_X, DRAW_SIDEBAR_Y, 1f); overlay_use.depth = -201; overlay_use.enabled = false; ui_hunger = SpriteEngine.CreateSprite("hungerbar", DRAW_HUNGER_X, DRAW_HUNGER_Y, 1f); ui_hunger.depth = -201; Sprite sidebar_overlay = SpriteEngine.CreateSprite("sidebar_overlay", DRAW_SIDEBAR_X, DRAW_SIDEBAR_Y, 1f); sidebar_overlay.depth = -240; //Full screen overlays overlay_quit = SpriteEngine.CreateSprite("quitscreen", 0, 0, 1f); overlay_quit.depth = -500; overlay_quit.enabled = false; overlay_gameover = SpriteEngine.CreateSprite("gameover", 0, 0, 1f); overlay_gameover.depth = -500; overlay_gameover.enabled = false; //Create GTexts gText_finalturns = SpriteEngine.CreateGText("Final turns: 1", 0, 0); gText_holding = SpriteEngine.CreateGText("(nothing)", 0, 0); gText_seasonAndYear = SpriteEngine.CreateGText("Summer, Year 1", 0, 0); gText_turn = SpriteEngine.CreateGText("Turn: 1", 0, 0); gText_under = SpriteEngine.CreateGText("(nothing)", 0, 0); gText_finalturns.depth = -510; gText_holding.depth = -250; gText_seasonAndYear.depth = -250; gText_turn.depth = -250; gText_under.depth = -250; gText_finalturns.enabled = false; FixGTextPositions(); } private static void UpdateUI() { UpdateIcons(); UpdateTurn(); FixGTextPositions(); UpdateHighlights(); UpdateHunger(); } private static void FixGTextPositions() { gText_finalturns.SetY(DRAW_TEXT_FINALTURNS_Y); gText_finalturns.SetX(DRAW_TEXT_FINALTURNS_X - SpriteEngine.spriteFont.MeasureString(gText_finalturns.text).X / 2f); gText_holding.SetY(DRAW_TEXT_HOLDING_Y); gText_holding.SetX(DRAW_TEXT_HOLDING_X - SpriteEngine.spriteFont.MeasureString(gText_holding.text).X / 2f); gText_seasonAndYear.SetY(DRAW_TEXT_SEASON_Y); gText_seasonAndYear.SetX(DRAW_TEXT_SEASON_X - SpriteEngine.spriteFont.MeasureString(gText_seasonAndYear.text).X / 2f); gText_turn.SetY(DRAW_TEXT_TURN_Y); gText_turn.SetX(DRAW_TEXT_TURN_X - SpriteEngine.spriteFont.MeasureString(gText_turn.text).X / 2f); gText_under.SetY(DRAW_TEXT_UNDER_Y); gText_under.SetX(DRAW_TEXT_UNDER_X - SpriteEngine.spriteFont.MeasureString(gText_under.text).X / 2f); } //Updates the 'holding' and 'under you' icons and strings private static void UpdateIcons() { //Erase if (icon_holding != null) SpriteEngine.EraseGObject(icon_holding); if (icon_under != null) SpriteEngine.EraseGObject(icon_under); //Held item icon if (heldItem != null) { icon_holding = CreateSprite(heldItem.spriteName); icon_holding.SetPosition(DRAW_ICON_HOLDING_X, DRAW_ICON_HOLDING_Y); gText_holding.text = heldItem.name; } else { icon_holding = SpriteEngine.CreateSprite("void", DRAW_ICON_HOLDING_X, DRAW_ICON_HOLDING_Y, 1f); gText_holding.text = "(nothing)"; } icon_holding.depth = -210; //Under you icon string underSpriteName = "void"; Object underObject = objects[player.x, player.y]; if (underObject != null) { underSpriteName = underObject.sprite.name; gText_under.text = underObject.name; } else { Tile underTile = tiles[player.x, player.y]; underSpriteName = underTile.sprite.name; gText_under.text = underTile.name; } icon_under = SpriteEngine.CreateSprite(underSpriteName, DRAW_ICON_UNDER_X, DRAW_ICON_UNDER_Y, 1f); icon_under.depth = -210; } private static void UpdateTurn() { gText_turn.text = "Turn: " + turn; gText_seasonAndYear.text = Convert.ToString(currentSeason) + ", Year " + year; gText_finalturns.text = "You lasted " + turn + " turns."; } private static void UpdateHighlights() { overlay_pickup.enabled = PickUpItem(true); //Fake a pickup, if it's possible highlight it overlay_use.enabled = Use(true); //Fake a use, if it's possible highlight it } private static void UpdateHunger() { ui_hunger.SetX(DRAW_HUNGER_X - (100 - hunger)); } private static void ToggleDirections(bool toSet) { if (icon_directions != null) SpriteEngine.EraseGObject(icon_directions); icon_directions = null; if (toSet == true) { icon_directions = SpriteEngine.CreateSprite("directions", player.sprite.position); icon_directions.depth = -11; } } private static void ToggleQuitScreen(bool toSet) { overlay_quit.enabled = toSet; } private static void ToggleGameOver(bool toSet) { overlay_gameover.enabled = toSet; gText_finalturns.enabled = toSet; if (toSet) { player.sprite.ChangeAnimation("dead"); } else { player.sprite.ChangeAnimation("idle"); } } private static void LoadTextureFromFile(string location, string name) { FileStream fs = new FileStream(location, FileMode.Open); SpriteEngine.textures.Add(name, Texture2D.FromStream(SpriteEngine.graphics.GraphicsDevice, fs)); fs.Close(); } } }