Inheritance: ContainerObject, IEnvironmentObject, ISaveGameDelegate
        void Data_MapChanged(EnvironmentObject oldMap, EnvironmentObject newMap)
        {
            if (oldMap != null)
            {
                oldMap.MapTileTerrainChanged -= OnTileChanged;
            }

            if (newMap != null)
            {
                newMap.MapTileTerrainChanged += OnTileChanged;
            }

            if (newMap == null)
            {
                if (m_chunks != null)
                {
                    foreach (var chunk in m_chunks)
                    {
                        if (chunk != null)
                        {
                            chunk.Free();
                        }
                    }
                }

                this.Size = new IntSize3();
                m_chunks  = null;
            }
            else
            {
                this.Size = newMap.Size / Chunk.CHUNK_SIZE;
                m_chunks  = new Chunk[this.Size.Volume];
            }
        }
        public static void SendSetTerrains(SetTerrainDialog dialog, EnvironmentObject env, IntGrid3 cube)
        {
            var data = dialog.Data;

            var args = new Dictionary <string, object>()
            {
                { "envID", env.ObjectID },
                { "cube", cube },
                { "tileID", data.TileID },
                { "materialID", data.MaterialID },
                { "waterLevel", data.Water.HasValue ? (data.Water == true ? (byte?)TileData.MaxWaterLevel : (byte?)0) : null },
            };

            var script =
                @"env = world.GetObject(envID)
for p in cube.Range():
	td = env.GetTileData(p)

	if tileID != None:
		Dwarrowdelf.TileData.ID.SetValue(td, tileID)
	if materialID != None:
		Dwarrowdelf.TileData.MaterialID.SetValue(td, materialID)

	if waterLevel != None:
		Dwarrowdelf.TileData.WaterLevel.SetValue(td, waterLevel)

	env.SetTileData(p, td)

env.ScanWaterTiles()
";
            var msg = new Dwarrowdelf.Messages.IPScriptMessage(script, args);

            GameData.Data.User.Send(msg);
        }
Exemple #3
0
        public static Stockpile CreateStockpile(EnvironmentObject environment, IntGrid2Z area)
        {
            var stockpile = new Stockpile(environment, area);

            environment.AddAreaElement(stockpile);
            return(stockpile);
        }
Exemple #4
0
        public Stockpile(EnvironmentObject environment, IntGrid2Z area)
        {
            this.Environment = environment;
            this.Area        = area;

            m_jobs = new List <StoreToStockpileJob>();
        }
Exemple #5
0
        public Stockpile(EnvironmentObject environment, IntGrid2Z area)
        {
            this.Environment = environment;
            this.Area = area;

            m_jobs = new List<StoreToStockpileJob>();
        }
Exemple #6
0
        public bool Sees(EnvironmentObject env, IntVector3 p)
        {
            if (env != this.Environment)
            {
                return(false);
            }

            IntVector3 dp = p - this.Location;

            switch (this.World.LivingVisionMode)
            {
            case LivingVisionMode.SquareFOV:
                return(dp.ComponentLength <= this.VisionRange);

            case LivingVisionMode.LOS:
                if (Math.Abs(dp.X) > this.VisionRange || Math.Abs(dp.Y) > this.VisionRange || Math.Abs(dp.Z) > this.VisionRange)
                {
                    return(false);
                }

                return(this.VisionMap[dp]);

            default:
                throw new Exception();
            }
        }
        public ConstructManager(EnvironmentObject env)
        {
            m_environment = env;

            m_unreachables = new Unreachables(m_environment.World);

            m_jobDataList = new List<ConstructJobData>();
        }
        public ConstructManager(EnvironmentObject env)
        {
            m_environment = env;

            m_unreachables = new Unreachables(m_environment.World);

            m_jobDataList = new List <ConstructJobData>();
        }
Exemple #9
0
        static void AddGameEventInternal(EnvironmentObject env, IntVector3 location, string message)
        {
            if (s_events.Count > 100)
            {
                s_events.RemoveAt(0);
            }

            //Trace.TraceInformation(message);

            s_events.Add(new ClientEvent(message, env, location));
        }
