Ejemplo n.º 1
0
        public static void MapEvents(IAssetManager assets, string baseDir, MapDataId mapId)
        {
            var map = assets.LoadMap2D(mapId);

            if (map == null) // Just handle 2D for now
            {
                return;
            }

            var formatter = new EventFormatter(assets, mapId);
            var rootNodes = new HashSet <(bool, MapEventZone.TriggerType, int)>();

            foreach (var zone in map.Zones)
            {
                rootNodes.Add((zone.Global, zone.Trigger, zone.EventNumber));
            }

            var sorted =
                rootNodes
                .OrderByDescending(x => x.Item1)
                .ThenBy(x => x.Item2)
                .ThenBy(x => x.Item3)
            ;

            foreach (var(global, trigger, number) in sorted)
            {
                var e = map.Events[number];
                Console.WriteLine($"{(global ? "Global" : "Local")} {trigger}:");
                PrintChain(formatter, e, 1);
            }

            Console.ReadLine();
        }
Ejemplo n.º 2
0
        static void DumpMapEvents(StreamWriter sw, IAssetManager assets, MapDataId mapId, IMapData map)
        {
            var formatter = new EventFormatter(assets, AssetType.MapText, (ushort)mapId);

            sw.WriteLine();
            sw.WriteLine($"Map {(int)mapId} {mapId}:");
            foreach (var e in map.Events)
            {
                var chainId = map.Chains.Select((x, i) => x.FirstEvent == e ? i : (int?)null).FirstOrDefault(x => x != null);
                PrintEvent(sw, formatter, e, chainId);
            }

            /*
             * var rootNodes = new HashSet<(bool, TriggerType, int)>();
             * foreach (var zone in map.Zones)
             *  rootNodes.Add((zone.Global, zone.Trigger, zone.EventNumber));
             *
             * var sorted =
             *      rootNodes
             *          .OrderByDescending(x => x.Item1)
             *          .ThenBy(x => x.Item2)
             *          .ThenBy(x => x.Item3)
             *  ;
             *
             * foreach (var (global, trigger, number) in sorted)
             * {
             *  var e = map.Events[number];
             *  sw.WriteLine($"{(global ? "Global" : "Local")} {trigger}:");
             *  PrintChain(sw, formatter, e, 1);
             * }*/
        }
Ejemplo n.º 3
0
 public MapRenderable3D(MapDataId mapId, MapData3D mapData, LabyrinthData labyrinthData, Vector3 tileSize) : base(Handlers)
 {
     _mapId         = mapId;
     _mapData       = mapData;
     _labyrinthData = labyrinthData;
     _tileSize      = tileSize;
 }
Ejemplo n.º 4
0
 public Map(MapDataId mapId, TriggerType trigger, int x, int y)
 {
     MapId   = mapId;
     Trigger = trigger;
     X       = x;
     Y       = y;
 }
Ejemplo n.º 5
0
        public Map3D(MapDataId mapId, MapData3D mapData)
        {
            On <WorldCoordinateSelectEvent>(Select);
            On <MapInitEvent>(e => FireEventChains(TriggerType.MapInit, true));
            On <SlowClockEvent>(e => FireEventChains(TriggerType.EveryStep, false));
            On <HourElapsedEvent>(e => FireEventChains(TriggerType.EveryHour, false));
            On <DayElapsedEvent>(e => FireEventChains(TriggerType.EveryDay, false));
            // On<UnloadMapEvent>(e => Unload());

            MapId    = mapId;
            _mapData = mapData ?? throw new ArgumentNullException(nameof(mapData));
        }
Ejemplo n.º 6
0
        public MapRenderable3D(MapDataId mapId, MapData3D mapData, LabyrinthData labyrinthData, Vector3 tileSize)
        {
            On <RenderEvent>(Render);
            On <SlowClockEvent>(OnSlowClock);
            On <SortMapTilesEvent>(e => _isSorting = e.IsSorting);
            On <LoadPaletteEvent>(e => { });

            _mapId         = mapId;
            _mapData       = mapData;
            _labyrinthData = labyrinthData;
            _tileSize      = tileSize;
        }
Ejemplo n.º 7
0
        IMap BuildMap(MapDataId mapId)
        {
            var assets = Resolve <IAssetManager>();

            if (assets.LoadMap2D(mapId) != null)
            {
                return(new Map2D(mapId));
            }

            if (assets.LoadMap3D(mapId) != null)
            {
                return(new Map3D(mapId));
            }

            return(null);
        }
