//TODO: This whole method should be removed once file loading/saving works, and replaced with a 'Demo' map. /// <summary> /// Generates 'Demo' grid and inserts it into the map manager. /// </summary> /// <param name="mapManager">The map manager to work with.</param> /// <param name="defManager">The definition manager to work with.</param> /// <param name="gridId">The ID of the grid to generate and insert into the map manager.</param> private static void NewDefaultMap(IMapManager mapManager, ITileDefinitionManager defManager, int gridId) { mapManager.SuppressOnTileChanged = true; try { Logger.Log("Cannot find map. Generating blank map.", LogLevel.Warning); var floor = defManager["Floor"].TileId; var wall = defManager["Wall"].TileId; Debug.Assert(floor > 0); Debug.Assert(wall > 0); var grid = mapManager.GetGrid(gridId) ?? mapManager.CreateGrid(gridId); for (var y = -32; y <= 32; ++y) { for (var x = -32; x <= 32; ++x) { if (Math.Abs(x) == 32 || Math.Abs(y) == 32 || Math.Abs(x) == 5 && Math.Abs(y) < 5 || Math.Abs(y) == 7 && Math.Abs(x) < 3) { grid.SetTile(x, y, new Tile(wall)); } else { grid.SetTile(x, y, new Tile(floor)); } } } } finally { mapManager.SuppressOnTileChanged = false; } }
public static void DeserializeGrid(IMapManagerInternal mapMan, MapId mapId, ref GridId?gridId, YamlMappingNode info, YamlSequenceNode chunks, IReadOnlyDictionary <ushort, string> tileDefMapping, ITileDefinitionManager tileDefinitionManager) { ushort csz = 0; ushort tsz = 0; float sgsz = 0.0f; foreach (var kvInfo in info) { var key = kvInfo.Key.ToString(); var val = kvInfo.Value.ToString(); if (key == "chunksize") { csz = ushort.Parse(val); } else if (key == "tilesize") { tsz = ushort.Parse(val); } else if (key == "snapsize") { sgsz = float.Parse(val); } } var grid = mapMan.CreateGridNoEntity(mapId, gridId); gridId = grid.Index; foreach (var chunkNode in chunks.Cast <YamlMappingNode>()) { DeserializeChunk(mapMan, grid, chunkNode, tileDefMapping, tileDefinitionManager); } }
private Dictionary <string, Image> GetTileImages( ITileDefinitionManager tileDefinitionManager, IResourceCache resourceCache, int tileSize) { var stopwatch = new Stopwatch(); stopwatch.Start(); var images = new Dictionary <string, Image>(); foreach (var definition in tileDefinitionManager) { var sprite = definition.SpriteName; if (string.IsNullOrEmpty(sprite)) { continue; } using var stream = resourceCache.ContentFileRead($"{TilesPath}{sprite}.png"); Image tileImage = Image.Load <Rgba32>(stream); if (tileImage.Width != tileSize || tileImage.Height != tileSize) { throw new NotSupportedException($"Unable to use tiles with a dimension other than {tileSize}x{tileSize}."); } images[sprite] = tileImage; } Console.WriteLine($"Indexed all tile images in {(int) stopwatch.Elapsed.TotalMilliseconds} ms"); return(images); }
public MapContext(IMapManager maps, ITileDefinitionManager tileDefs, IServerEntityManagerInternal entities, IPauseManager pauseManager) { _mapManager = maps; _tileDefinitionManager = tileDefs; _serverEntityManager = entities; _pauseManager = pauseManager; RootNode = new YamlMappingNode(); }
public MapContext(IMapManager maps, ITileDefinitionManager tileDefs, IServerEntityManagerInternal entities, IPauseManager pauseManager, YamlMappingNode node, IMap targetMap) { _mapManager = maps; _tileDefinitionManager = tileDefs; _serverEntityManager = entities; _pauseManager = pauseManager; RootNode = node; TargetMap = targetMap; }
public MapContext(IMapManagerInternal maps, ITileDefinitionManager tileDefs, IServerEntityManagerInternal entities, IPauseManager pauseManager, IComponentFactory componentFactory, IComponentManager componentManager) { _mapManager = maps; _tileDefinitionManager = tileDefs; _serverEntityManager = entities; _pauseManager = pauseManager; _componentFactory = componentFactory; _componentManager = componentManager; RootNode = new YamlMappingNode(); }
public TileSpawnWindow(ITileDefinitionManager tileDefinitionManager, IPlacementManager placementManager, IResourceCache resourceCache) { __tileDefinitionManager = tileDefinitionManager; _placementManager = placementManager; _resourceCache = resourceCache; PerformLayout(); Title = "Place Tiles"; }
public MapContext(IMapManagerInternal maps, ITileDefinitionManager tileDefs, IServerEntityManagerInternal entities, IPauseManager pauseManager, IComponentManager componentManager, IPrototypeManager prototypeManager, YamlMappingNode node, MapId targetMapId) { _mapManager = maps; _tileDefinitionManager = tileDefs; _serverEntityManager = entities; _pauseManager = pauseManager; _componentManager = componentManager; RootNode = node; TargetMap = targetMapId; _prototypeManager = prototypeManager; }
public EscapeMenu(IClientConsole console, ITileDefinitionManager tileDefinitionManager, IPlacementManager placementManager, IPrototypeManager prototypeManager, IResourceCache resourceCache, IConfigurationManager configSystem) { _configSystem = configSystem; _console = console; __tileDefinitionManager = tileDefinitionManager; _placementManager = placementManager; _prototypeManager = prototypeManager; _resourceCache = resourceCache; PerformLayout(); }
public EscapeMenu(IClientConsole console, ITileDefinitionManager tileDefinitionManager, IPlacementManager placementManager, IPrototypeManager prototypeManager, IResourceCache resourceCache, IConfigurationManager configSystem, ILocalizationManager localizationManager) { _configSystem = configSystem; _localizationManager = localizationManager; _console = console; __tileDefinitionManager = tileDefinitionManager; _placementManager = placementManager; _prototypeManager = prototypeManager; _resourceCache = resourceCache; IoCManager.InjectDependencies(this); PerformLayout(); }
private Dictionary <string, List <Image> > GetTileImages( ITileDefinitionManager tileDefinitionManager, IResourceCache resourceCache, int tileSize) { var stopwatch = new Stopwatch(); stopwatch.Start(); var images = new Dictionary <string, List <Image> >(); foreach (var definition in tileDefinitionManager) { var sprite = definition.SpriteName; images[sprite] = new List <Image>(definition.Variants); if (string.IsNullOrEmpty(sprite)) { continue; } using var stream = resourceCache.ContentFileRead($"{TilesPath}{sprite}.png"); Image tileSheet = Image.Load <Rgba32>(stream); if (tileSheet.Width != tileSize * definition.Variants || tileSheet.Height != tileSize) { throw new NotSupportedException($"Unable to use tiles with a dimension other than {tileSize}x{tileSize}."); } for (var i = 0; i < definition.Variants; i++) { var tileImage = tileSheet.Clone(o => o.Crop(new Rectangle(tileSize * i, 0, 32, 32))); images[sprite].Add(tileImage); } } Console.WriteLine($"Indexed all tile images in {(int) stopwatch.Elapsed.TotalMilliseconds} ms"); return(images); }
public TileSpawnWindow(ITileDefinitionManager tileDefinitionManager, IPlacementManager placementManager, IResourceCache resourceCache) { __tileDefinitionManager = tileDefinitionManager; _placementManager = placementManager; _resourceCache = resourceCache; var vBox = new VBoxContainer(); Contents.AddChild(vBox); var hBox = new HBoxContainer(); vBox.AddChild(hBox); SearchBar = new LineEdit { PlaceHolder = "Search", SizeFlagsHorizontal = SizeFlags.FillExpand }; SearchBar.OnTextChanged += OnSearchBarTextChanged; hBox.AddChild(SearchBar); ClearButton = new Button { Text = "Clear" }; ClearButton.OnPressed += OnClearButtonPressed; hBox.AddChild(ClearButton); TileList = new ItemList { SizeFlagsVertical = SizeFlags.FillExpand }; TileList.OnItemSelected += TileListOnOnItemSelected; TileList.OnItemDeselected += TileListOnOnItemDeselected; vBox.AddChild(TileList); BuildTileList(); _placementManager.PlacementChanged += OnPlacementCanceled; Title = "Place Tiles"; SearchBar.GrabKeyboardFocus(); }
public static void DeserializeChunk(IMapManager mapMan, IMapGridInternal grid, YamlMappingNode chunkData, IReadOnlyDictionary <ushort, string> tileDefMapping, ITileDefinitionManager tileDefinitionManager) { var indNode = chunkData["ind"]; var tileNode = chunkData["tiles"]; var(chunkOffsetX, chunkOffsetY) = indNode.AsVector2i(); var tileBytes = Convert.FromBase64String(tileNode.ToString()); using var stream = new MemoryStream(tileBytes); using var reader = new BinaryReader(stream); mapMan.SuppressOnTileChanged = true; var chunk = grid.GetChunk(chunkOffsetX, chunkOffsetY); chunk.SuppressCollisionRegeneration = true; for (ushort y = 0; y < grid.ChunkSize; y++) { for (ushort x = 0; x < grid.ChunkSize; x++) { var id = reader.ReadUInt16(); var flags = (TileRenderFlag)reader.ReadByte(); var variant = reader.ReadByte(); var defName = tileDefMapping[id]; id = tileDefinitionManager[defName].TileId; var tile = new Tile(id, flags, variant); chunk.SetTile(x, y, tile); } } chunk.SuppressCollisionRegeneration = false; mapMan.SuppressOnTileChanged = false; }
public EscapeMenu(IClientConsole console, ITileDefinitionManager tileDefinitionManager, IPlacementManager placementManager, IPrototypeManager prototypeManager, IResourceCache resourceCache, IConfigurationManager configSystem, ILocalizationManager localizationManager) { _configSystem = configSystem; _localizationManager = localizationManager; _console = console; __tileDefinitionManager = tileDefinitionManager; _placementManager = placementManager; _prototypeManager = prototypeManager; _resourceCache = resourceCache; IoCManager.InjectDependencies(this); _sandboxManager.AllowedChanged += AllowedChanged; _conGroupController.ConGroupUpdated += UpdateSpawnButtonStates; PerformLayout(); UpdateSpawnButtonStates(); }
public static MapGrid DeserializeGrid(IMapManagerInternal mapMan, MapId mapId, YamlMappingNode info, YamlSequenceNode chunks, IReadOnlyDictionary <ushort, string> tileDefMapping, ITileDefinitionManager tileDefinitionManager) { ushort csz = 0; ushort tsz = 0; float sgsz = 0.0f; foreach (var kvInfo in info) { var key = kvInfo.Key.ToString(); var val = kvInfo.Value.ToString(); if (key == "chunksize") { csz = ushort.Parse(val); } else if (key == "tilesize") { tsz = ushort.Parse(val); } else if (key == "snapsize") { sgsz = float.Parse(val, CultureInfo.InvariantCulture); } } //TODO: Pass in options var grid = mapMan.CreateUnboundGrid(mapId); foreach (var chunkNode in chunks.Cast <YamlMappingNode>()) { DeserializeChunk(mapMan, grid, chunkNode, tileDefMapping, tileDefinitionManager); } return(grid); }
public TilePainter(ClientIntegrationInstance client, ServerIntegrationInstance server) { _sTileDefinitionManager = server.ResolveDependency <ITileDefinitionManager>(); _cResourceCache = client.ResolveDependency <IResourceCache>(); }
public void Register(ITileDefinitionManager tileDefinitionManager) { _tileId = tileDefinitionManager.Register(this); }
private static Vector2 CalculateMovement(ITileDefinitionManager tileDefinitionManager, IMapManager mapManager, PhysicsComponent velocity, float frameTime, IEntity entity) { if (velocity.Deleted) { // Help crashes. return(default);
private static void HandleMovement(IMapManager mapManager, ITileDefinitionManager tileDefinitionManager, IEntity entity, float frameTime) { if (entity.Deleted) { // Ugh let's hope this fixes the crashes. return; } var velocity = entity.GetComponent <PhysicsComponent>(); if (velocity.DidMovementCalculations) { velocity.DidMovementCalculations = false; return; } if (velocity.AngularVelocity == 0 && velocity.LinearVelocity == Vector2.Zero) { return; } var transform = entity.Transform; if (ContainerHelpers.IsInContainer(transform.Owner)) { transform.Parent.Owner.SendMessage(transform, new RelayMovementEntityMessage(entity)); velocity.LinearVelocity = Vector2.Zero; return; } var velocityConsumers = velocity.GetVelocityConsumers(); var initialMovement = velocity.LinearVelocity; int velocityConsumerCount; float totalMass; Vector2 lowestMovement; var tile = mapManager.GetGrid(entity.Transform.GridID).GetTileRef(entity.Transform.GridPosition).Tile; bool hasGravity = mapManager.GetGrid(entity.Transform.GridID).HasGravity&& !tile.IsEmpty; do { velocityConsumerCount = velocityConsumers.Count; totalMass = 0; lowestMovement = initialMovement; var copy = new List <Vector2>(velocityConsumers.Count); float totalFriction = 0; foreach (var consumer in velocityConsumers) { var movement = lowestMovement; totalMass += consumer.Mass; if (hasGravity) { totalFriction += GetFriction(tileDefinitionManager, mapManager, consumer.Owner); movement *= velocity.Mass / (totalMass != 0 ? totalMass + (totalMass * totalFriction) : 1); } consumer.AngularVelocity = velocity.AngularVelocity; consumer.LinearVelocity = movement; copy.Add(CalculateMovement(tileDefinitionManager, mapManager, consumer, frameTime, consumer.Owner) / frameTime); } copy.Sort(LengthComparer); lowestMovement = copy[0]; velocityConsumers = velocity.GetVelocityConsumers(); } while (velocityConsumers.Count != velocityConsumerCount); velocity.ClearVelocityConsumers(); foreach (var consumer in velocityConsumers) { consumer.LinearVelocity = lowestMovement; consumer.DidMovementCalculations = true; } velocity.DidMovementCalculations = false; }
public static void DeserializeGrid(IMapManager mapMan, IMap map, ref GridId?gridId, YamlMappingNode info, YamlSequenceNode chunks, IReadOnlyDictionary <ushort, string> tileDefMapping, ITileDefinitionManager tileDefinitionManager) { ushort csz = 0; ushort tsz = 0; float sgsz = 0.0f; var worldPos = Vector2.Zero; foreach (var kvInfo in info) { var key = kvInfo.Key.ToString(); var val = kvInfo.Value.ToString(); if (key == "chunksize") { csz = ushort.Parse(val); } else if (key == "tilesize") { tsz = ushort.Parse(val); } else if (key == "snapsize") { sgsz = float.Parse(val); } else if (key == "worldpos") { worldPos = kvInfo.Value.AsVector2(); } } var grid = map.CreateGrid(gridId, csz, sgsz); gridId = grid.Index; foreach (YamlMappingNode chunkNode in chunks.Cast <YamlMappingNode>()) { DeserializeChunk(mapMan, grid, chunkNode, tileDefMapping, tileDefinitionManager); } }
private static void DeserializeChunk(IMapManager mapMan, IMapGrid grid, YamlMappingNode chunk, IReadOnlyDictionary <ushort, string> tileDefMapping, ITileDefinitionManager tileDefinitionManager) { var indNode = chunk["ind"]; var tileNode = chunk["tiles"]; var(chunkOffsetX, chunkOffsetY) = indNode.AsVector2i() * grid.ChunkSize; var tileBytes = Convert.FromBase64String(tileNode.ToString()); using (var stream = new MemoryStream(tileBytes)) using (var reader = new BinaryReader(stream)) { mapMan.SuppressOnTileChanged = true; for (var y = 0; y < grid.ChunkSize; y++) { for (var x = 0; x < grid.ChunkSize; x++) { var id = reader.ReadUInt16(); var data = reader.ReadUInt16(); var defName = tileDefMapping[id]; id = tileDefinitionManager[defName].TileId; var tile = new Tile(id, data); grid.SetTile(new MapIndices(chunkOffsetX + x, chunkOffsetY + y), tile); } } mapMan.SuppressOnTileChanged = false; } }