Esempio n. 1
0
        void SendNewTerrains(IEnumerable <IntVector3> revealedLocations)
        {
            if (revealedLocations.Any() == false)
            {
                return;
            }

            var msg = new Messages.MapDataTerrainsListMessage()
            {
                Environment  = m_environment.ObjectID,
                TileDataList = revealedLocations.Select(l => new KeyValuePair <IntVector3, TileData>(l, m_environment.GetTileData(l))).ToArray(),
            };

            m_player.Send(msg);
        }
        void CheckVisibility(IntVector3 location, TileData oldData, TileData newData)
        {
            var env = m_environment;

            var initLocs = new IntVector3[] { location };
            var target   = new MyTarget(env, this);

            var bfs = new BFS(initLocs, target);

            var revealed = bfs.Find().ToList();

            //Debug.Print("Revealed {0} tiles: {1}", revealed.Count, string.Join(", ", revealed.Select(p => p.ToString())));

            if (revealed.Count == 0)
            {
                return;
            }

            foreach (var p in revealed)
            {
                SetVisible(p);
            }

            // Send new tiles

            var msg = new Messages.MapDataTerrainsListMessage()
            {
                Environment  = env.ObjectID,
                TileDataList = revealed.Select(l => new KeyValuePair <IntVector3, TileData>(l, env.GetTileData(l))).ToArray(),
            };

            m_player.Send(msg);

            // Send new objects

            foreach (var ob in revealed.SelectMany(env.GetContents))
            {
                var vis = m_player.GetObjectVisibility(ob);
                Debug.Assert(vis != ObjectVisibility.None);
                ob.SendTo(m_player, vis);
            }
        }
Esempio n. 3
0
        void SendNewTerrains(IEnumerable<IntVector3> revealedLocations)
        {
            if (revealedLocations.Any() == false)
                return;

            var msg = new Messages.MapDataTerrainsListMessage()
            {
                Environment = m_environment.ObjectID,
                TileDataList = revealedLocations.Select(l => new KeyValuePair<IntVector3, TileData>(l, m_environment.GetTileData(l))).ToArray(),
            };

            m_player.Send(msg);
        }
        void OnTerrainOrInteriorChanged(IntPoint3 location, TileData oldData, TileData newData)
        {
            if (GetVisible(location) == false)
                return;

            var env = m_environment;

            bool revealPlanar = oldData.IsSeeThrough == false && newData.IsSeeThrough == true;
            bool revealDown = oldData.IsSeeThroughDown == false && newData.IsSeeThroughDown == true;

            List<IntPoint3> revealed = new List<IntPoint3>();

            if (revealPlanar)
            {
                revealed.AddRange(DirectionExtensions.PlanarDirections
                    .Select(dir => location + dir)
                    .Where(env.Contains)
                    .Where(p => GetVisible(p) == false));
            }

            if (revealDown)
            {
                var p = location + Direction.Down;

                if (env.Contains(p) && GetVisible(p) == false)
                    revealed.Add(p);
            }

            if (revealed.Count > 0)
            {
                foreach (var p in revealed)
                    SetVisible(p);

                // Send new tiles

                var msg = new Messages.MapDataTerrainsListMessage()
                {
                    Environment = env.ObjectID,
                    TileDataList = revealed.Select(l => new Tuple<IntPoint3, TileData>(l, env.GetTileData(l))).ToArray(),
                };

                m_player.Send(msg);

                // Send new objects

                foreach (var ob in revealed.SelectMany(env.GetContents))
                {
                    var vis = m_player.GetObjectVisibility(ob);
                    Debug.Assert(vis != ObjectVisibility.None);
                    ob.SendTo(m_player, vis);
                }
            }
        }
        void CheckVisibility(IntVector3 location, TileData oldData, TileData newData)
        {
            var env = m_environment;

            var initLocs = new IntVector3[] { location };
            var target = new MyTarget(env, this);

            var bfs = new BFS(initLocs, target);

            var revealed = bfs.Find().ToList();

            //Debug.Print("Revealed {0} tiles: {1}", revealed.Count, string.Join(", ", revealed.Select(p => p.ToString())));

            if (revealed.Count == 0)
                return;

            foreach (var p in revealed)
                SetVisible(p);

            // Send new tiles

            var msg = new Messages.MapDataTerrainsListMessage()
            {
                Environment = env.ObjectID,
                TileDataList = revealed.Select(l => new KeyValuePair<IntVector3, TileData>(l, env.GetTileData(l))).ToArray(),
            };

            m_player.Send(msg);

            // Send new objects

            foreach (var ob in revealed.SelectMany(env.GetContents))
            {
                var vis = m_player.GetObjectVisibility(ob);
                Debug.Assert(vis != ObjectVisibility.None);
                ob.SendTo(m_player, vis);
            }
        }