Exemplo n.º 1
0
        public Floor(Zone zone)
        {
            m_zone = zone;

            m_backgroundRenderer = new SpriteRenderer(GrassTexture.Instance.SpriteSheet);
            m_backgroundInstance = m_backgroundRenderer.AddSprite(GrassTexture.Instance.Sprite);
        }
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
        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));
                        }
                    }
                }
            }
        }