Exemple #10
0
        public Chunk(EnvironmentObject map, IntVector3 chunkPosition)
        {
            this.ChunkPosition = chunkPosition;
            this.ChunkOffset = chunkPosition * CHUNK_SIZE;

            m_map = map;

            var v1 = this.ChunkOffset.ToVector3();
            var v2 = v1 + new Vector3(Chunk.CHUNK_SIZE);
            this.BBox = new BoundingBox(v1, v2);
        }
Exemple #11
0
        public ItemTracker(EnvironmentObject env)
        {
            m_env = env;

            m_items = new List<ItemObject>(1024);

            m_items.AddRange(env.Inventory.OfType<ItemObject>());

            m_env.ObjectAdded += Environment_ObjectAdded;
            m_env.ObjectRemoved += Environment_ObjectRemoved;
            m_env.ObjectMoved += Environment_ObjectMoved;
        }
Exemple #12
0
        public ItemTracker(EnvironmentObject env)
        {
            m_env = env;

            m_items = new List <ItemObject>(1024);

            m_items.AddRange(env.Contents.OfType <ItemObject>());

            m_env.ObjectAdded   += Environment_ObjectAdded;
            m_env.ObjectRemoved += Environment_ObjectRemoved;
            m_env.ObjectMoved   += Environment_ObjectMoved;
        }
Exemple #13
0
        public Chunk(EnvironmentObject map, IntVector3 chunkPosition)
        {
            this.ChunkPosition = chunkPosition;
            this.ChunkOffset   = chunkPosition * CHUNK_SIZE;

            m_map = map;

            var v1 = this.ChunkOffset.ToVector3();
            var v2 = v1 + new Vector3(Chunk.CHUNK_SIZE);

            this.BBox = new BoundingBox(v1, v2);
        }
 public void CameraMoveTo(MovableObject ob)
 {
     if (ob == null)
     {
         this.Environment = null;
     }
     else
     {
         var env = ob.Environment;
         CameraMoveTo(env, ob.Location);
     }
 }
Exemple #15
0
        public CleanAreaJob(IJobObserver parent, EnvironmentObject env, IntGrid2Z area)
            : base(parent)
        {
            m_environment = env;
            m_area = area;

            m_map = new Dictionary<IntPoint3, IJob>();

            foreach (var p in m_area.Range())
                m_map[p] = null;

            m_environment.World.TickStarting += World_TickStarting;
        }
Exemple #16
0
        void Data_MapChanged(EnvironmentObject oldMap, EnvironmentObject newMap)
        {
            var map = newMap;

            if (map == null)
            {
                this.ViewCorner1 = new IntVector3();
                this.ViewCorner2 = new IntVector3();
            }
            else
            {
                this.ViewCorner1 = new IntVector3(0, 0, 0);
                this.ViewCorner2 = new IntVector3(map.Width - 1, map.Height - 1, map.Depth - 1);
            }
        }
Exemple #17
0
        public CleanAreaJob(IJobObserver parent, EnvironmentObject env, IntGrid2Z area)
            : base(parent)
        {
            m_environment = env;
            m_area        = area;

            m_map = new Dictionary <IntVector3, IJob>();

            foreach (var p in m_area.Range())
            {
                m_map[p] = null;
            }

            m_environment.World.TickStarted += World_TickStarting;
        }
        void OnEnvChanged(EnvironmentObject oldEnv, EnvironmentObject newEnv)
        {
            if (m_env != null)
            {
                m_env.ObjectAdded   -= OnObjectAddedOrRemoved;
                m_env.ObjectRemoved -= OnObjectAddedOrRemoved;
                m_env.ObjectMoved   -= OnObjectMoved;
            }

            m_env     = newEnv;
            m_invalid = true;

            if (m_env != null)
            {
                m_env.ObjectAdded   += OnObjectAddedOrRemoved;
                m_env.ObjectRemoved += OnObjectAddedOrRemoved;
                m_env.ObjectMoved   += OnObjectMoved;
            }
        }
