示例#1
0
        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
            });
示例#2
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);
        }
示例#3
0
        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));
        }
示例#4
0
 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());
 }
示例#5
0
        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;
        }
示例#6
0
        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;
        }
示例#7
0
        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;
        }
示例#8
0
        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();
        }
示例#9
0
 public Collider2D(LogicalMap2D logicalMap, bool isLargeMap)
 {
     _logicalMap = logicalMap ?? throw new ArgumentNullException(nameof(logicalMap));
     _isLargeMap = isLargeMap;
 }