/// <summary> /// Slouzi pro deserializaci(nacteni) /// </summary> /// <param name="hero"></param> /// <param name="animatedSprite"></param> public Hero(Hero hero, AnimatedSprite animatedSprite) { keys = new List<int>(); units = new List<Unit>(); Gender = hero.Gender; Cell.X = hero.Cell.X; Cell.Y = hero.Cell.Y; Position = hero.Position; Direction = hero.Direction; Sprite = animatedSprite; Sprite.Position = Position; keys = hero.keys; }
/// <summary> /// Jadro simulace boje dvou stran /// </summary> public static void SimulateTheFight(Hero left, Unit right, out bool whowon, out string LOG) { LOG = ""; Random x = new Random(); int WhoStarts = x.Next(0,2); while (!right.isDead && left.units.Count != 0) { int index = x.Next(0, left.units.Count); if (WhoStarts == 0) { ushort dmg = (left.units[index].Attack - right.Defense > 0) ? (ushort)(left.units[index].Attack - right.Defense) : (ushort)1; right.HitPoints.Damage(dmg); LOG += "Ubral jste nepriteli " + dmg + " zivotu\n"; WhoStarts = 1; } else { ushort dmg = (right.Attack - left.units[index].Defense > 0) ? (ushort)(right.Attack - left.units[index].Defense) : (ushort)1; left.units[index].HitPoints.Damage(dmg); LOG += "Nepritel ubral " + left.units[index].Name + " " + dmg + " zivotu\n"; WhoStarts = 0; } left.CheckUnits(); } if (right.isDead) whowon = false; else whowon = true; }
/// <summary> /// Metoda slouzici pro nahrani hry /// </summary> /// <param name="gamename"></param> public static void LoadGame(string gamename) { GameSerialize ob = new GameSerialize(); try { Serializer ser = new Serializer(); ob = ser.DeSerializeGame(gamename); LoadMapAndTextures(ob.mapName); LoadHeroSprite(ob.hero.Gender); //Overrides Units loaded from MapSerialize Units = new List<Unit>(); foreach (Unit item in ob.units) { Unit klon = baseUnits[item.Name].Clone(item.Notoriety, item.Cell.X, item.Cell.Y); Session.FrontMap.GetTile(item.Cell).obj = klon; Units.Add(klon); } //Overrides Keys loaded from MapSerialize Keys = new List<GameKey>(); foreach (GameKey item in ob.keys) { GameKey klon = baseKeys[item.index].Clone(item.Cell.X, item.Cell.Y); Session.FrontMap.GetTile(item.Cell).obj = klon; Keys.Add(klon); } MapLayer frontPath = new MapLayer(Session.MapProps.FrontSizeX, Session.MapProps.FrontSizeY); for (int y = 0; y < frontPath.Height; y++) { for (int x = 0; x < frontPath.Width; x++) { Tile tile = new Tile(-1, -1, y, x); frontPath.SetTile(x, y, tile); } } Session.FrontMap.mapLayers.Add(frontPath); Session.CurrentHero = new Hero(ob.hero, playerSpriteHero); Session.CurrentHero.units = new List<Unit>(); foreach (Unit item in ob.hero.units) { Session.CurrentHero.units.Add(baseUnits[item.Name].Clone(item.Notoriety, item.Cell.X, item.Cell.Y, item.Attack, item.Defense, item.HitPoints, item.isInHero)); } Session.Camera = ob.cam; Session.FrontMap.mapLayers[1] = ob.frontSplatter; } catch (Exception ex) { string message = ex.Message; } }
/// <summary> /// Uzamkne kameru na hrdinu /// </summary> /// <param name="sprite"></param> public void LockToSprite(Hero sprite) { Position.X = sprite.Position.X + sprite.Sprite.Width / 2 - (Session.ViewportRect.Width / 2); Position.Y = sprite.Position.Y + sprite.Sprite.Height / 2 - (Session.ViewportRect.Height / 2); }