New REM client: REM-Client bcdd352, 64-bit (module bases: Modules tab in the base manager - slots, building, delivering wares; docking at player-built stations with Deck and Bar, the top bar after the modules, the commodity dealer opens the station's market; themes reach every element, theme designer with ini import / export; Galactic Market in the base manager opens the market window; countermeasures drop by themselves on a REM server; nav map tool menu and bookmarks on the server; mouse buttons bind again in the options; HUD editor fixes; PM tabs stay one when the partner goes AFK)
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+50
-3
@@ -119,8 +119,7 @@
|
|||||||
<div class="nav">
|
<div class="nav">
|
||||||
<div class="item" data-class-active="page == 0" data-action="page" data-arg="0"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_cargo.3db"/><span>Depot</span><span class="badge" data-if="depot.size > 0">{{ depot.size }}</span></div>
|
<div class="item" data-class-active="page == 0" data-action="page" data-arg="0"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_cargo.3db"/><span>Depot</span><span class="badge" data-if="depot.size > 0">{{ depot.size }}</span></div>
|
||||||
<div class="item" data-class-active="page == 1" data-action="page" data-arg="1"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_cargo.3db"/><span>All depots</span></div>
|
<div class="item" data-class-active="page == 1" data-action="page" data-arg="1"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_cargo.3db"/><span>All depots</span></div>
|
||||||
<div class="item" data-class-active="page == 2" data-action="page" data-arg="2"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_economy.3db"/><span>Market</span></div>
|
<div class="item" data-action="open-market"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_economy.3db"/><span>Galactic Market</span><div class="tip">Buy and sell orders, the order book, prices and their history (opens the market window).</div></div>
|
||||||
<div class="item" data-class-active="page == 3" data-action="page" data-arg="3"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_economy.3db"/><span>Sell</span></div>
|
|
||||||
<div class="sep"></div>
|
<div class="sep"></div>
|
||||||
<div class="item" data-class-active="page == 4" data-action="page" data-arg="4"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_crafting.3db"/><span>Crafting</span><span class="badge" data-if="craft_jobs.size > 0">{{ craft_jobs.size }}</span></div>
|
<div class="item" data-class-active="page == 4" data-action="page" data-arg="4"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_crafting.3db"/><span>Crafting</span><span class="badge" data-if="craft_jobs.size > 0">{{ craft_jobs.size }}</span></div>
|
||||||
<div class="item" data-class-active="page == 5" data-action="page" data-arg="5"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_rank.3db"/><span>Research</span><span class="badge" data-if="research_jobs.size > 0">{{ research_jobs.size }}</span></div>
|
<div class="item" data-class-active="page == 5" data-action="page" data-arg="5"><img class="ico" src="3db:INTERFACE/REM/IMAGES/icon_rank.3db"/><span>Research</span><span class="badge" data-if="research_jobs.size > 0">{{ research_jobs.size }}</span></div>
|
||||||
@@ -401,10 +400,11 @@
|
|||||||
<div class="hint">{{ obj_line }}</div>
|
<div class="hint">{{ obj_line }}</div>
|
||||||
<div class="bar" data-if="obj_bar >= 0" style="margin-top: 8dp;"><div class="fill" data-style-width="obj_bar + '%'"></div></div>
|
<div class="bar" data-if="obj_bar >= 0" style="margin-top: 8dp;"><div class="fill" data-style-width="obj_bar + '%'"></div></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="subtabs" data-if="obj_picked && (obj_site || obj_edit)">
|
<div class="subtabs" data-if="obj_picked && (obj_site || obj_edit || mod_has)">
|
||||||
<div class="tab" data-if="obj_site" data-class-active="sys_view == 0" data-action="sys-view" data-arg="0">Wares</div>
|
<div class="tab" data-if="obj_site" data-class-active="sys_view == 0" data-action="sys-view" data-arg="0">Wares</div>
|
||||||
<div class="tab" data-class-active="sys_view == 1" data-action="sys-view" data-arg="1">Rules</div>
|
<div class="tab" data-class-active="sys_view == 1" data-action="sys-view" data-arg="1">Rules</div>
|
||||||
<div class="tab" data-if="!obj_site && obj_edit" data-class-active="sys_view == 2" data-action="sys-view" data-arg="2">Loadout</div>
|
<div class="tab" data-if="!obj_site && obj_edit" data-class-active="sys_view == 2" data-action="sys-view" data-arg="2">Loadout</div>
|
||||||
|
<div class="tab" data-if="!obj_site && mod_has" data-class-active="sys_view == 3" data-action="sys-view" data-arg="3">Modules</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- wares of a site -->
|
<!-- wares of a site -->
|
||||||
<div class="pane" data-if="obj_site && sys_view == 0">
|
<div class="pane" data-if="obj_site && sys_view == 0">
|
||||||
@@ -444,6 +444,53 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- modules of a station with slots -->
|
||||||
|
<div class="page" data-if="obj_picked && !obj_site && mod_has && sys_view == 3">
|
||||||
|
<div class="colm gap">
|
||||||
|
<div class="table grow">
|
||||||
|
<div class="head"><span class="c1">Slot</span><span class="c2">Module</span><span class="c3">State</span></div>
|
||||||
|
<div class="body">
|
||||||
|
<div class="row" data-for="r : mslots" data-class-selected="r.selected" data-action="pick-mslot" data-attr-data-arg="r.key"><span class="c1">{{ r.a }}</span><span class="c2">{{ r.b }}</span><span class="c3">{{ r.c }}</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="hint" style="margin-top: 8dp;">{{ mod_hint }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="colm">
|
||||||
|
<div class="panel">
|
||||||
|
<div class="t">{{ mod_title }}</div>
|
||||||
|
<div class="hint">{{ mod_line }}</div>
|
||||||
|
<div class="bar" data-if="mod_bar >= 0" style="margin-top: 8dp;"><div class="fill" data-style-width="mod_bar + '%'"></div></div>
|
||||||
|
</div>
|
||||||
|
<!-- an empty slot: the modules that fit -->
|
||||||
|
<div class="colm" data-if="mod_mode == 1">
|
||||||
|
<div class="table grow">
|
||||||
|
<div class="head"><span class="c1">Module</span><span class="c2">Price</span><span class="c3"></span></div>
|
||||||
|
<div class="body">
|
||||||
|
<div class="empty" data-if="mtypes.size == 0">Nothing fits this slot.</div>
|
||||||
|
<div class="row" data-for="r : mtypes" data-class-selected="r.selected" data-class-short="r.short" data-action="pick-mtype" data-attr-data-arg="r.key"><span class="c1">{{ r.a }}</span><span class="c2">{{ r.b }}</span><span class="c3">{{ r.c }}</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="label" style="margin-top: 8dp;">Wares</div>
|
||||||
|
<div class="hint" data-if="mtype_wares.size == 0">No wares needed.</div>
|
||||||
|
<div class="ware" data-for="w : mtype_wares"><span>{{ w.a }}</span><span class="n">{{ w.b }}</span></div>
|
||||||
|
<div class="actions" data-if="obj_edit"><div class="btn" data-class-primary="mod_can_build" data-action="mod-build">{{ mod_build_text }}<div class="tip">Puts the module into the slot (the price from your money); then deliver its wares.</div></div></div>
|
||||||
|
</div>
|
||||||
|
<!-- a module waiting for wares -->
|
||||||
|
<div class="colm" data-if="mod_mode == 2">
|
||||||
|
<div class="table grow">
|
||||||
|
<div class="head"><span class="c1">Ware</span><span class="c2">Delivered</span><span class="c3">In hold</span></div>
|
||||||
|
<div class="body">
|
||||||
|
<div class="row" data-for="r : mneeds" data-class-selected="r.selected" data-action="pick-mneed" data-attr-data-arg="r.key"><span class="c1">{{ r.a }}</span><span class="c2">{{ r.b }}</span><span class="c3">{{ r.c }}</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div data-if="mod_can_deliver">
|
||||||
|
<div class="amount"><span class="label">Amount</span><input class="range" type="range" min="1" step="1" data-attr-max="mod_qty_max" data-value="mod_qty"/><span class="v">{{ mod_qty_text }}</span></div>
|
||||||
|
<div class="actions"><div class="btn primary" data-action="mod-deliver">Deliver<div class="tip">Hands the amount of the picked ware from your hold to the module.</div></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="actions" data-if="obj_edit && mod_mode >= 2"><div class="btn danger" data-class-primary="mod_remove_armed" data-action="mod-remove">{{ mod_remove_text }}<div class="tip">Takes the module out of the slot. Modules are no wares yet: what went into it is lost.</div></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<!-- loadout of a built object (its owner) -->
|
<!-- loadout of a built object (its owner) -->
|
||||||
<div class="page" data-if="obj_picked && !obj_site && obj_edit && sys_view == 2">
|
<div class="page" data-if="obj_picked && !obj_site && obj_edit && sys_view == 2">
|
||||||
<div class="colm gap">
|
<div class="colm gap">
|
||||||
|
|||||||
@@ -15,9 +15,12 @@
|
|||||||
.gear:hover { image-color: #f2b13c; }
|
.gear:hover { image-color: #f2b13c; }
|
||||||
.caret { color: #f2d23c; animation: 1s steps(1) infinite blink; }
|
.caret { color: #f2d23c; animation: 1s steps(1) infinite blink; }
|
||||||
@keyframes blink { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }
|
@keyframes blink { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }
|
||||||
|
.edit-grip { display: none; position: absolute; left: 0; top: 0; padding: 2dp 8dp; background-color: #f2b13c; color: #05080d; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 13dp; border-radius: 3dp; white-space: nowrap; drag: drag; cursor: move; pointer-events: auto; z-index: 10; }
|
||||||
|
.hud-editing .edit-grip { display: block; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body class="feed" data-model="chatfeed">
|
<body class="feed movable" data-model="chatfeed">
|
||||||
|
<div class="win-head edit-grip">Chat ✥</div>
|
||||||
<div class="lines" data-if="feed_shown" data-rml="feed"></div>
|
<div class="lines" data-if="feed_shown" data-rml="feed"></div>
|
||||||
<div class="line" data-if="typing">
|
<div class="line" data-if="typing">
|
||||||
<span class="p" data-rml="prefix"></span><span class="t">{{ text }}<span class="caret">|</span></span>
|
<span class="p" data-rml="prefix"></span><span class="t">{{ text }}<span class="caret">|</span></span>
|
||||||
|
|||||||
+4
-4
@@ -83,11 +83,12 @@
|
|||||||
.grp.gone { display: none; }
|
.grp.gone { display: none; }
|
||||||
.grp.faded { opacity: 0.35; }
|
.grp.faded { opacity: 0.35; }
|
||||||
.editing .fp { border-color: #f2b13c; background-color: #2a1f0ae6; drag: drag; cursor: move; }
|
.editing .fp { border-color: #f2b13c; background-color: #2a1f0ae6; drag: drag; cursor: move; }
|
||||||
|
.editing .tag { drag: drag; cursor: move; }
|
||||||
.editing .fp * { pointer-events: none; }
|
.editing .fp * { pointer-events: none; }
|
||||||
.tag { position: absolute; padding: 3dp 8dp; background-color: #f2b13c; color: #05080d; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 14dp; border-radius: 3dp; white-space: nowrap; }
|
.tag { position: absolute; padding: 3dp 8dp; background-color: #f2b13c; color: #05080d; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 14dp; border-radius: 3dp; white-space: nowrap; }
|
||||||
.tag .eye { margin-right: 8dp; padding: 0 6dp; background-color: #05080d; color: #f2b13c; border-radius: 2dp; }
|
.tag .eye { margin-right: 8dp; padding: 0 6dp; background-color: #05080d; color: #f2b13c; border-radius: 2dp; }
|
||||||
.tag .eye:hover { color: #ffffff; }
|
.tag .eye:hover { color: #ffffff; }
|
||||||
.edbar { position: absolute; left: 50%; margin-left: -300dp; top: 190dp; width: 600dp; padding: 14dp 18dp; background-color: #070b12f2; border: 2dp #f2b13c; border-radius: 6dp; text-align: center; }
|
.edbar { position: absolute; left: 50%; margin-left: -300dp; top: 190dp; width: 600dp; padding: 14dp 18dp; background-color: #070b12f2; border: 2dp #f2b13c; border-radius: 6dp; text-align: center; pointer-events: auto; }
|
||||||
.edbar .et { font-family: "Saira SemiCondensed"; font-weight: 700; font-size: 20dp; letter-spacing: 2dp; color: #f2b13c; }
|
.edbar .et { font-family: "Saira SemiCondensed"; font-weight: 700; font-size: 20dp; letter-spacing: 2dp; color: #f2b13c; }
|
||||||
.edbar .eh { margin: 6dp 0 12dp 0; font-size: 14dp; color: #b9cbe0; }
|
.edbar .eh { margin: 6dp 0 12dp 0; font-size: 14dp; color: #b9cbe0; }
|
||||||
.edbar .eb { display: flex; flex-direction: row; justify-content: center; }
|
.edbar .eb { display: flex; flex-direction: row; justify-content: center; }
|
||||||
@@ -182,10 +183,9 @@
|
|||||||
<!-- the HUD editor's bar -->
|
<!-- the HUD editor's bar -->
|
||||||
<div class="edbar" data-if="editing">
|
<div class="edbar" data-if="editing">
|
||||||
<div class="et">CUSTOMIZE HUD</div>
|
<div class="et">CUSTOMIZE HUD</div>
|
||||||
<div class="eh">Drag a part to move it · mouse wheel over it to size it · Hide / Show on its label. Parts snap to their home place.</div>
|
<div class="eh">Drag a part or its label to move it · mouse wheel over it to size it · Hide / Show on its label · the REM bars, the radar and the chat by their tags. Parts snap to their home place.</div>
|
||||||
<div class="eb">
|
<div class="eb">
|
||||||
<div class="btn" data-action="ed_reset">Reset HUD</div>
|
<div class="btn" data-action="ed_reset">Reset all</div>
|
||||||
<div class="btn" data-action="ed_resetwin">Reset window places</div>
|
|
||||||
<div class="btn" data-action="ed_cancel">Cancel</div>
|
<div class="btn" data-action="ed_cancel">Cancel</div>
|
||||||
<div class="btn primary" data-action="ed_save">Save</div>
|
<div class="btn primary" data-action="ed_save">Save</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -59,6 +59,11 @@
|
|||||||
.hit .hk { font-size: 12dp; color: #8197ad; }
|
.hit .hk { font-size: 12dp; color: #8197ad; }
|
||||||
.bookmark .s { left: -6dp; top: -6dp; width: 12dp; height: 12dp; background-color: #f2b13c; border: 2dp #05080d; border-radius: 6dp; }
|
.bookmark .s { left: -6dp; top: -6dp; width: 12dp; height: 12dp; background-color: #f2b13c; border: 2dp #05080d; border-radius: 6dp; }
|
||||||
.bookmark .lbl { color: #f2b13c; }
|
.bookmark .lbl { color: #f2b13c; }
|
||||||
|
.bookmark.locked .s { border-color: #f2b13c; background-color: #8a6420; }
|
||||||
|
.bookmark.sel .s { border-color: #ffffff; }
|
||||||
|
.hit .mk { margin-left: 6dp; padding: 0 6dp; font-size: 11dp; color: #8197ad; border: 1dp #24405c; border-radius: 2dp; }
|
||||||
|
.hit .mk:hover { color: #f2b13c; border-color: #f2b13c; }
|
||||||
|
.hit .mk.del:hover { color: #ef6a5b; border-color: #ef6a5b; }
|
||||||
.waypoint .s { left: -7dp; top: -7dp; width: 14dp; height: 14dp; border: 2dp #f2b13c; border-radius: 2dp; }
|
.waypoint .s { left: -7dp; top: -7dp; width: 14dp; height: 14dp; border: 2dp #f2b13c; border-radius: 2dp; }
|
||||||
.waypoint .lbl, .bestpath .lbl { left: -4dp; top: -7dp; font-family: "IBM Plex Mono"; font-size: 10dp; color: #f2b13c; }
|
.waypoint .lbl, .bestpath .lbl { left: -4dp; top: -7dp; font-family: "IBM Plex Mono"; font-size: 10dp; color: #f2b13c; }
|
||||||
.bestpath .s { left: -6dp; top: -6dp; width: 12dp; height: 12dp; border: 2dp #5cc8f0; border-radius: 6dp; }
|
.bestpath .s { left: -6dp; top: -6dp; width: 12dp; height: 12dp; border: 2dp #5cc8f0; border-radius: 6dp; }
|
||||||
@@ -116,6 +121,9 @@
|
|||||||
<div class="pb" data-if="can_target" data-action="tool" data-arg="target">Target</div>
|
<div class="pb" data-if="can_target" data-action="tool" data-arg="target">Target</div>
|
||||||
<div class="pb" data-if="can_info" data-action="tool" data-arg="info">Info</div>
|
<div class="pb" data-if="can_info" data-action="tool" data-arg="info">Info</div>
|
||||||
<div class="pb" data-if="can_clear" data-action="tool" data-arg="clearwp">Remove waypoint</div>
|
<div class="pb" data-if="can_clear" data-action="tool" data-arg="clearwp">Remove waypoint</div>
|
||||||
|
<div class="pb" data-if="can_mark" data-action="bookmark">Set bookmark</div>
|
||||||
|
<div class="pb" data-if="pick_mark" data-action="mark_lock">{{ mark_locked ? 'Unlock bookmark' : 'Lock bookmark' }}</div>
|
||||||
|
<div class="pb" data-if="pick_mark && !mark_locked" data-action="mark_del">Delete bookmark</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="zoom">
|
<div class="zoom">
|
||||||
<span class="v">{{ zoom }}</span>
|
<span class="v">{{ zoom }}</span>
|
||||||
@@ -153,7 +161,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="marks" data-if="bookmarks.size > 0 && search == ''">
|
<div class="marks" data-if="bookmarks.size > 0 && search == ''">
|
||||||
<h3>Bookmarks</h3>
|
<h3>Bookmarks</h3>
|
||||||
<div class="hit" data-for="b : bookmarks" data-action="gomark" data-ctx="mark" data-attr-data-arg="b.key"><span class="hn">{{ b.name }}</span></div>
|
<div class="hit" data-for="b : bookmarks" data-action="gomark" data-ctx="mark" data-attr-data-arg="b.key"><span class="hn">{{ b.name }}</span><span class="mk" data-action="mark_lock" data-attr-data-arg="b.key">{{ b.kind == 'locked' ? 'Unlock' : 'Lock' }}<span class="tip">{{ b.kind == 'locked' ? 'Locked: it can be neither moved nor deleted. Click to unlock.' : 'Lock it in place: no moving, no deleting.' }}</span></span><span class="mk del" data-if="b.kind != 'locked'" data-action="mark_del" data-attr-data-arg="b.key">×</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pcard" data-if="!has_pick"><div class="k">Click the map to pick a place. Wheel zooms, drag moves, double click opens a system.</div></div>
|
<div class="pcard" data-if="!has_pick"><div class="k">Click the map to pick a place. Wheel zooms, drag moves, double click opens a system.</div></div>
|
||||||
<div class="objs" data-if="objectives.size > 0">
|
<div class="objs" data-if="objectives.size > 0">
|
||||||
|
|||||||
+4
-1
@@ -16,9 +16,12 @@
|
|||||||
.nb img { transform: perspective(240dp) rotateY(0deg) scale(1); transition: transform 0.2s cubic-out; }
|
.nb img { transform: perspective(240dp) rotateY(0deg) scale(1); transition: transform 0.2s cubic-out; }
|
||||||
.nb.active img { image-color: #f2b13c; }
|
.nb.active img { image-color: #f2b13c; }
|
||||||
.nb .tip { top: 40dp; right: 0; left: auto; bottom: auto; width: 230dp; white-space: normal; text-align: right; }
|
.nb .tip { top: 40dp; right: 0; left: auto; bottom: auto; width: 230dp; white-space: normal; text-align: right; }
|
||||||
|
.edit-grip { display: none; position: absolute; left: 0; top: 0; padding: 2dp 8dp; background-color: #f2b13c; color: #05080d; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 13dp; border-radius: 3dp; white-space: nowrap; drag: drag; cursor: move; pointer-events: auto; z-index: 10; }
|
||||||
|
.hud-editing .edit-grip { display: block; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body class="nnstrip" data-model="nnbar">
|
<body class="nnstrip movable" data-model="nnbar">
|
||||||
|
<div class="win-head edit-grip">NeuroNet bar ✥</div>
|
||||||
<div class="nnbar" data-if="shown" data-style-width="icons.size * 42 + 12 + 'dp'">
|
<div class="nnbar" data-if="shown" data-style-width="icons.size * 42 + 12 + 'dp'">
|
||||||
<div class="nb" data-for="i : icons" data-class-active="i.active" data-action="nn" data-attr-data-arg="i.cmd">
|
<div class="nb" data-for="i : icons" data-class-active="i.active" data-action="nn" data-attr-data-arg="i.cmd">
|
||||||
<img data-attr-src="i.icon"/>
|
<img data-attr-src="i.icon"/>
|
||||||
|
|||||||
@@ -98,6 +98,7 @@
|
|||||||
<span class="v">{{ r.value }}</span>
|
<span class="v">{{ r.value }}</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="v" data-if="r.kind == 3">{{ r.value }}</span>
|
<span class="v" data-if="r.kind == 3">{{ r.value }}</span>
|
||||||
|
<div class="btn" data-if="r.kind == 4" data-action="open-window" data-attr-data-arg="r.value">Open</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+4
-1
@@ -21,9 +21,12 @@
|
|||||||
radar { display: block; position: absolute; left: 0; top: 0; right: 0; bottom: 0; }
|
radar { display: block; position: absolute; left: 0; top: 0; right: 0; bottom: 0; }
|
||||||
.lbl { position: absolute; font-size: 12dp; white-space: nowrap; pointer-events: none; }
|
.lbl { position: absolute; font-size: 12dp; white-space: nowrap; pointer-events: none; }
|
||||||
.fwd { position: absolute; left: 50%; margin-left: -4dp; top: 4dp; font-family: "IBM Plex Mono"; font-size: 10dp; color: #f2b13c; pointer-events: none; }
|
.fwd { position: absolute; left: 50%; margin-left: -4dp; top: 4dp; font-family: "IBM Plex Mono"; font-size: 10dp; color: #f2b13c; pointer-events: none; }
|
||||||
|
.edit-grip { display: none; position: absolute; left: 0; top: 0; padding: 2dp 8dp; background-color: #f2b13c; color: #05080d; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 13dp; border-radius: 3dp; white-space: nowrap; drag: drag; cursor: move; pointer-events: auto; z-index: 10; }
|
||||||
|
.hud-editing .edit-grip { display: block; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body class="radar" data-model="radar">
|
<body class="radar movable" data-model="radar">
|
||||||
|
<div class="win-head edit-grip">Radar ✥</div>
|
||||||
<div class="frame">
|
<div class="frame">
|
||||||
<div class="head">
|
<div class="head">
|
||||||
<span class="title">RADAR</span><span class="count">{{ count }}</span>
|
<span class="title">RADAR</span><span class="count">{{ count }}</span>
|
||||||
|
|||||||
@@ -16,9 +16,12 @@
|
|||||||
.nb img { transform: perspective(240dp) rotateY(0deg) scale(1); transition: transform 0.2s cubic-out; }
|
.nb img { transform: perspective(240dp) rotateY(0deg) scale(1); transition: transform 0.2s cubic-out; }
|
||||||
.nb.active img { image-color: #f2b13c; }
|
.nb.active img { image-color: #f2b13c; }
|
||||||
.nb .tip { top: 40dp; left: 0; right: auto; bottom: auto; width: 230dp; white-space: normal; }
|
.nb .tip { top: 40dp; left: 0; right: auto; bottom: auto; width: 230dp; white-space: normal; }
|
||||||
|
.edit-grip { display: none; position: absolute; left: 0; top: 0; padding: 2dp 8dp; background-color: #f2b13c; color: #05080d; font-family: "Saira SemiCondensed"; font-weight: 600; font-size: 13dp; border-radius: 3dp; white-space: nowrap; drag: drag; cursor: move; pointer-events: auto; z-index: 10; }
|
||||||
|
.hud-editing .edit-grip { display: block; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body class="nnstrip" data-model="rembar">
|
<body class="nnstrip movable" data-model="rembar">
|
||||||
|
<div class="win-head edit-grip">REM bar ✥</div>
|
||||||
<div class="nnbar" data-if="shown" data-style-width="icons.size * 42 + 12 + 'dp'">
|
<div class="nnbar" data-if="shown" data-style-width="icons.size * 42 + 12 + 'dp'">
|
||||||
<div class="nb" data-for="i : icons" data-class-active="i.active" data-action="nn" data-attr-data-arg="i.cmd">
|
<div class="nb" data-for="i : icons" data-class-active="i.active" data-action="nn" data-attr-data-arg="i.cmd">
|
||||||
<img data-attr-src="i.icon"/>
|
<img data-attr-src="i.icon"/>
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
<rml>
|
||||||
|
<head>
|
||||||
|
<title>Interface colours</title>
|
||||||
|
<link type="text/rcss" href="rem.rcss"/>
|
||||||
|
<style>
|
||||||
|
body.window.themes { left: 50%; margin-left: -470dp; top: 8%; width: 940dp; height: 720dp; }
|
||||||
|
.cols { flex: 1; min-height: 0; display: flex; flex-direction: row; }
|
||||||
|
.left { width: 430dp; margin-right: 18dp; overflow-y: auto; }
|
||||||
|
.right { flex: 1; min-width: 0; display: flex; flex-direction: column; }
|
||||||
|
.right .scroll { flex: 1; min-height: 0; overflow-y: auto; padding-right: 8dp; }
|
||||||
|
h3 { margin: 0 0 8dp 0; }
|
||||||
|
.role { display: flex; flex-direction: row; align-items: center; padding: 3dp 8dp; border: 1dp #24405c; border-radius: 3dp; margin-bottom: 3dp; background-color: #0d1622; cursor: pointer; }
|
||||||
|
.role:hover { background-color: #122033; }
|
||||||
|
.role.sel { border-color: #f2b13c; }
|
||||||
|
.role .c { width: 34dp; height: 16dp; border: 1dp #ffffff40; border-radius: 3dp; margin-right: 10dp; }
|
||||||
|
.role .l { flex: 1; font-size: 15dp; }
|
||||||
|
.role .h { font-family: "IBM Plex Mono"; font-size: 14dp; color: #8197ad; }
|
||||||
|
.sec { margin-bottom: 12dp; }
|
||||||
|
.chips { display: flex; flex-direction: row; flex-wrap: wrap; }
|
||||||
|
.chip2 { padding: 5dp 10dp; margin: 0 6dp 6dp 0; border: 1dp #3d6d96; border-radius: 3dp; font-size: 14dp; cursor: pointer; }
|
||||||
|
.chip2:hover { border-color: #f2b13c; }
|
||||||
|
.sws { display: flex; flex-direction: row; flex-wrap: wrap; margin-top: 8dp; }
|
||||||
|
.sw { width: 24dp; height: 24dp; margin: 0 6dp 6dp 0; border: 2dp #00000000; border-radius: 4dp; cursor: pointer; }
|
||||||
|
.sw .c { width: 100%; height: 100%; border-radius: 2dp; }
|
||||||
|
.sw:hover { border-color: #f2b13c; }
|
||||||
|
.line { display: flex; flex-direction: row; align-items: center; margin-top: 8dp; }
|
||||||
|
.line .label { width: 110dp; font-size: 14dp; color: #8197ad; }
|
||||||
|
.line input.text { flex: 1; }
|
||||||
|
.line input.range { flex: 1; }
|
||||||
|
.line .v { width: 56dp; text-align: right; font-family: "IBM Plex Mono"; font-size: 14dp; }
|
||||||
|
.line .btn { margin: 0 0 0 8dp; }
|
||||||
|
.preview { display: flex; flex-direction: row; height: 46dp; margin-top: 8dp; border-radius: 3dp; overflow: hidden; }
|
||||||
|
.preview div { flex: 1; }
|
||||||
|
.file { display: flex; flex-direction: row; align-items: center; padding: 5dp 8dp; border-bottom: 1dp #ffffff10; cursor: pointer; font-size: 14dp; }
|
||||||
|
.file:hover { background-color: #122033; }
|
||||||
|
.file .l { flex: 1; }
|
||||||
|
.foot2 { flex: 0 0 auto; display: flex; flex-direction: row; align-items: center; margin-top: 10dp; padding-top: 10dp; border-top: 1dp #24405c; }
|
||||||
|
.foot2 .hint { flex: 1; font-size: 13dp; color: #8197ad; }
|
||||||
|
.foot2 .btn { margin: 0 0 0 8dp; }
|
||||||
|
.muted { font-size: 13dp; color: #8197ad; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body class="window themes" data-model="themes">
|
||||||
|
<div class="win-head">
|
||||||
|
<img class="head-ico" src="img/gear.png"/>
|
||||||
|
<span class="title">INTERFACE COLOURS - THEME DESIGNER</span>
|
||||||
|
<span class="spacer"></span>
|
||||||
|
<span class="close" data-action="close">×</span>
|
||||||
|
</div>
|
||||||
|
<div class="win-main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="cols">
|
||||||
|
<div class="left">
|
||||||
|
<h3>Colour roles</h3>
|
||||||
|
<div class="role" data-for="r : roles" data-class-sel="r.sel" data-action="pick" data-attr-data-arg="r.key">
|
||||||
|
<div class="c" data-style-background-color="r.hex"></div>
|
||||||
|
<span class="l">{{ r.label }}</span>
|
||||||
|
<span class="h">{{ r.hex }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<div class="scroll">
|
||||||
|
<div class="sec">
|
||||||
|
<h3>Start from</h3>
|
||||||
|
<div class="chips"><div class="chip2" data-for="s : starts" data-action="start" data-attr-data-arg="s.key">{{ s.label }}</div></div>
|
||||||
|
</div>
|
||||||
|
<div class="sec">
|
||||||
|
<h3>All colours</h3>
|
||||||
|
<div class="line"><span class="label">Hue</span><input class="range" type="range" min="-180" max="180" step="2" data-value="hue"/><span class="v">{{ hue }}°</span></div>
|
||||||
|
<div class="line"><span class="label">Saturation</span><input class="range" type="range" min="0" max="200" step="2" data-value="sat"/><span class="v">{{ sat }} %</span></div>
|
||||||
|
<div class="line"><span class="label">Lightness</span><input class="range" type="range" min="-30" max="30" step="1" data-value="light"/><span class="v">{{ light }}</span></div>
|
||||||
|
<div class="preview"><div data-for="r : roles" data-style-background-color="r.hex"></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="sec">
|
||||||
|
<h3>{{ sel_label }}</h3>
|
||||||
|
<div class="line"><span class="label">Colour (hex)</span><input class="text" type="text" data-value="hex" maxlength="9"/><div class="btn" data-action="darker">Darker</div><div class="btn" data-action="lighter">Lighter</div></div>
|
||||||
|
<div class="sws"><div class="sw" data-for="w : swatches" data-action="swatch" data-attr-data-arg="w.key"><div class="c" data-style-background-color="w.hex"></div></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="sec">
|
||||||
|
<h3>Theme file</h3>
|
||||||
|
<div class="line"><span class="label">Name</span><input class="text" type="text" data-value="name" maxlength="40"/><div class="btn" data-action="export">Export</div></div>
|
||||||
|
<div class="muted" style="margin-top: 8dp;">Import (SAVE\themes):</div>
|
||||||
|
<div class="file" data-for="f : files" data-action="import" data-attr-data-arg="f.key"><span class="l">{{ f.label }}</span><span class="muted">import</span></div>
|
||||||
|
<div class="muted" data-if="files.size == 0">No theme files yet - export one, or put a friend's .ini into the folder.</div>
|
||||||
|
<div class="line"><div class="btn" style="margin-left: 0;" data-action="folder">Open folder</div><div class="btn" data-action="refresh">Refresh</div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="foot2">
|
||||||
|
<span class="hint" data-if="status != ''">{{ status }}</span>
|
||||||
|
<span class="hint" data-if="status == ''">{{ active ? 'Your theme is in use.' : 'Apply makes it your interface colours.' }}{{ dirty ? ' Changes not applied yet.' : '' }}</span>
|
||||||
|
<div class="btn" data-action="reset">REM colours</div>
|
||||||
|
<div class="btn" data-action="close">Close</div>
|
||||||
|
<div class="btn primary" data-action="apply">Apply</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</rml>
|
||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user