Exemple #19
0
 public static void AddGameEvent(EnvironmentObject env, IntPoint3 location, string message)
 {
     AddGameEventInternal(env, location, message);
     s_previousWasTickEvent = false;
 }
Exemple #20
0
 public static void AddGameEvent(EnvironmentObject env, IntPoint3 location, string format, params object[] args)
 {
     AddGameEventInternal(env, location, String.Format(format, args));
     s_previousWasTickEvent = false;
 }
Exemple #21
0
 public ClientEvent(string str, EnvironmentObject env, IntPoint3 location)
 {
     this.Message = str;
     this.Environment = env;
     this.Location = location;
 }
Exemple #22
0
        void Data_MapChanged(EnvironmentObject oldMap, EnvironmentObject newMap)
        {
            var map = newMap;

            if (map == null)
            {
                this.ViewCorner1 = new IntVector3();
                this.ViewCorner2 = new IntVector3();
            }
            else
            {
                this.ViewCorner1 = new IntVector3(0, 0, 0);
                this.ViewCorner2 = new IntVector3(map.Width - 1, map.Height - 1, map.Depth - 1);
            }
        }
Exemple #23
0
 public void CameraLookAt(EnvironmentObject env, IntVector3 p)
 {
     this.Environment = env;
     m_game.CameraLookAt(p);
 }
Exemple #24
0
 public static void AddGameEvent(EnvironmentObject env, IntVector3 location, string message)
 {
     AddGameEventInternal(env, location, message);
     s_previousWasTickEvent = false;
 }
Exemple #25
0
 public ClientEvent(string str, EnvironmentObject env, IntVector3 location)
 {
     this.Message     = str;
     this.Environment = env;
     this.Location    = location;
 }
Exemple #26
0
 void OnEnvChanged(EnvironmentObject oldEnv, EnvironmentObject newEnv)
 {
 }
 void OnEnvChanged(EnvironmentObject oldEnv, EnvironmentObject newEnv)
 {
 }
Exemple #28
0
        public Designation(EnvironmentObject env)
        {
            this.Environment = env;

            m_map = new Dictionary<IntPoint3, DesignationData>();
        }
 public void CameraLookAt(EnvironmentObject env, IntVector3 p)
 {
     this.Environment = env;
     m_game.CameraLookAt(p);
 }
 public TargetItemTracker(EnvironmentObject env, IntVector3 center, Func <ItemObject, bool> filter)
 {
     m_env    = env;
     m_filter = filter;
     m_heap   = new SortedDictionary <IntVector3, List <ItemObject> >(new LocationComparer(center));
 }
        public InstallItemManager(EnvironmentObject env)
        {
            m_environment = env;

            m_jobDataList = new List<InstallJobData>();
        }
        public static void SendSetTerrains(SetTerrainDialog dialog, EnvironmentObject env, IntGrid3 cube)
        {
            var data = dialog.Data;

            var args = new Dictionary<string, object>()
            {
                { "envID", env.ObjectID },
                { "cube", cube },
                { "terrainID", data.TerrainID },
                { "terrainMaterialID", data.TerrainMaterialID },
                { "interiorID", data.InteriorID },
                { "interiorMaterialID", data.InteriorMaterialID },
                { "waterLevel", data.Water.HasValue ? (data.Water == true ? (byte?)TileData.MaxWaterLevel : (byte?)0) : null },
            };

            var script =
            @"env = world.GetObject(envID)
            for p in cube.Range():
            td = env.GetTileData(p)

            if terrainID != None:
            Dwarrowdelf.TileData.TerrainID.SetValue(td, terrainID)
            if terrainMaterialID != None:
            Dwarrowdelf.TileData.TerrainMaterialID.SetValue(td, terrainMaterialID)

            if interiorID != None:
            Dwarrowdelf.TileData.InteriorID.SetValue(td, interiorID)
            if interiorMaterialID != None:
            Dwarrowdelf.TileData.InteriorMaterialID.SetValue(td, interiorMaterialID)

            if waterLevel != None:
            Dwarrowdelf.TileData.WaterLevel.SetValue(td, waterLevel)

            env.SetTileData(p, td)

            env.ScanWaterTiles()
            ";
            var msg = new Dwarrowdelf.Messages.IPScriptMessage(script, args);

            GameData.Data.User.Send(msg);
        }