Ejemplo n.º 8
0
        public Map2D(MapDataId mapId, MapData2D mapData)
        {
            On <PlayerEnteredTileEvent>(OnPlayerEnteredTile);
            On <NpcEnteredTileEvent>(OnNpcEnteredTile);
            On <ChangeIconEvent>(ChangeIcon);
            On <MapInitEvent>(e => FireEventChains(TriggerType.MapInit, true));
            On <SlowClockEvent>(e => FireEventChains(TriggerType.EveryStep, false));
            On <HourElapsedEvent>(e => FireEventChains(TriggerType.EveryHour, true));
            On <DayElapsedEvent>(e => FireEventChains(TriggerType.EveryDay, true));
            On <DisableEventChainEvent>(e => _logicalMap.DisableChain(e.ChainNumber));
            On <PartyChangedEvent>(e => RebuildPartyMembers());
            // On<UnloadMapEvent>(e => Unload());

            MapId    = mapId;
            _mapData = mapData ?? throw new ArgumentNullException(nameof(mapData));
        }
Ejemplo n.º 9
0
        public void Update(MapDataId mapId, byte x, byte y, IconChangeType type, ushort value)
        {
            var change = this.FirstOrDefault(c =>
                                             c.MapId == mapId &&
                                             c.X == x &&
                                             c.Y == y &&
                                             c.ChangeType == type);

            if (change == null)
            {
                change = new MapChange {
                    MapId = mapId, X = x, Y = y, ChangeType = type
                };
                Add(change);
            }

            change.Value = value;
        }
Ejemplo n.º 10
0
        public InputBinder(InputConfig config)
        {
            On <InputEvent>(OnInput);
            On <LoadMapEvent>(e => _mapId = e.MapId);

            foreach (var rawMode in config.Bindings)
            {
                if (!_bindings.ContainsKey(rawMode.Key))
                {
                    _bindings.Add(rawMode.Key, new Dictionary <KeyBinding, string>());
                }

                var mode = _bindings[rawMode.Key];
                foreach (var rawBinding in rawMode.Value)
                {
                    var parts     = rawBinding.Key.Split('+').Select(x => x.Trim().ToLower()).ToArray();
                    Key key       = Key.LastKey;
                    var modifiers = ModifierKeys.None;
                    for (int i = 0; i < parts.Length; i++)
                    {
                        if (i == parts.Length - 1)
                        {
                            if (int.TryParse(parts[i], out var numeric))
                            {
                                key = Key.Number0 + numeric;
                            }
                            else
                            {
                                key = Enum.Parse <Key>(parts[i], true);
                            }
                        }
                        else
                        {
                            modifiers |= Enum.Parse <ModifierKeys>(parts[i], true);
                        }
                    }

                    if (key != Key.LastKey)
                    {
                        mode[new KeyBinding(key, modifiers)] = rawBinding.Value;
                    }
                }
            }
        }
Ejemplo n.º 11
0
        IMap BuildMap(MapDataId mapId)
        {
            var assets  = Resolve <IAssetManager>();
            var game    = Resolve <IGameState>();
            var mapData = assets.LoadMap(mapId);

            if (mapData == null)
            {
                return(null);
            }

            mapData.AttachEventSets(
                x => game.GetNpc(x),
                x => assets.LoadEventSet(x));

            return(mapData switch
            {
                MapData2D map2d => new Entities.Map2D.Map2D(mapId, map2d),
                MapData3D map3d => new Entities.Map3D.Map3D(mapId, map3d),
                _ => null
            });
Ejemplo n.º 12
0
 public TriggerChainEvent(EventChain chain, IEventNode node, TriggerType trigger, MapDataId mapId, int x, int y)
     : this(chain, node, new EventSource.Map(mapId, trigger, x, y))
 {
 }
Ejemplo n.º 13
0
 MapData2D(MapDataId id) : base(id)
 {
 }
Ejemplo n.º 14
0
 public MapData3D LoadMap3D(MapDataId id) => _assetLocator.LoadAssetCached(AssetType.MapData, id) as MapData3D;
Ejemplo n.º 15
0
 MapData3D(MapDataId id) : base(id)
 {
 }
Ejemplo n.º 16
0
 public Map2D(MapDataId mapId) : base(Handlers)
 {
     MapId = mapId;
 }
Ejemplo n.º 17
0
 public MapTextEvent(MapDataId mapId, byte textId, TextLocation?location, SmallPortraitId?portrait) : base(textId, location, portrait) => MapId = mapId;
Ejemplo n.º 18
0
 public EventFormatter(IAssetManager assets, MapDataId mapContext)
 {
     _assets     = assets;
     _mapContext = mapContext;
 }
Ejemplo n.º 19
0
 public TeleportEvent(MapDataId mapId, byte x, byte y)
 {
     MapId = mapId;
     X     = x;
     Y     = y;
 }
Ejemplo n.º 20
0
 public IMapData LoadMap(MapDataId id) => (IMapData)_assetLocatorRegistry.LoadAsset(id.ToAssetId()); // No caching for map data
Ejemplo n.º 21
0
 public NewGameEvent(MapDataId mapId, ushort x, ushort y)
 {
     MapId = mapId;
     X     = x;
     Y     = y;
 }
Ejemplo n.º 22
0
 public LoadMapEvent(MapDataId mapId)
 {
     MapId = mapId;
 }