1+ <!doctype html>
2+ < html lang ="en ">
3+
4+ < head >
5+ < meta charset ="utf-8 ">
6+ < meta name ="viewport " content ="width=device-width, initial-scale=1, shrink-to-fit=no ">
7+ < title > Team Comtress Launcher</ title >
8+ < style >
9+ * {
10+ box-sizing : border-box;
11+ }
12+
13+ html {
14+ scrollbar-width : thin;
15+ scrollbar-color : rgb (0 , 150 , 136 ) rgb (33 , 37 , 41 );
16+ scroll-padding-top : 89px ;
17+ scroll-behavior : smooth;
18+ overflow-x : hidden;
19+ overflow-y : hidden;
20+ color-scheme : dark;
21+ }
22+
23+ body {
24+ color-scheme : dark;
25+ background-color : rgb (33 , 33 , 33 );
26+ color : rgb (222 , 226 , 230 );
27+ font-family : "Roboto Flex Variable" , -apple-system, BlinkMacSystemFont, "Segoe UI" , "Helvetica Neue" , Arial, sans-serif;
28+ font-size : 16px ;
29+ font-weight : 400 ;
30+ letter-spacing : 0.1px ;
31+ line-height : 24px ;
32+ margin : 0 ;
33+ text-align : start;
34+ overflow-x : hidden;
35+ overflow-y : hidden;
36+ height : 100vh ;
37+ width : 100vw ;
38+ }
39+
40+ # logo-container {
41+ text-align : center;
42+ padding-top : 1rem ;
43+ }
44+
45+ # app {
46+ display : flex;
47+ flex-direction : column;
48+ justify-content : space-between;
49+ align-items : center;
50+ height : 100vh ;
51+ width : 100vw ;
52+ }
53+
54+ # launch-bar {
55+ display : flex;
56+ width : 100% ;
57+ justify-content : center;
58+ padding : 1rem 1rem ;
59+ background-color : rgb (255 255 255 / 5% );
60+ z-index : 10 ;
61+ }
62+
63+ .logo {
64+ width : min (70vw , 600px );
65+ height : auto;
66+ }
67+
68+ .btn {
69+ border : none;
70+ padding : 0.5rem 1rem ;
71+ vertical-align : middle;
72+ }
73+
74+ .btn : hover : not (: disabled ) {
75+ cursor : pointer;
76+ }
77+
78+ .btn-primary {
79+ background-color : rgb (0 , 132 , 120 );
80+ }
81+
82+ .btn-primary : hover : not (: disabled ) {
83+ background-color : rgb (0 , 150 , 136 );
84+ }
85+
86+ .btn-secondary {
87+ background-color : rgb (97 , 97 , 97 );
88+ color : white;
89+ }
90+
91+ .btn-secondary : hover : not (: disabled ) {
92+ background-color : rgb (117 , 117 , 117 );
93+ }
94+
95+ .btn-lg {
96+ font-size : 1.25rem ;
97+ padding : 0.75rem 1.5rem ;
98+ }
99+
100+ .spacer {
101+ flex-grow : 1 ;
102+ }
103+
104+ .menu {
105+ display : none;
106+ position : fixed;
107+ top : 0 ;
108+ left : 0 ;
109+ width : 100% ;
110+ height : 100% ;
111+ background-color : rgb (33 , 33 , 33 );
112+ color : rgb (222 , 226 , 230 );
113+ padding : 2rem ;
114+ overflow-y : auto;
115+ z-index : 5 ;
116+ }
117+
118+ # launch-options {
119+ width : 100% ;
120+ padding : 0.5rem ;
121+ font-size : 1rem ;
122+ margin-top : 0.5rem ;
123+ }
124+
125+ .info-label {
126+ margin-right : 1rem ;
127+ font-size : 1.25rem ;
128+ vertical-align : middle;
129+ color : rgb (180 , 180 , 180 );
130+ }
131+ </ style >
132+ </ head >
133+
134+ < body >
135+ < div id ="app ">
136+ < div id ="logo-container ">
137+ < img src ="tc2.png " class ="logo " />
138+ </ div >
139+ < div id ="launch-bar ">
140+ < div class ="spacer "> </ div >
141+ < div class ="game-menu ">
142+ < span class ="info-label " style ="display: none "> Offline mode</ span >
143+ < button id ="launch-btn " class ="btn btn-primary btn-lg " disabled > Updating...</ button >
144+ < button id ="settings-btn " class ="btn btn-secondary btn-lg " title ="Settings ">
145+ < svg width ="24 " height ="20 " viewBox ="0 0 24 20 " fill ="none " xmlns ="http://www.w3.org/2000/svg ">
146+ < path fill-rule ="evenodd " clip-rule ="evenodd "
147+ d ="M7 3C8.86384 3 10.4299 4.27477 10.874 6H19V8H10.874C10.4299 9.72523 8.86384 11 7 11C4.79086 11 3 9.20914 3 7C3 4.79086 4.79086 3 7 3ZM7 9C8.10457 9 9 8.10457 9 7C9 5.89543 8.10457 5 7 5C5.89543 5 5 5.89543 5 7C5 8.10457 5.89543 9 7 9Z "
148+ fill ="currentColor " />
149+ < path fill-rule ="evenodd " clip-rule ="evenodd "
150+ d ="M17 20C15.1362 20 13.5701 18.7252 13.126 17H5V15H13.126C13.5701 13.2748 15.1362 12 17 12C19.2091 12 21 13.7909 21 16C21 18.2091 19.2091 20 17 20ZM17 18C18.1046 18 19 17.1046 19 16C19 14.8954 18.1046 14 17 14C15.8954 14 15 14.8954 15 16C15 17.1046 15.8954 18 17 18Z "
151+ fill ="currentColor " />
152+ </ svg >
153+ </ button >
154+ </ div >
155+ </ div >
156+ </ div >
157+ < div id ="settings-menu " class ="menu ">
158+ < h1 > Settings</ h1 >
159+ < h2 > Launch Options</ h2 >
160+ < input id ="launch-options " type ="text "> </ input >
161+ < h2 > Install Folder</ h2 >
162+ < button id ="folder-btn " class ="btn btn-secondary " disabled > Browse Install Folder</ button >
163+ </ div >
164+ < script >
165+ document . getElementById ( "launch-btn" ) . addEventListener ( "click" , ( ) => {
166+ window . pywebview . api . launch_game ( ) ;
167+ } ) ;
168+ document . getElementById ( "settings-btn" ) . addEventListener ( "click" , ( ) => {
169+ const menu = document . getElementById ( "settings-menu" ) ;
170+ if ( menu . style . display === "block" ) {
171+ menu . style . display = "none" ;
172+ } else {
173+ menu . style . display = "block" ;
174+ }
175+ } ) ;
176+ document . getElementById ( "launch-options" ) . addEventListener ( "input" , ( event ) => {
177+ window . pywebview . api . set_launch_options ( options ) ;
178+ } ) ;
179+ document . getElementById ( "folder-btn" ) . addEventListener ( "click" , ( ) => {
180+ window . pywebview . api . open_install_folder ( ) ;
181+ } ) ;
182+ function archiveReady ( offline ) {
183+ document . getElementById ( "launch-btn" ) . disabled = false ;
184+ document . getElementById ( "folder-btn" ) . disabled = false ;
185+ document . getElementById ( "launch-btn" ) . innerText = "Launch" ;
186+ const online = offline === 0 ;
187+ if ( ! online ) {
188+ document . querySelector ( ".info-label" ) . innerText = "Offline mode" ;
189+ if ( offline !== 1 ) {
190+ document . getElementById ( "launch-btn" ) . innerText = "Install failed" ;
191+ }
192+ document . querySelector ( ".info-label" ) . style . display = "inline" ;
193+ }
194+ }
195+ </ script >
196+ </ body >
197+
198+ </ html >
0 commit comments