public InfoOverlay(LogicalMap2D logicalMap) { _logicalMap = logicalMap ?? throw new ArgumentNullException(nameof(logicalMap)); // 1 tile padding all around so we don't have to worry about edge conditions in the shader _tiles = new byte[Width * Height]; _logicalMap.Dirty += (sender, args) => { if (args.Type != IconChangeType.Trigger) { return; } int index = _logicalMap.Index(args.X, args.Y); var zone = _logicalMap.GetZone(index); var triggers = zone?.Trigger ?? 0; _tiles[Index(args.X, args.Y)] = BuildTile(triggers); BufferDirty = true; }; On <BeginFrameEvent>(_ => _flags = 0); On <CursorModeEvent>(e => _flags |= e.Mode switch { CursorMode.Examine => InfoOverlayFlags.VerbExamine, CursorMode.Manipulate => InfoOverlayFlags.VerbManipulate, CursorMode.Talk => InfoOverlayFlags.VerbTalk, CursorMode.Take => InfoOverlayFlags.VerbTake, _ => 0 });
public MapRenderable2D(LogicalMap2D logicalMap, ITexture tileset) { if (tileset == null) { throw new ArgumentNullException(nameof(tileset)); } _logicalMap = logicalMap ?? throw new ArgumentNullException(nameof(logicalMap)); var subImage = tileset.GetSubImageDetails(0); TileSize = subImage.Size; _underlay = AttachChild(new TileLayer( logicalMap, tileset, logicalMap.GetUnderlay, DrawLayer.Underlay, IconChangeType.Underlay)); _overlay = AttachChild(new TileLayer(logicalMap, tileset, logicalMap.GetOverlay, DrawLayer.Overlay, IconChangeType.Overlay)); _info = AttachChild(new InfoOverlay(logicalMap)); var tileSize = tileset.GetSubImageDetails(0).Size; _annotations = AttachChild(new MapAnnotationLayer(logicalMap, tileSize)); On <ToggleUnderlayEvent>(e => _underlay.IsActive = !_underlay.IsActive); On <ToggleOverlayEvent>(e => _overlay.IsActive = !_overlay.IsActive); }
public MapRenderable2D(LogicalMap2D logicalMap, ITexture tileset) { On <ToggleUnderlayEvent>(e => _underlay.IsActive = !_underlay.IsActive); On <ToggleOverlayEvent>(e => _overlay.IsActive = !_overlay.IsActive); _logicalMap = logicalMap; var subImage = tileset.GetSubImageDetails(0); TileSize = subImage.Size; _underlay = AttachChild(new TileLayer( logicalMap, tileset, logicalMap.GetUnderlay, DrawLayer.Underlay, IconChangeType.Underlay)); _overlay = AttachChild(new TileLayer(logicalMap, tileset, logicalMap.GetOverlay, DrawLayer.Overlay, IconChangeType.Overlay)); var tileSize = tileset.GetSubImageDetails(0).Size; _annotations = AttachChild(new MapAnnotationLayer(logicalMap, tileSize)); }
public MapAnnotationLayer(LogicalMap2D logicalMap, Vector2 tileSize) { _logicalMap = logicalMap ?? throw new ArgumentNullException(nameof(logicalMap)); _tileSize = tileSize; _logicalMap.Dirty += (sender, args) => _dirty.Add((args.X, args.Y)); // _drawLayer = DrawLayer.Diagnostic; On <RenderEvent>(e => Render()); }
public MapAnnotationLayer(LogicalMap2D logicalMap, Vector2 tileSize) { On <RenderEvent>(e => Render()); _logicalMap = logicalMap; _tileSize = tileSize; _logicalMap.Dirty += (sender, args) => _dirty.Add((args.X, args.Y)); _drawLayer = DrawLayer.Diagnostic; }
public SelectionHandler2D(LogicalMap2D map, MapRenderable2D renderable) { OnAsync <WorldCoordinateSelectEvent, Selection>(OnSelect); On <ShowMapMenuEvent>(e => ShowMapMenu()); On <UiRightClickEvent>(e => { e.Propagating = false; Raise(new PushMouseModeEvent(MouseMode.RightButtonHeld)); }); _map = map ?? throw new ArgumentNullException(nameof(map)); _renderable = renderable; }
public TileLayer(LogicalMap2D logicalMap, ITexture tileset, Func <int, TileData> tileFunc, DrawLayer drawLayer, IconChangeType iconChangeType) { On <RenderEvent>(e => Render()); _logicalMap = logicalMap; _logicalMap.Dirty += (sender, args) => { if (args.Type == iconChangeType) { _dirty.Add((args.X, args.Y)); } }; _tileset = tileset; _tileFunc = tileFunc; _drawLayer = drawLayer; }
protected override void Subscribed() { Raise(new SetClearColourEvent(0, 0, 0)); if (_logicalMap != null) { return; } var assetManager = Resolve <IAssetManager>(); var state = Resolve <IGameState>(); _logicalMap = new LogicalMap2D(assetManager, _mapData, state.TemporaryMapChanges, state.PermanentMapChanges); var tileset = assetManager.LoadTexture(_logicalMap.TilesetId); AttachChild(new ScriptManager()); AttachChild(new Collider2D(_logicalMap, !_logicalMap.UseSmallSprites)); var renderable = AttachChild(new MapRenderable2D(_logicalMap, tileset)); var selector = AttachChild(new SelectionHandler2D(_logicalMap, renderable)); selector.HighlightIndexChanged += (sender, x) => renderable.HighlightIndex = x; TileSize = new Vector3(renderable.TileSize, 1.0f); _logicalMap.TileSize = renderable.TileSize; var movementSettings = _logicalMap.UseSmallSprites ? MovementSettings.Small() : MovementSettings.Large(); _partyMovement = AttachChild(new PartyCaterpillar(Vector2.Zero, MovementDirection.Right, movementSettings)); foreach (var npc in _logicalMap.Npcs) { AttachChild(_logicalMap.UseSmallSprites ? new SmallNpc(npc) as IComponent : new LargeNpc(npc)); } RebuildPartyMembers(); }
public Collider2D(LogicalMap2D logicalMap, bool isLargeMap) { _logicalMap = logicalMap ?? throw new ArgumentNullException(nameof(logicalMap)); _isLargeMap = isLargeMap; }