internal static Texture2D GetBuildingTextureWithPaint(Building building, AlternativeTextureModel textureModel, int textureVariation, bool canBePaintedOverride = false) { var xOffset = building.tilesWide * 16; var yOffset = textureModel.GetTextureOffset(textureVariation); var textureWidth = building.CanBePainted() || canBePaintedOverride ? xOffset : textureModel.TextureWidth; var texture2D = textureModel.GetTexture(textureVariation).CreateSelectiveCopy(Game1.graphics.GraphicsDevice, new Rectangle(0, yOffset, textureWidth, textureModel.TextureHeight)); if (building.paintedTexture != null) { building.paintedTexture = null; } if ((building.CanBePainted() || canBePaintedOverride) && xOffset * 2 <= textureModel.GetTexture(textureVariation).Width) { var paintedTexture2D = textureModel.GetTexture(textureVariation).CreateSelectiveCopy(Game1.graphics.GraphicsDevice, new Rectangle(xOffset, yOffset, xOffset, textureModel.TextureHeight)); building.paintedTexture = GetPaintedOverlay(building, texture2D, paintedTexture2D, building.netBuildingPaintColor.Value); if (building.paintedTexture != null) { texture2D = building.paintedTexture; } } return(texture2D); }
private static void SetTexture(Monster monster, AlternativeTextureModel textureModel) { if (textureModel is null) { monster.Sprite.loadedTexture = String.Empty; return; } var textureVariation = Int32.Parse(monster.modData["AlternativeTextureVariation"]); if (textureVariation == -1 || AlternativeTextures.modConfig.IsTextureVariationDisabled(textureModel.GetId(), textureVariation)) { monster.Sprite.loadedTexture = String.Empty; return; } var textureOffset = textureModel.GetTextureOffset(textureVariation); monster.Sprite.spriteTexture = textureModel.GetTexture(textureVariation); monster.Sprite.sourceRect.Y = textureOffset + (monster.Sprite.currentFrame * monster.Sprite.SpriteWidth / monster.Sprite.Texture.Width * monster.Sprite.SpriteHeight); }