public Floor(Zone zone) { m_zone = zone; m_backgroundRenderer = new SpriteRenderer(GrassTexture.Instance.SpriteSheet); m_backgroundInstance = m_backgroundRenderer.AddSprite(GrassTexture.Instance.Sprite); }
public void Initialize() { var index = new Vector2i(0, 0); var zone = new Zone(this, index); m_zones.Add(index, zone); m_currentZone = zone; m_currentZoneIndex = index; }
public void Update(TimeSpan elapsed) { //On récupère la position du joueur et on met a jour les zones var player = World.World.Instance.Player; var indexPlayer = new Vector2i((int)Math.Floor(player.Location.Position.X / ZoneSize.X), (int)Math.Floor(player.Location.Position.Y / ZoneSize.Y)); if (indexPlayer != m_currentZoneIndex) { m_currentZone = m_zones[indexPlayer]; m_currentZoneIndex = indexPlayer; Console.WriteLine("Zone : " + m_currentZoneIndex); } if (m_currentZone != null && !m_isUpdated) { //Calcul des zones visibles par la camera var positionCurrent = new Vector2i(m_currentZoneIndex.X * ZoneSize.X, m_currentZoneIndex.Y * ZoneSize.Y); var box = World.World.Instance.Camera.Box; m_currentMinZoneIndex = new Vector2i((int)(Math.Round(box.MinX / ZoneSize.X)), (int)(Math.Round(box.MinY / ZoneSize.Y))); m_currentMaxZoneIndex = new Vector2i((int)(Math.Round(box.MaxX / ZoneSize.X)), (int)(Math.Round(box.MaxY / ZoneSize.Y))); //Parallel.For(m_currentMinZoneIndex.X - 1, m_currentMaxZoneIndex.X + 1, row => // { // for (var col = m_currentMinZoneIndex.Y - 1; col <= m_currentMaxZoneIndex.Y + 1; col++) // { // var index = new Vector2i(row, col); // if (m_zones.ContainsKey(index)) // { // m_zones[index].Update(elapsed); // } // else // { // m_zones.Add(index, new Zone(this, index)); // } // } // }); for (var row = m_currentMinZoneIndex.X - 1; row <= m_currentMaxZoneIndex.X + 1; row++) { for (var col = m_currentMinZoneIndex.Y - 1; col <= m_currentMaxZoneIndex.Y + 1; col++) { var index = new Vector2i(row, col); if (m_zones.ContainsKey(index)) { m_zones[index].Update(elapsed); } else { m_zones.Add(index, new Zone(this, index)); } } } } }