Exemple #33
0
        public bool Sees(EnvironmentObject env, IntVector3 p)
        {
            if (env != this.Environment)
                return false;

            IntVector3 dp = p - this.Location;

            switch (this.World.LivingVisionMode)
            {
                case LivingVisionMode.SquareFOV:
                    return dp.ComponentLength <= this.VisionRange;

                case LivingVisionMode.LOS:
                    if (Math.Abs(dp.X) > this.VisionRange || Math.Abs(dp.Y) > this.VisionRange || Math.Abs(dp.Z) > this.VisionRange)
                        return false;

                    return this.VisionMap[dp];

                default:
                    throw new Exception();
            }
        }
Exemple #34
0
        void Data_MapChanged(EnvironmentObject oldMap, EnvironmentObject newMap)
        {
            if (oldMap != null)
                oldMap.MapTileTerrainChanged -= OnTileChanged;

            if (newMap != null)
                newMap.MapTileTerrainChanged += OnTileChanged;

            if (newMap == null)
            {
                if (m_chunks != null)
                {
                    foreach (var chunk in m_chunks)
                        if (chunk != null)
                            chunk.Free();
                }

                this.Size = new IntSize3();
                m_chunks = null;
            }
            else
            {
                this.Size = newMap.Size / Chunk.CHUNK_SIZE;
                m_chunks = new Chunk[this.Size.Volume];
            }
        }
Exemple #35
0
 public static void AddGameEvent(EnvironmentObject env, IntVector3 location, string format, params object[] args)
 {
     AddGameEventInternal(env, location, String.Format(format, args));
     s_previousWasTickEvent = false;
 }
Exemple #36
0
        public static bool PickVoxel(EnvironmentObject env, GameSurfaceView view, IntVector2 screenPos, IntGrid3 cropGrid,
                                     MapControlPickMode pickMode, out IntVector3 pos, out Direction face)
        {
            var camera = view.Camera;

            var ray = Ray.GetPickRay(screenPos.X, screenPos.Y, view.ViewPort, view.Camera.View * view.Camera.Projection);

            IntVector3 outpos = new IntVector3();
            Direction  outdir = Direction.None;

            var corner = cropGrid.Corner2;
            var size   = new IntSize3(corner.X + 1, corner.Y + 1, corner.Z + 1);

            IntVector3 prevoutpos = new IntVector3();
            Direction  prevoutdir = Direction.None;

            VoxelRayCast.RunRayCast(size, ray.Position, ray.Direction, view.Camera.FarZ,
                                    (x, y, z, dir) =>
            {
                var p = new IntVector3(x, y, z);

                if (cropGrid.Contains(p) == false)
                {
                    return(false);
                }

                var td = env.GetTileData(p);

                switch (pickMode)
                {
                case MapControlPickMode.Underground:
                    if (!td.IsUndefined && !td.IsWall)
                    {
                        return(false);
                    }

                    outpos = p;
                    outdir = dir;
                    return(true);

                case MapControlPickMode.AboveGround:
                    if (!td.IsUndefined && !td.IsWall)
                    {
                        prevoutpos = p;
                        prevoutdir = dir;
                        return(false);
                    }

                    if (prevoutpos.IsNull)
                    {
                        outpos = p;
                        outdir = dir;
                    }
                    else
                    {
                        outpos = prevoutpos;
                        outdir = prevoutdir;
                    }
                    return(true);

                case MapControlPickMode.Constant:
                    if (p.Z > cropGrid.Z2)
                    {
                        return(false);
                    }

                    outpos = p;
                    outdir = dir;
                    return(true);

                default:
                    throw new NotImplementedException();
                }
            });

            pos  = outpos;
            face = outdir;
            return(face != Direction.None);
        }
