Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ body:
- type: input
attributes:
label: RouteFilter version / RouteFilter 版本
placeholder: 0.4.0-beta.1
placeholder: 1.0.0
validations:
required: true
- type: input
Expand Down
62 changes: 62 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,68 @@

All notable changes follow [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and Semantic Versioning prerelease conventions.

## 1.0.0 — 2026-08-19

### Added

- Stable-release branding, public documentation, screenshot integration points, and official Paradox Mods publishing metadata.
- A viewport-aware panel layout that keeps selection, assets, paging, and application controls on one screen.

### Changed

- Opening or closing the RouteFilter panel now activates or closes the selection tool at the same time; the separate in-panel activation button was removed.
- Changed the default remappable panel shortcut from `Ctrl+Shift+X` to `Ctrl+Shift+N`.
- Promoted the verified asset-level V1 save schema and exact-asset enforcement workflow to the first stable release.

### 中文

- 新增正式版品牌素材、公开说明、游戏内截图接入位置及官方 Paradox Mods 发布元数据。
- 面板根据视口自适应,目标选择、资产列表、分页和应用按钮保持在同一页面。
- 面板开关与选择工具同步,不再保留面板内单独的工具启用按钮。
- 默认且可重新绑定的快捷键由 `Ctrl+Shift+X` 改为 `Ctrl+Shift+N`。
- 将已验证的逐资产 V1 存档结构和准确资产禁行流程发布为首个正式版本。

## 0.5.0-beta.1 — 2026-08-19

### Added

- Circular node outlines and dashed segment hover highlights.
- Contextual road/rail asset filtering based on the hovered network target.
- Hover details for maximum speed in km/h, acceleration, and braking.
- Expandable fixed-trailer and multiple-unit engine/carriage groups.
- Minimal line icons for the toolbar, road vehicles, rail vehicles, and trailers.

### Fixed

- Replaced per-frame catalog getters with event-driven value bindings.
- Replaced unsupported grid CSS with a scrollable flex layout compatible with the game UI engine.
- Added explicit forbidden/allowed wording; applying an empty forbidden list now intentionally allows all compatible assets.
- Changed editing to an explicit select → configure → apply workflow; right-click now cancels target selection.
- Fixed segment raycasts that hit owned lanes instead of the parent network edge.
- Isolated panel pointer input from the world tool and made asset/group controls independently clickable.
- Added fixed-height scrolling plus pagination, and made catalog-wide allow/forbid actions independent of filtering.
- Corrected maximum-speed presentation from metres per second to km/h.
- Loaded each target's saved forbidden list on selection instead of reusing a global-looking pending state.
- Expanded enforcement to current lanes, navigation lanes, path elements, network-node endpoints, and complete vehicle consists.
- Scheduled exact-asset enforcement after road/rail navigation and before vehicle movement.
- Reduced panel height and removed the redundant engine-group instruction line.

### 中文

- 新增节点圆形线框、路段虚线悬浮高亮,以及道路/轨道资产自动筛选。
- 新增资产参数悬浮信息、牵引车辆与车厢分组和简约线稿图标。
- 将每帧资产绑定改为事件驱动,并以可滚动 Flex 布局替代游戏 UI 不支持的 Grid。
- 明确“选中即禁行”的界面语义;明确应用空禁行清单时会放行全部兼容资产。
- 改为“选择目标 → 配置清单 → 明确应用”的交互,右键只取消目标选择。
- 修复射线命中路段子车道时无法解析到所属路段的问题。
- 隔离面板与地图工具的鼠标输入,并将资产圆形控件和分组展开控件拆分为独立操作。
- 新增固定高度滚动与分页兜底,全部禁行/放行不再受筛选条件影响。
- 将最高速度从米/秒正确换算为 km/h 显示。
- 选中目标时载入其独立保存的禁行清单,不再复用看似全图共享的暂存状态。
- 将执行检测扩展到当前车道、导航车道、路径元素、路段端点节点和完整车辆编组。
- 将逐资产拦截明确安排在道路/轨道导航之后、车辆移动之前。
- 缩短面板并删除重复的编组操作说明行。

## 0.4.0-beta.1 — 2026-08-19

### Added
Expand Down
6 changes: 5 additions & 1 deletion Mod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace RouteFilter;
public sealed class Mod : IMod
{
public const string Id = "RouteFilter";
public const string Version = "0.4.0-beta.1";
public const string Version = "1.0.0";
public const string ToggleToolAction = "ToggleRestrictionTool";
public const string ApplyAction = "ApplyRestriction";
public const string ClearAction = "ClearRestriction";
Expand Down Expand Up @@ -52,9 +52,13 @@ public void OnLoad(UpdateSystem updateSystem)

updateSystem.UpdateAt<RestrictionShortcutSystem>(SystemUpdatePhase.ToolUpdate);
updateSystem.UpdateAt<RestrictionToolSystem>(SystemUpdatePhase.ToolUpdate);
updateSystem.UpdateAfter<RestrictionOverlaySystem, RestrictionToolSystem>(SystemUpdatePhase.ToolUpdate);
updateSystem.UpdateAt<RouteFilterUISystem>(SystemUpdatePhase.UIUpdate);
updateSystem.UpdateAfter<RestrictionPathSystem, Game.Pathfind.LanesModifiedSystem>(SystemUpdatePhase.ModificationEnd);
updateSystem.UpdateAfter<VehicleAccessSystem, Game.Simulation.CarNavigationSystem>(SystemUpdatePhase.GameSimulation);
updateSystem.UpdateAfter<VehicleAccessSystem, Game.Simulation.TrainNavigationSystem>(SystemUpdatePhase.GameSimulation);
updateSystem.UpdateBefore<VehicleAccessSystem, Game.Simulation.CarMoveSystem>(SystemUpdatePhase.GameSimulation);
updateSystem.UpdateBefore<VehicleAccessSystem, Game.Simulation.TrainMoveSystem>(SystemUpdatePhase.GameSimulation);
updateSystem.UpdateAfter<VehicleDetourSystem, VehicleAccessSystem>(SystemUpdatePhase.GameSimulation);
}

Expand Down
51 changes: 46 additions & 5 deletions Properties/PublishConfiguration.xml
Original file line number Diff line number Diff line change
@@ -1,10 +1,51 @@
<Publish>
<!-- Add <ModId Value="..." /> after the first successful Paradox Mods submission. -->
<DisplayName Value="RouteFilter" />
<ShortDescription Value="Asset-level vehicle restrictions for road and rail nodes or segments" />
<LongDescription>RouteFilter lets Cities: Skylines II players restrict individual vehicle assets at a network node or across an entire road or rail segment. Matching vehicles request a different route when the restriction is detected ahead.</LongDescription>
<ShortDescription Value="Exact vehicle-asset access restrictions for road and rail nodes or segments" />
<LongDescription># RouteFilter

RouteFilter gives Cities: Skylines II players precise control over which vehicle assets may use a selected road or rail node or an entire network segment.

## Main features

- Restrict exact road, tram, train, subway, carriage, trailer, and outside-traffic assets.
- Keep an independent forbidden list on every selected node or segment.
- Filter the catalog automatically for the selected road or rail target.
- Search assets and inspect maximum speed, acceleration, and braking.
- Group recognized engines and trailers while retaining individual control.
- Request a new route through the native pathfinder when a matching vehicle approaches.
- Stop matching vehicles when a fixed route has no valid alternative.
- Save restrictions with the city and switch automatically between English and Simplified Chinese.

## Basic use

Open the RouteFilter panel from the top-left toolbar or press Ctrl+Shift+N. Select Node or Segment, left-click a network target, choose the assets that should be forbidden, then apply the list to the selected target. Right-click cancels target selection.

Bulk allow/forbid actions edit only the pending list. They do not change the map until the explicit apply button is pressed.

## Important notes

Technical prefab names may not have localized display names. Rebuilding a network segment can replace its game entity and remove restrictions attached to the original. RouteFilter cannot redraw a fixed public-transport line; when no valid detour exists, the affected vehicle stops and may retry.

RouteFilter is an independent GPL-3.0-only community project by Daotie. It is not affiliated with or endorsed by Colossal Order or Paradox Interactive.</LongDescription>
<Thumbnail Value="Properties/Thumbnail.png" />
<!-- Add screenshots after replacing the documented files under Properties/Screenshots. -->
<!-- <Screenshot Value="Properties/Screenshots/01-target-selection.png" /> -->
<!-- <Screenshot Value="Properties/Screenshots/02-asset-catalog.png" /> -->
<!-- <Screenshot Value="Properties/Screenshots/03-apply-restriction.png" /> -->
<!-- <Screenshot Value="Properties/Screenshots/04-rerouting-result.png" /> -->
<Tag Value="Code Mod" />
<Tag Value="Traffic" />
<ModVersion Value="0.4.0-beta.1" />
<GameVersion Value="1.*" />
<ChangeLog>Added searchable, asset-level vehicle selection and a clean V1 save-data schema.</ChangeLog>
<ModVersion Value="1.0.0" />
<GameVersion Value="1.5.*" />
<ChangeLog>## RouteFilter 1.0.0

- First stable release.
- Opens the panel and selection tool together; default shortcut is Ctrl+Shift+N.
- Keeps the asset list and application controls visible in one viewport-aware panel.
- Supports exact asset restrictions on road and rail nodes or full segments.
- Matches complete recognized vehicle consists, fixed-route rail vehicles, and outside traffic.
- Requests native pathfinding detours and stops matching vehicles when no alternative exists.
- Preserves the asset-level V1 save schema used by the public beta.</ChangeLog>
<ExternalLink Type="github" Url="https://github.com/Daotie/CS2-RouteFilter" />
</Publish>
12 changes: 12 additions & 0 deletions Properties/PublishProfiles/PublishNewMod.pubxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishProtocol>FileSystem</PublishProtocol>
<_TargetId>Folder</_TargetId>
<TargetFramework>net48</TargetFramework>
<PublishDir>bin\$(Configuration)\$(TargetFramework)\</PublishDir>
<ModPublisherCommand>Publish</ModPublisherCommand>
</PropertyGroup>
</Project>
12 changes: 12 additions & 0 deletions Properties/PublishProfiles/PublishNewVersion.pubxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishProtocol>FileSystem</PublishProtocol>
<_TargetId>Folder</_TargetId>
<TargetFramework>net48</TargetFramework>
<PublishDir>bin\$(Configuration)\$(TargetFramework)\</PublishDir>
<ModPublisherCommand>NewVersion</ModPublisherCommand>
</PropertyGroup>
</Project>
12 changes: 12 additions & 0 deletions Properties/PublishProfiles/UpdateCurrentVersion.pubxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishProtocol>FileSystem</PublishProtocol>
<_TargetId>Folder</_TargetId>
<TargetFramework>net48</TargetFramework>
<PublishDir>bin\$(Configuration)\$(TargetFramework)\</PublishDir>
<ModPublisherCommand>Update</ModPublisherCommand>
</PropertyGroup>
</Project>
18 changes: 18 additions & 0 deletions Properties/Screenshots/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Paradox Mods screenshots

Before the first Paradox Mods submission, add public gameplay screenshots with these filenames:

1. `01-target-selection.png` — highlighted node and segment selection.
2. `02-asset-catalog.png` — compatible asset filtering, selection, and hover statistics.
3. `03-apply-restriction.png` — target-specific pending list and apply controls.
4. `04-rerouting-result.png` — a matching vehicle stopped or taking a valid detour.

Recommended preparation:

- Use the same current game and RouteFilter version for all screenshots.
- Capture at a readable UI scale without unrelated debug overlays or personal account information.
- Prefer 16:9 images and keep the RouteFilter UI legible after thumbnail scaling.
- Do not imply that a fixed public-transport route is automatically redrawn.
- After adding the files, uncomment the matching `<Screenshot>` entries in `PublishConfiguration.xml`.

README presentation copies belong under `assets/screenshots` using the same filenames.
Binary file added Properties/Thumbnail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading