/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. TextureManager.setDebug(true); spriteBatch = new SpriteBatch(GraphicsDevice); TextureManager.loadAllImages(Content); GlobalCamera = new LCamera(graphics.GraphicsDevice, spriteBatch, Settings.TargetRectangle, Settings.GP_P); Camera.setupCamera(Settings.GP_P); Camera.setupGenericTexture(GraphicsDevice); SafeImage.SetPlaceholder(new Image("phld")); ControllerDisplayHelper.Load(); TemporaryPlayer.LOAD(); Screen.Load(Content); Settings.Load(); ScreenManager = new GameScreenManager(); Screens.MinigameScreen.Load(Content); //Settings.DEBUG_CONTROLLERS = true; //DEBUGGING: Settings.UPDATE_GT = new GameTime(TimeSpan.Zero, TimeSpan.Zero); GameManager.Setup(new Player[] { new Player("TST P", Difficulty.NON_COMP, PlayerIndex.One), new Player("CMP E", Difficulty.Easy, PlayerIndex.Two), new Player("CMP M", Difficulty.Medium, PlayerIndex.Three), new Player("CMP H", Difficulty.Hard, PlayerIndex.Four) }); GameManager.ChangeP1(GameManager.Players[2], 0); ScreenManager.ChangeScreen(new Screens.MinigameScreen( Screens.MinigameScreen.AllMinigames[2], // Minigame goes here GameManager.Players)); // END DEBUGGING }
public override void Load(ContentManager cm) { Bread = SafeImage.Get("Minigames\\LunchBreak\\Bread"); Goodies = new Image[] { SafeImage.Get("Minigames\\LunchBreak\\Lettuce"), SafeImage.Get("Minigames\\LunchBreak\\Meat"), SafeImage.Get("Minigames\\LunchBreak\\Cheese"), SafeImage.Get("Minigames\\LunchBreak\\Tomato") }; Spider = SafeImage.Get("Minigames\\LunchBreak\\Spider"); font = TextureManager.getFont("GenericMenu"); }
private static void OnSourceWithCustomRefererChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { SafeImage safeImage = o as SafeImage; safeImage.OnLoaded(null, null); //OnLoaded(null, null); if (e.NewValue == null) { return; } }
public override void Load(ContentManager cm) { sheetSprite = new Image("Minigames\\HotBeat\\musicSheet"); boxSprite = SafeImage.Get("Minigames\\HotBeat\\box"); buttonSprites = new Dictionary <ControllerButton, Image>(); buttonSprites.Add(ControllerButton.A, new Image("ControllerImages\\A")); buttonSprites.Add(ControllerButton.B, new Image("ControllerImages\\B")); buttonSprites.Add(ControllerButton.X, new Image("ControllerImages\\X")); buttonSprites.Add(ControllerButton.Y, new Image("ControllerImages\\Y")); myFont = TextureManager.getFont("Minigames\\HotBeat\\myfont"); }
/// <summary> /// запрос на получение одраза картинки /// текущая картинка грузится и отдается /// соседние кэшируются /// </summary> /// <param name="current">что нужно подгрузить</param> /// <param name="prev">имя соседней с текущей картинка</param> /// <param name="next">имя соседней с текущей картинка</param> /// <returns></returns> public Image LoadImage(string current, string prev, string next) { //новый массив картинок //не стал перетасовывать местами элементы в траром так как очень это геморно SafeImage[] newImageList = new SafeImage[3]; //строим абсолютные пути if (current != null) { current = Path.Combine(folder, current); } else { //throw; } if (prev != null) { prev = Path.Combine(folder, prev); } if (next != null) { next = Path.Combine(folder, next); } //смотрим что закэшированно //критерий сравнения - абсолютный путь //критерий не очень честный но для занной задачи пойдет if (imageList != null) { for (int i = 0; i < 3; i++) { if (current.CompareTo(imageList[i].name) == 0) { newImageList[1] = imageList[i]; } else if (prev != null && prev.CompareTo(imageList[i].name) == 0) { newImageList[0] = imageList[i]; } else if (next != null && next.CompareTo(imageList[i].name) == 0) { newImageList[2] = imageList[i]; } } } //загружаем выбранную картинку (если не кэширована) //и нитью запускаем загрузку предыдущей и следующей (если не кэшированы) SafeImage sim; if (newImageList[1] == null) { newImageList[1] = new SafeImage(current); newImageList[1].isReady = true; Bitmap b = new Bitmap(newImageList[1].name); Bitmap scaled = new Bitmap((Image)b, size); newImageList[1].image = scaled; } if (prev != null && newImageList[0] == null) { newImageList[0] = new SafeImage(prev); sim = newImageList[0]; Debug.WriteLine("Pool Load " + sim.name); ThreadPool.QueueUserWorkItem(o => LoadImage(sim)); } if (next != null && newImageList[2] == null) { newImageList[2] = new SafeImage(next); sim = newImageList[2]; Debug.WriteLine("Pool Load " + sim.name); ThreadPool.QueueUserWorkItem(o => LoadImage(sim)); } imageList = newImageList; Image im = null; //если текущая картинка кэширована но еща в процессе загрузки - ждем пока не загрузится //здесь не использую спинлок так как можно процу загрузить пока тудет с диска/сети читаться do { imageList[1].mutex.WaitOne(); if (imageList[1].isReady) { im = imageList[1].image; } imageList[1].mutex.ReleaseMutex(); } while (!imageList[1].isReady); return im; }
/// <summary> /// Изменение размера картинки в отдельном потоке /// </summary> /// <param name="image">что нужно изменять</param> private void ResizeImage(SafeImage image) { image.mutex.WaitOne(); try { image.image = (Image)new Bitmap((Image)image.image, size); Debug.WriteLine("Resize " + image.name); } finally { image.isReady = true; image.mutex.ReleaseMutex(); } }
/// <summary> /// Загрузка картинки в отдельном потоке /// </summary> /// <param name="image">что нужно грузить</param> private void LoadImage(SafeImage image) { image.mutex.WaitOne(); try { Bitmap b = new Bitmap(image.name); image.image = (Image)new Bitmap((Image)b, size); Debug.WriteLine("Load " + image.name); } catch (Exception) { //нет файла или он кривой кто должен ловить исключение? //наверное тот кто использует наш класс throw; } finally { //освобиться надо в любом случае image.isReady = true; image.mutex.ReleaseMutex(); } }