Exemple #37
0
        public Designation(EnvironmentObject env)
        {
            this.Environment = env;

            m_map = new Dictionary <IntVector3, DesignationData>();
        }
Exemple #38
0
        static void AddGameEventInternal(EnvironmentObject env, IntPoint3 location, string message)
        {
            if (s_events.Count > 100)
                s_events.RemoveAt(0);

            //Trace.TraceInformation(message);

            s_events.Add(new ClientEvent(message, env, location));
        }
Exemple #39
0
 public void CameraMoveTo(EnvironmentObject env, IntVector3 p)
 {
     this.Environment = env;
     m_game.CameraMoveTo(p);
 }
        public InstallItemManager(EnvironmentObject env)
        {
            m_environment = env;

            m_jobDataList = new List <InstallJobData>();
        }
Exemple #41
0
 public static Stockpile CreateStockpile(EnvironmentObject environment, IntGrid2Z area)
 {
     var stockpile = new Stockpile(environment, area);
     environment.AddAreaElement(stockpile);
     return stockpile;
 }
        public static bool PickVoxel(EnvironmentObject env, GameSurfaceView view, IntVector2 screenPos, IntGrid3 cropGrid,
			MapControlPickMode pickMode, out IntVector3 pos, out Direction face)
        {
            var camera = view.Camera;

            var ray = Ray.GetPickRay(screenPos.X, screenPos.Y, view.ViewPort, view.Camera.View * view.Camera.Projection);

            IntVector3 outpos = new IntVector3();
            Direction outdir = Direction.None;

            var corner = cropGrid.Corner2;
            var size = new IntSize3(corner.X + 1, corner.Y + 1, corner.Z + 1);

            IntVector3 prevoutpos = new IntVector3();
            Direction prevoutdir = Direction.None;

            VoxelRayCast.RunRayCast(size, ray.Position, ray.Direction, view.Camera.FarZ,
                (x, y, z, dir) =>
                {
                    var p = new IntVector3(x, y, z);

                    if (cropGrid.Contains(p) == false)
                        return false;

                    var td = env.GetTileData(p);

                    switch (pickMode)
                    {
                        case MapControlPickMode.Underground:
                            if (!td.IsUndefined && !td.IsWall)
                                return false;

                            outpos = p;
                            outdir = dir;
                            return true;

                        case MapControlPickMode.AboveGround:
                            if (!td.IsUndefined && !td.IsWall)
                            {
                                prevoutpos = p;
                                prevoutdir = dir;
                                return false;
                            }

                            if (prevoutpos.IsNull)
                            {
                                outpos = p;
                                outdir = dir;
                            }
                            else
                            {
                                outpos = prevoutpos;
                                outdir = prevoutdir;
                            }
                            return true;

                        case MapControlPickMode.Constant:
                            if (p.Z > cropGrid.Z2)
                                return false;

                            outpos = p;
                            outdir = dir;
                            return true;

                        default:
                            throw new NotImplementedException();
                    }
                });

            pos = outpos;
            face = outdir;
            return face != Direction.None;
        }
 public void CameraMoveTo(EnvironmentObject env, IntVector3 p)
 {
     this.Environment = env;
     m_game.CameraMoveTo(p);
 }
Exemple #44
0
        void OnEnvChanged(EnvironmentObject oldEnv, EnvironmentObject newEnv)
        {
            if (m_env != null)
            {
                m_env.ObjectAdded -= OnObjectAddedOrRemoved;
                m_env.ObjectRemoved -= OnObjectAddedOrRemoved;
                m_env.ObjectMoved -= OnObjectMoved;
            }

            m_env = newEnv;
            m_invalid = true;

            if (m_env != null)
            {
                m_env.ObjectAdded += OnObjectAddedOrRemoved;
                m_env.ObjectRemoved += OnObjectAddedOrRemoved;
                m_env.ObjectMoved += OnObjectMoved;
            }
        }