public void Draw() { if (Sheet == null) { Sheet = BuildDefaultSheet(); } }
public SpritesSheetContent(SpritesSheet sheet) { SpritesList = new List <SpriteDefinition>(); foreach (SpriteDefinition sprite in sheet) { this.SpritesList.Add(sprite); } this.TexturePath = sheet.TexturePath; }
public Menu(SpritesSheet ss, List <MenuElement> ml, Vector2 p) { text = new Text(ss); this.spritesSheet = ss; this.menuList = ml; this.position = p; this.width = 0; this.height = 0; this.menuStateGrey = Color.ForestGreen; this.menuStateHilight = Color.White; this.menuStateNormal = Color.OliveDrab; }
private SpritesSheet BuildDefaultSheet() { SpritesSheet sheet = new SpritesSheet(); Content = new ContentManager(this.Services); sheet.Texture = Content.Load <Texture2D>("WindowSpritesSheet"); sheet.Add(new SpriteDefinition("windows_top_left", new Rectangle(0, 0, 29, 22))); sheet.Add(new SpriteDefinition("windows_top", new Rectangle(30, 0, 28, 22))); sheet.Add(new SpriteDefinition("windows_top_right", new Rectangle(59, 0, 29, 22))); sheet.Add(new SpriteDefinition("windows_left", new Rectangle(0, 23, 29, 19))); sheet.Add(new SpriteDefinition("windows_center", new Rectangle(30, 23, 28, 19))); sheet.Add(new SpriteDefinition("windows_right", new Rectangle(59, 23, 29, 19))); sheet.Add(new SpriteDefinition("windows_bottom_left", new Rectangle(0, 43, 29, 6))); sheet.Add(new SpriteDefinition("windows_bottom", new Rectangle(30, 43, 28, 6))); sheet.Add(new SpriteDefinition("windows_bottom_right", new Rectangle(59, 43, 29, 6))); return(sheet); }
public void Draw(SpriteBatch sb, SpritesSheet ss) { // Dans l'idée je récupère le viewport et j'affiche ce qui est dans le viewport int tileIndex = 1; int tileX = Settings.SCREEN_WIDTH / Settings.PIXEL_RATIO; int tileY = -16;// Settings.SCREEN_HEIGHT / Settings.PIXEL_RATIO; for (int i = 0; i < 500; i++) { Vector2 coords = new Vector2(tileX, tileY); //Console.WriteLine("X: " + tileX.ToString() + " Y: " + tileY.ToString()); sb.Draw(ss.spriteElements[tileIndex].sprite, coords, Color.White); tileX = tileX - 24;// * Settings.PIXEL_RATIO); if (tileX < -24) { tileX = Settings.SCREEN_WIDTH / Settings.PIXEL_RATIO; tileY = tileY + 16;// * Settings.PIXEL_RATIO); } } }
public void Draw(SpriteBatch sb, SpritesSheet ss, SpriteFont font) { int currentRow = 1; // Ok, c'est pas mal mais en fait il faut que je déplace le view port dans le tableau, pas pour l'écran int tileX = Settings.SCREEN_WIDTH / Settings.PIXEL_RATIO;// + this.TileWidth; //int tileY = -this.TileHeight/2;// Settings.SCREEN_HEIGHT / Settings.PIXEL_RATIO; int tileY = 0; //ok, v2 int Xreste; int Xquotient = Math.DivRem(this.viewport.X, this.TileWidth, out Xreste); int Yreste; int Yquotient = Math.DivRem(this.viewport.Y, this.TileHeight, out Yreste); int offset = 8 * Yquotient; // En gros dans quotient, j'ai le nombre exacte de tile à partir de la gauche, donc j'affiche à partir de cette Tile // dans reste, j'ai les pixel restant donc j'affiche à partir de la. // Et pareil pour Y int row; int onsenfout; row = Math.DivRem((Settings.SCREEN_WIDTH / Settings.PIXEL_RATIO), this.TileWidth, out onsenfout); //int startTile = this.Width * Yquotient + Xquotient-1; int startTile = this.TilePicker(this.viewport.X, this.viewport.Y).TileIndex; /* * Console.WriteLine("startTile= " + (startTile+1)); * Console.WriteLine("viewport.X= " + viewport.X + " viewport.Y=" + viewport.Y); */ row++; //row++; //Console.WriteLine("row= " + row); int currentTile = row; int index; int elem = startTile + currentTile; /* * Console.WriteLine("currentTile= " + currentTile + " row=" + row); * Console.WriteLine("Xquotient= " + Xquotient + " Yquotient=" + Yquotient); * Console.WriteLine("Xreste= " + Xreste + " Yreste=" + Yreste); */ //while (tileX > -this.TileWidth && tileY < Settings.SCREEN_HEIGHT / Settings.PIXEL_RATIO) while (tileX > 0 && tileY < Settings.SCREEN_HEIGHT / Settings.PIXEL_RATIO) { //Vector2 coords = new Vector2(tileX - Xreste, tileY - Yreste); index = startTile + currentTile; if (index > -1 && index < this.tiles.Length) { int spriteIndex = this.tiles[index].SpriteIndex; elem = startTile + currentTile; int offsetY = this.TileHeight - ss.spriteElements[spriteIndex].sprite.Height; int offsetX = this.TileWidth - ss.spriteElements[spriteIndex].sprite.Width; Vector2 coords = new Vector2(tileX - Xreste + offsetX + offset, tileY - Yreste / 2 + offsetY); if (!debugOnScreen) { if (TilePicker(216, 76).TileIndex == index) { TilePicker(216, 76); sb.Draw(ss.spriteElements[spriteIndex].sprite, coords, Color.Red); Vector2 xy = new Vector2(tileX + 2 - Xreste + offsetX + offset, tileY + 2 - Yreste / 2 + offsetY); sb.DrawString(font, index.ToString(), xy, Color.Black, 0f, Vector2.One, 0.3f, SpriteEffects.None, 0f); sb.DrawString(font, index.ToString(), xy, Color.Gray, 0f, Vector2.One, 0.27f, SpriteEffects.None, 0f); } else { sb.Draw(ss.spriteElements[spriteIndex].sprite, coords, Color.White); } } else { if (index % 2 > 0) { sb.Draw(ss.spriteElements[spriteIndex].sprite, coords, Color.Gray); Vector2 xy = new Vector2(tileX + 2 - Xreste + offsetX + offset, tileY + 2 - Yreste / 2 + offsetY); sb.DrawString(font, index.ToString(), xy, Color.Black, 0f, Vector2.One, 0.3f, SpriteEffects.None, 0f); sb.DrawString(font, index.ToString(), xy, Color.Gray, 0f, Vector2.One, 0.27f, SpriteEffects.None, 0f); xy = new Vector2(tileX + 2 - Xreste + offsetX + offset, tileY + 5 - Yreste / 2 + offsetY); sb.DrawString(font, offset.ToString(), xy, Color.Black, 0f, Vector2.One, 0.3f, SpriteEffects.None, 0f); sb.DrawString(font, offset.ToString(), xy, Color.Gray, 0f, Vector2.One, 0.27f, SpriteEffects.None, 0f); } else { sb.Draw(ss.spriteElements[spriteIndex].sprite, coords, Color.White); Vector2 xy = new Vector2(tileX + 2 - Xreste + offsetX + offset, tileY + 2 - Yreste / 2 + offsetY); sb.DrawString(font, index.ToString(), xy, Color.Black, 0f, Vector2.One, 0.3f, SpriteEffects.None, 0f); sb.DrawString(font, index.ToString(), xy, Color.White, 0f, Vector2.One, 0.27f, SpriteEffects.None, 0f); xy = new Vector2(tileX + 2 - Xreste + offsetX + offset, tileY + 5 - Yreste / 2 + offsetY); sb.DrawString(font, offset.ToString(), xy, Color.Black, 0f, Vector2.One, 0.3f, SpriteEffects.None, 0f); sb.DrawString(font, offset.ToString(), xy, Color.White, 0f, Vector2.One, 0.27f, SpriteEffects.None, 0f); } Vector2 zixy = new Vector2(tileX + 2 - Xreste + offsetX + offset, tileY + 8 - Yreste / 2); sb.DrawString(font, Yreste.ToString(), zixy, Color.Black, 0f, Vector2.One, 0.3f, SpriteEffects.None, 0f); sb.DrawString(font, Yreste.ToString(), zixy, Color.White, 0f, Vector2.One, 0.27f, SpriteEffects.None, 0f); } } /*xy = new Vector2(tileX + 10 - Xreste, tileY + 10 - Yreste); * sb.DrawString(font, this.tiles[index].Offset.ToString(), xy, Color.Black, 0f, Vector2.One, 0.4f, SpriteEffects.None, 0f); * sb.DrawString(font, this.tiles[index].Offset.ToString(), xy, Color.White, 0f, Vector2.One, 0.37f, SpriteEffects.None, 0f); */ currentTile--; tileX = tileX - this.TileWidth; if (currentTile == 0) { currentRow++; tileX = Settings.SCREEN_WIDTH / Settings.PIXEL_RATIO; tileY = tileY + this.TileHeight; // * Settings.PIXEL_RATIO); // Je remet au max mon compteur de décalage de row startTile = startTile + this.Width; //startTile = this.TilePicker(tileX, tileY).TileIndex; // JE me repositionne sur la bonne tile currentTile = row; offset = offset + 8; //if (offset < 48*2) offset = offset + 8; else offset = 0; //currentTile = currentTile + offset / 8; } } if (debugOnScreen) { Vector2 thexy = new Vector2(300, 2); sb.DrawString(font, startTile.ToString(), thexy, Color.Black, 0f, Vector2.One, 0.4f, SpriteEffects.None, 0f); sb.DrawString(font, startTile.ToString(), thexy, Color.White, 0f, Vector2.One, 0.37f, SpriteEffects.None, 0f); } /* * // je parcours l'écran en fonction de la taille définit. Cela me donnera le nombre de tile à afficher * while (tileX > -this.TileWidth && tileY < Settings.SCREEN_HEIGHT / Settings.PIXEL_RATIO) * { * //Du coup, comme je dois partir le plus a droite, la tile la plus à droite est la tile de gauche + le nombre de * //tile possible a afficher dans une row * * * // Donc la je sais que sur une ligne affiché, je peux mettre "row" tiles (en nombre, donc) * // Comme je commence à droite, celle de droite sera start tile + row * // Mais il me manque le Y * // Donc la même * * Console.WriteLine("startTile=" + startTile + " currentTile=" + currentTile); * Vector2 coords = new Vector2(tileX + viewport.X, tileY + viewport.Y); * //if (startTile + currentTile > 0) * //{ * index = this.tiles[startTile + currentTile].SpriteIndex; * int elem = startTile + currentTile; * sb.Draw(ss.spriteElements[index].sprite, coords, Color.White); * * * Vector2 xy = new Vector2(tileX + 5 + viewport.X, tileY + 5 + viewport.Y); * /* * sb.DrawString(font, row.ToString(), xy, Color.Black, 0f, Vector2.One, 0.4f, SpriteEffects.None, 0f); * sb.DrawString(font, row.ToString(), xy, Color.White, 0f, Vector2.One, 0.37f, SpriteEffects.None, 0f); * /* */ /* xy = new Vector2(tileX + 10 + viewport.X, tileY + 10 + viewport.Y); * sb.DrawString(font, elem.ToString(), xy, Color.Black, 0f, Vector2.One, 0.4f, SpriteEffects.None, 0f); * sb.DrawString(font, elem.ToString(), xy, Color.White, 0f, Vector2.One, 0.37f, SpriteEffects.None, 0f); * //} * * //#TODO le décalage dans la tile * /* * tileX = tileX - this.TileWidth; * * // Ensuite, je ferais la tile de droite - 1 donc je dois décrémenter row * currentTile--; * * // Si j'ai fais toute une ligne, j'incrémente sur Y * if (currentTile == 0) * { * tileX = Settings.SCREEN_WIDTH / Settings.PIXEL_RATIO; * tileY = tileY + this.TileHeight;// * Settings.PIXEL_RATIO); * // Je remet au max mon compteur de décalage de row * startTile = startTile + this.Width; * // JE me repositionne sur la bonne tile * currentTile = row; * * } * * * * } */ /* * * * int tilePart = 0; * row = (Settings.SCREEN_WIDTH / Settings.PIXEL_RATIO) / this.TileWidth+1; * * while (tileX>-this.TileWidth && tileY < Settings.SCREEN_HEIGHT/ Settings.PIXEL_RATIO) * //for (int i = 0; i < 500; i++) * { * * Vector2 coords = new Vector2(tileX+viewport.X, tileY+viewport.Y); * //Console.WriteLine("X: " + tileX.ToString() + " Y: " + tileY.ToString()); * * * * * int index = this.tiles[tilePart].SpriteIndex; * * * sb.Draw(ss.spriteElements[index].sprite, coords, Color.White); * * int elem = row-tilePart; * Vector2 xy = new Vector2(tileX + 5 + viewport.X, tileY + 5 + viewport.Y); * * sb.DrawString(font, row.ToString(), xy, Color.Black, 0f, Vector2.One, 0.4f, SpriteEffects.None, 0f); * sb.DrawString(font, row.ToString(), xy, Color.White, 0f, Vector2.One, 0.37f, SpriteEffects.None, 0f); * xy = new Vector2(tileX + 10 + viewport.X, tileY + 10 + viewport.Y); * sb.DrawString(font, elem.ToString(), xy, Color.Black, 0f, Vector2.One, 0.4f, SpriteEffects.None, 0f); * sb.DrawString(font, elem.ToString(), xy, Color.White, 0f, Vector2.One, 0.37f, SpriteEffects.None, 0f); * * tileX = tileX - this.TileWidth;// * Settings.PIXEL_RATIO); * //row--; * * if (tileX < -this.TileHeight) * { * tileX = Settings.SCREEN_WIDTH / Settings.PIXEL_RATIO; * tileY = tileY + this.TileHeight;// * Settings.PIXEL_RATIO); * row = row + row; * } * tilePart++; * * * } */ }
public void Draw(SpriteBatch sb, SpritesSheet ss, SpriteFont _font) { int drawnPeons = 0; int elemIndex = 0; if (currentFrame - 1 < spritesFrames.Count()) { // ****** FRAME RECTANGLE *** /* * if (spritesFrames[currentFrame - 1].width > 0 && spritesFrames[currentFrame - 1].height > 0) * { * Rectangle FrameRect = new Rectangle(0, 0, spritesFrames[currentFrame - 1].width, spritesFrames[currentFrame - 1].height); * * Color[] data = new Color[spritesFrames[currentFrame - 1].width * spritesFrames[currentFrame - 1].height]; * * for (int i = 0; i < data.Length; i++)//loop through all the colors setting them to whatever values we want * { * data[i] = new Color(255, 255, 255, 255); ; * } * Texture2D tex = new Texture2D(graphicsDevice, spritesFrames[currentFrame - 1].width, spritesFrames[currentFrame - 1].height); * tex.SetData(data); * sb.Draw(tex, new Vector2(Location.X - spritesFrames[currentFrame - 1].width / 2, Location.Y - spritesFrames[currentFrame - 1].height), null, Color.White); * } */ int j = 1; int elementCounter = 1; foreach (SpriteElement spriteElement in spritesFrames[currentFrame - 1].spritesElements) { elemIndex++; long elem = (spriteElement.sprite / 6); int xoff = Location.X - (spriteElement.xOffset) / 2; int yoff = Location.Y - (spriteElement.yOffset) / 2; Vector2 xy = new Vector2(xoff, yoff); Rectangle rectangle = new Rectangle(1, 1, 1, 1); // Dans l'idée, si le flag est à 128, alors on a un sprite modifiable, c'est à dire un personnage. // On doit remplir une table dans l'animation avec un nombre de personnage à utiliser, c'est la // population de l'attraction puis on l'utilise. // Il faudra quand même revoir l'algo afin que les spectateurs ne soient pas nécessairement tous au même // endroit sur chaque animation. Après c'est peut être pas hyper génant. // En gros l'idée pour les peons standards est d'aller chercher leur sprite index dans la frame dédié (604-605...) // a la position "standard", gueule du serpent en 24, le banzai en 30 etc // Je ne comprend pas pourquoi il y a plusieurs style de frame mais je présume que les animations ne sont pas // les mêmes pour une raison inconnu // En vrai toutes les anims sont différentes, on ne s'en sortira pas sans une indexation frame par frame // The element is a guest. if (spriteElement.xFlipped > 127) { //elem = 2129; #region - Guest Replacement - CURRENTLY NON WORKING NEED TO REDO WITH AN INDEX if (this.replaceGuest) { if (guests.Count == 0) { //nothing elem = 0; } else { if (drawnPeons < guests.Count) { //en théorie j'affecte le type de peon a elem ici. //Console.Write("current elem is: " + elem); //elem =CONST.ADULTGIRL_GREENDRESS_INDEXES[elem - 65]; // okok, c'est pas très simple mais c'est rudement efficace int newelem; newelem = Guests.guests.Find(x => x.Index == Guests.currentGuestIndex).animationIndexes.Find(x => x.Index == elem).Sprite; //newelem = Peons.peons.Find(x => x.Name == "girl green dress").animationIndexes.Find(x => x.Index == elem).Sprite; //newelem = Peons.peons.Find(x => x.Name == "child guy white shirt").animationIndexes.Find(x => x.Index == elem).Sprite; //newelem = Peons.peons.Find(x => x.Name == "child girl red pants").animationIndexes.Find(x => x.Index == elem).Sprite; //newelem = Peons.peons.Find(x => x.Name == "guy yellow pants").animationIndexes.Find(x => x.Index == elem).Sprite; //newelem = Peons.peons.Find(x => x.Name == "girl purple dress").animationIndexes.Find(x => x.Index == elem).Sprite; //newelem = Peons.peons.Find(x => x.Name == "child guy blue suits").animationIndexes.Find(x => x.Index == elem).Sprite; //newelem = Peons.peons.Find(x => x.Name == "child girl white shirt").animationIndexes.Find(x => x.Index == elem).Sprite; //Console.WriteLine(" new elem is: " + newelem.ToString()); if (newelem != 0) { elem = newelem; } drawnPeons++; } else { elem = 0; } } } #endregion } //Console.WriteLine("Current Animation: " + this.animationIndex + " spriteElement: " + elem); // This is a Guest if (elem != 0 && spriteElement.xFlipped > 127) { if (j < this.guests.Count + 1) { //Console.WriteLine(j); j++; if (spriteElement.xFlipped == 129) { // Just a dummy text for the xflipped element //if (this.hilight) col = Color.Red; else col = Color.White; rectangle = new Rectangle(xoff, yoff, ss.spriteElements[(int)elem].sprite.Width, ss.spriteElements[(int)elem].sprite.Height); sb.Draw(ss.spriteElements[(int)elem].sprite, rectangle, null, Color.White, 0f, Vector2.Zero, SpriteEffects.FlipHorizontally, 0); } else { sb.Draw(ss.spriteElements[(int)elem].sprite, xy, Color.White); } if (drawIndex) { sb.DrawString(_font, elem.ToString() + " / " + spriteElement.xFlipped.ToString(), xy, Color.Black, 0f, Vector2.One, 0.26f, SpriteEffects.None, 0f); sb.DrawString(_font, elem.ToString() + " / " + spriteElement.xFlipped.ToString(), xy, Color.White, 0f, Vector2.One, 0.25f, SpriteEffects.None, 0f); } if (drawElem) { sb.DrawString(_font, elemIndex.ToString() + " / " + spriteElement.xFlipped.ToString(), xy, Color.Black, 0f, Vector2.One, 0.4f, SpriteEffects.None, 0f); sb.DrawString(_font, elemIndex.ToString() + " / " + spriteElement.xFlipped.ToString(), xy, Color.White, 0f, Vector2.One, 0.37f, SpriteEffects.None, 0f); } } } else // This is not a guest, it's an structure element { sb.Draw(ss.spriteElements[(int)elem].sprite, xy, Color.White); if (drawIndex) { sb.DrawString(_font, "[" + elementCounter + "]" + elem.ToString() + " // " + spriteElement.xFlipped.ToString(), xy, Color.Black, 0f, Vector2.One, 0.21f, SpriteEffects.None, 0f); sb.DrawString(_font, "[" + elementCounter + "]" + elem.ToString() + " // " + spriteElement.xFlipped.ToString(), xy, Color.White, 0f, Vector2.One, 0.20f, SpriteEffects.None, 0f); } } elementCounter++; } } }
public void AddSpritesSheet(SpritesSheet sheet) { sheets.Add(sheet); FillCombo(); this.SelectedSheet = sheet; }
public Text(SpritesSheet ss) { position.X = 0; position.Y = 0; height = 5; Color = Color.White; spritesSheet = ss; #region * FONTDICT (lot of adds) * int i = 1; fontDict.Add('%', i++); fontDict.Add('\'', i++); fontDict.Add('"', i++); fontDict.Add('0', i++); fontDict.Add('1', i++); fontDict.Add('2', i++); fontDict.Add('3', i++); fontDict.Add('4', i++); fontDict.Add('5', i++); fontDict.Add('6', i++); fontDict.Add('7', i++); fontDict.Add('8', i++); fontDict.Add('9', i++); fontDict.Add(':', i++); fontDict.Add('A', i++); fontDict.Add('B', i++); fontDict.Add('C', i++); fontDict.Add('D', i++); fontDict.Add('E', i++); fontDict.Add('F', i++); fontDict.Add('G', i++); fontDict.Add('H', i++); fontDict.Add('I', i++); fontDict.Add('J', i++); fontDict.Add('K', i++); fontDict.Add('L', i++); fontDict.Add('M', i++); fontDict.Add('N', i++); fontDict.Add('O', i++); fontDict.Add('P', i++); fontDict.Add('Q', i++); fontDict.Add('R', i++); fontDict.Add('S', i++); fontDict.Add('T', i++); fontDict.Add('U', i++); fontDict.Add('V', i++); fontDict.Add('W', i++); fontDict.Add('X', i++); fontDict.Add('Y', i++); fontDict.Add('Z', i++); fontDict.Add('.', i++); fontDict.Add('`', i++); fontDict.Add('(', i++); fontDict.Add(')', i++); fontDict.Add('/', i++); fontDict.Add('Ü', i++); fontDict.Add('Ä', i++); fontDict.Add('Ö', i++); fontDict.Add('§', i++); fontDict.Add('$', i++); fontDict.Add('ò', i++); fontDict.Add('Ì', i++); fontDict.Add('È', i++); fontDict.Add('À', i++); fontDict.Add('Ñ', i++); fontDict.Add(' ', i++); #endregion }