public static UIElement GetCloseButton(Action closingAction) { (UIHelper.BounceClose as AnimatedTexture2D).Paused = true; (UIHelper.BounceClose as AnimatedTexture2D).CurrentFrame = 0; (UIHelper.BounceClose as AnimatedTexture2D).SetSpeed(12); return(UIElement.GetImage(UIHelper.BounceClose, Color.White, "CloseBtn", 1, 9, UIHelper.GetTopRight(20, -40, 40)).WithInteractivity(click: (point, right, released, hold, element) => { if (released) { closingAction?.Invoke(); } }, hover: (point, hoverin, element) => { if (hoverin != element.WasHover) { Game1.playSound("smallSelect"); } AnimatedTexture2D a = (element.Theme as AnimatedTexture2D); if (hoverin) { a.Paused = false; } else { a.Paused = true; a.CurrentFrame = 0; } })); }
private void loadContentPacks() { if (!Helper.ModRegistry.IsLoaded("Pathoschild.ContentPatcher")) { return; } var modData = Helper.ModRegistry.Get("Pathoschild.ContentPatcher"); var contentPatcher = (Mod)modData.GetType().GetProperty("Mod", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public).GetValue(modData); PyTK.APIs.IScalerAPI ScalerAPI = new PyTK.APIs.PyTKAPI(); foreach (var pack in contentPatcher.Helper.ContentPacks.GetOwned()) { Content content = pack.ReadJsonFile <Content>("content.json"); if (content == null) { continue; } foreach (Changes change in content.Changes) { if ((change.Action != "Load" && change.Action != "EditImage") || !change.ScaleUp || (change.Action == "Load" && change.OriginalWidth == -1) || change.Target == "") { continue; } if (change.Action == "EditImage" && change.FromFileScaled != "" && change.ToArea.ContainsKey("X") && change.ToArea.ContainsKey("Y") && change.ToArea.ContainsKey("Width") && change.ToArea.ContainsKey("Height")) { change.Target = change.Target.Replace('/', '\\'); Texture2D sTex = pack.LoadAsset <Texture2D>(change.FromFileScaled); Texture2D s = null; if (change.AnimationFrameTime == -1) { s = ScaledTexture2D.FromTexture(PyTK.PyDraw.getRectangle(change.ToArea["Width"], change.ToArea["Height"], Color.White), sTex, sTex.Width / change.OriginalWidth); } else if ((sTex.Width / (float)change.OriginalWidth) is float sc) { s = new AnimatedTexture2D(sTex, (int)(change.ToArea["Width"] * sc), (int)(change.ToArea["Height"] * sc), 60 / change.AnimationFrameTime, true, sc); } ScalerAPI.ReplaceAssetAt(change.Target, new Microsoft.Xna.Framework.Rectangle(change.ToArea["X"], change.ToArea["Y"], change.ToArea["Width"], change.ToArea["Height"]), s); } else if (change.Action == "Load") { Scaler.Assets.AddOrReplace(change.Target, change.OriginalWidth); } } } }
public Fighter(Vector2 pos, Texture2D overlay_, AnimatedTexture2D idleAnim_, AnimatedTexture2D punchAnim_, AnimatedTexture2D recoilAnim_, FighterInput input_, HitBox punch_, bool flip_, float speed_, double health_, double power_) : base(pos) { idleAnim = idleAnim_; punchAnim = punchAnim_; recoilAnim = recoilAnim_; Vector2 ov = getOverlayPos(); overlay = new Image((int)ov.X, (int)ov.Y, overlay_); input = input_; flip = flip_; speed = speed_; Health = health_; Power = power_; punch = punch_; invulnTime = 0; punching = false; gettingPunched = false; punch.parent = this; }
public static void LoadFix(Stream stream, ref Texture2D __result) { if (stream is FileStream fs && Path.GetFileNameWithoutExtension(fs.Name) is string key) { bool scaled = false; bool animated = false; float scale = 1f; int tileWidth = 0; int tileHeight = 0; int fps = 0; bool loop = true; scaled = Regex.IsMatch(key, scalePattern); animated = Regex.IsMatch(key, animPattern); if (!scaled && !animated) { return; } if (!(animated && Regex.Match(key, animPattern) is Match ma && int.TryParse(ma.Groups[1].Value, out tileWidth) && int.TryParse(ma.Groups[2].Value, out tileHeight) && int.TryParse(ma.Groups[3].Value, out fps))) { animated = false; } if (!(scaled && Regex.Match(key, scalePattern) is Match m && float.TryParse(m.Groups[1].Value, out scale))) { scaled = false; } if (scaled && scale == 1f) { scaled = false; } if (animated && tileHeight == -1) { tileHeight = __result.Height; } if (animated && tileWidth == -1) { tileWidth = __result.Width; } if (animated && tileWidth == __result.Width && tileHeight == __result.Height) { animated = false; } if (!scaled && !animated) { return; } if (animated) { __result = new AnimatedTexture2D(__result, tileWidth, tileHeight, fps, loop, !scaled ? 1f : scale); } else if (scaled) { __result = ScaledTexture2D.FromTexture(__result.ScaleUpTexture(1f / scale, false), __result, scale); } } }
private static void loadAllPortraits() { foreach (string dir in Directory.EnumerateDirectories(contentFolder)) { string folderName = new DirectoryInfo(dir).Name; folders.Add(folderName); foreach (string file in Directory.EnumerateFiles(dir, "*.*", SearchOption.TopDirectoryOnly).Where(s => s.EndsWith(".png") || s.EndsWith(".xnb"))) { string fileName = Path.GetFileName(file); string name = Path.GetFileNameWithoutExtension(file).Split(new[] { "_anim_" }, StringSplitOptions.RemoveEmptyEntries)[0]; string extention = Path.GetExtension(file).ToLower(); if (extention == "xnb") { fileName = name; } Texture2D texture = PortraitureMod.helper.Content.Load <Texture2D>($"Portraits/{folderName}/{fileName}"); Texture2D frame = texture; int fps = 12; int frames = 1; bool loop = false; if (fileName.Contains("_anim_")) { string[] fdata = fileName.Split(new[] { "_anim_" }, StringSplitOptions.RemoveEmptyEntries); if (fdata.Length > 1) { frames = int.Parse(fdata[1]); } if (fdata.Length > 2) { fps = int.Parse(fdata[2]); } if (fdata.Length > 3) { loop = fdata[3] == "loop"; } if (frames < 1) { frames = 1; } if (fps < 1) { fps = 12; } } double tileWith = Convert.ToDouble(Math.Max(texture.Width / 2, 64)) / frames; float scale = (float)(tileWith / 64); Texture2D scaled = texture; if (frames == 1 && scale != 1) { scaled = new ScaledTexture2D(texture, scale); } else if (frames > 1) { scaled = new AnimatedTexture2D(texture, texture.Width / frames, texture.Height, fps, loop, scale); } if (!pTextures.ContainsKey(folderName + ">" + name)) { pTextures.Add(folderName + ">" + name, scaled); } else { pTextures[folderName + ">" + name] = scaled; } } } var contentPacks = PortraitureMod.helper.ContentPacks.GetOwned(); foreach (StardewModdingAPI.IContentPack pack in contentPacks) { string folderName = pack.Manifest.UniqueID; folders.Add(folderName); foreach (string file in Directory.EnumerateFiles(pack.DirectoryPath, "*.*", SearchOption.TopDirectoryOnly).Where(s => s.EndsWith(".png") || s.EndsWith(".xnb"))) { string fileName = Path.GetFileName(file); string name = Path.GetFileNameWithoutExtension(file); string extention = Path.GetExtension(file).ToLower(); if (extention == "xnb") { fileName = name; } Texture2D texture = pack.LoadAsset <Texture2D>($"{fileName}"); int tileWith = Math.Max(texture.Width / 2, 64); float scale = tileWith / 64; ScaledTexture2D scaled; try { scaled = ScaledTexture2D.FromTexture(Game1.getCharacterFromName(name).Portrait, texture, scale); } catch { scaled = ScaledTexture2D.FromTexture(Game1.getCharacterFromName("Pierre").Portrait, texture, scale); } if (!pTextures.ContainsKey(folderName + ">" + name)) { pTextures.Add(folderName + ">" + name, scaled); } else { pTextures[folderName + ">" + name] = scaled; } } } }
public CharacterButton(int x, int y, AnimatedTexture2D anim_, Texture2D up, Texture2D down) : base(x, y, up, down) { anim = anim_; }