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(); }
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); * }*/ }
public MapRenderable3D(MapDataId mapId, MapData3D mapData, LabyrinthData labyrinthData, Vector3 tileSize) : base(Handlers) { _mapId = mapId; _mapData = mapData; _labyrinthData = labyrinthData; _tileSize = tileSize; }
public Map(MapDataId mapId, TriggerType trigger, int x, int y) { MapId = mapId; Trigger = trigger; X = x; Y = y; }
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)); }
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; }
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); }
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)); }
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; }
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; } } } }
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 });
public TriggerChainEvent(EventChain chain, IEventNode node, TriggerType trigger, MapDataId mapId, int x, int y) : this(chain, node, new EventSource.Map(mapId, trigger, x, y)) { }
MapData2D(MapDataId id) : base(id) { }
public MapData3D LoadMap3D(MapDataId id) => _assetLocator.LoadAssetCached(AssetType.MapData, id) as MapData3D;
MapData3D(MapDataId id) : base(id) { }
public Map2D(MapDataId mapId) : base(Handlers) { MapId = mapId; }
public MapTextEvent(MapDataId mapId, byte textId, TextLocation?location, SmallPortraitId?portrait) : base(textId, location, portrait) => MapId = mapId;
public EventFormatter(IAssetManager assets, MapDataId mapContext) { _assets = assets; _mapContext = mapContext; }
public TeleportEvent(MapDataId mapId, byte x, byte y) { MapId = mapId; X = x; Y = y; }
public IMapData LoadMap(MapDataId id) => (IMapData)_assetLocatorRegistry.LoadAsset(id.ToAssetId()); // No caching for map data
public NewGameEvent(MapDataId mapId, ushort x, ushort y) { MapId = mapId; X = x; Y = y; }
public LoadMapEvent(MapDataId mapId) { MapId = mapId; }