Skip to content

Commit f35f16e

Browse files
committed
Add Chapter Select and Fix Output bugs.
1 parent 390196c commit f35f16e

File tree

6 files changed

+422
-200
lines changed

6 files changed

+422
-200
lines changed

lib/output.hpp

Lines changed: 217 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -109,17 +109,19 @@ inline void output ()
109109
for (int j = 1; j <= WINDOW_Y; j ++) putchar (' ');
110110
putchar ('\n');
111111
}
112+
113+
if (kline)
114+
{
115+
for (int i = 1; i < WINDOW_Y; i ++) putchar (' ');
116+
putchar ('\n');
117+
}
112118
printf ("%s", BOTTOM_LEFT_INFO);
113119
for (int i = strlen (BOTTOM_LEFT_INFO); i < WINDOW_Y - strlen (BOTTOM_RIGHT_INFO) - 1; i ++)
114120
{
115121
putchar (' ');
116122
}
117123
printf ("%s ", BOTTOM_RIGHT_INFO);
118-
if (kline)
119-
{
120-
putchar ('\n');
121-
for (int i = 1; i < WINDOW_Y; i ++) putchar (' ');
122-
}
124+
123125
}
124126

125127

@@ -263,125 +265,251 @@ void dooutput ()
263265
}
264266
}
265267

266-
char middleout[50] = "Level Options";
267-
int oneline, pid, PIDMAX;
268-
269-
void select_print (int i, int j)
268+
namespace SelectOutput
270269
{
271-
int k = (i / 3) * oneline + j / 5;
272-
if (i % 3 == 1 && k < PIDMAX)
270+
char middleout[50] = "Level Options";
271+
int oneline, pid, PIDMAX;
272+
273+
void select_print (int i, int j)
273274
{
274-
if (j % 5 == 0 || j % 5 == 4)
275+
int k = (i / 3) * oneline + j / 5;
276+
if (i % 3 == 1 && k < PIDMAX)
275277
{
276-
if (pid != k) putchar (' ');
277-
else putchar ('|');
278+
if (j % 5 == 0 || j % 5 == 4)
279+
{
280+
if (pid != k) putchar (' ');
281+
else putchar ('|');
282+
}
283+
else
284+
{
285+
if (j % 5 == 1 && (k + 1) > 100)
286+
{
287+
putchar ((k + 1) / 100 + '0');
288+
}
289+
else if (j % 5 == 2 && (k + 1) > 10)
290+
{
291+
putchar (((k + 1) % 100) / 10 + '0');
292+
}
293+
else if (j % 5 == 3)
294+
{
295+
putchar (((k + 1) % 10) + '0');
296+
}
297+
else putchar (' ');
298+
}
278299
}
279300
else
280301
{
281-
if (j % 5 == 1 && (k + 1) > 100)
302+
if (pid == k && j % 5 != 0 && j % 5 != 4) putchar ('-');
303+
else putchar (' ');
304+
}
305+
}
306+
307+
inline void select_output ()
308+
{
309+
if (WINDOW_X == 0 || WINDOW_Y == 0) return;
310+
for (int i = 1; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar (' ');
311+
printf ("%s", middleout);
312+
for (int i = 1; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar (' ');
313+
314+
315+
int wstartx, wstarty, wendx, wendy, wwaitx, wwaity;
316+
oneline = (WINDOW_Y - 2) / 5;
317+
if (WINDOW_X > (PIDMAX / oneline + 1) * 3)
318+
{
319+
wstartx = 0, wendx = (PIDMAX / oneline + 1) * 3 - 1;
320+
wwaitx = (WINDOW_X - (PIDMAX / oneline + 1) * 3) >> 1;
321+
if ((WINDOW_X - (PIDMAX / oneline + 1) * 3) & 1)
282322
{
283-
putchar ((k + 1) / 100 + '0');
284-
}
285-
else if (j % 5 == 2 && (k + 1) > 10)
323+
kline = true;
324+
} else kline = false;
325+
}
326+
else
327+
{
328+
wstartx = pid / oneline * 3 - (WINDOW_X >> 1), wendx = WINDOW_X + wstartx - 1;
329+
kline = false;
330+
wwaitx = 0;
331+
}
332+
333+
{
334+
wstarty = 0, wendy = oneline * 5 - 1;
335+
wwaity = (WINDOW_Y - oneline * 5) >> 1;
336+
}
337+
338+
for (int i = 1; i <= wwaitx; i ++) {
339+
for (int j = 1; j <= WINDOW_Y; j ++) putchar (' ');
340+
putchar ('\n');
341+
}
342+
for (int i = wstartx; i <= wendx; i ++)
343+
{
344+
if (i < 0 || i >= (PIDMAX / oneline + 1) * 3)
286345
{
287-
putchar (((k + 1) % 100) / 10 + '0');
288-
}
289-
else if (j % 5 == 3)
346+
for (int j = 1; j < WINDOW_Y; j ++) putchar (' ');
347+
putchar ('\n');
348+
continue;
349+
}
350+
for (int j = 1; j <= wwaity; j ++) putchar (' ');
351+
for (int j = wstarty; j <= wendy; j ++)
290352
{
291-
putchar (((k + 1) % 10) + '0');
353+
if (j < 0 || j >= oneline * 5)
354+
{
355+
putchar (' ');
356+
continue;
357+
}
358+
select_print (i, j);
292359
}
293-
else putchar (' ');
360+
for (int j = 1; j <= wwaity; j ++) putchar (' ');
361+
putchar ('\n');
294362
}
363+
for (int i = 1; i <= wwaitx; i ++) {
364+
for (int j = 1; j <= WINDOW_Y; j ++) putchar (' ');
365+
putchar ('\n');
366+
}
367+
368+
if (kline)
369+
{
370+
for (int i = 1; i < WINDOW_Y; i ++) putchar (' ');
371+
putchar ('\n');
372+
}
373+
374+
printf ("%s", BOTTOM_LEFT_INFO);
375+
for (int i = strlen (BOTTOM_LEFT_INFO); i < WINDOW_Y - strlen (BOTTOM_RIGHT_INFO) - 1; i ++)
376+
{
377+
putchar (' ');
378+
}
379+
printf ("%s ", BOTTOM_RIGHT_INFO);
295380
}
296-
else
381+
382+
void select_dooutput ()
297383
{
298-
if (pid == k && j % 5 != 0 && j % 5 != 4) putchar ('-');
299-
else putchar (' ');
384+
while (SEL_OUTPUT_STOP == 0)
385+
{
386+
MOVETO (0, 0);
387+
select_output ();
388+
msleep (OUTPUT_TIME);
389+
}
300390
}
391+
301392
}
302393

303-
inline void select_output ()
394+
namespace ChapterOutput
304395
{
305-
if (WINDOW_X == 0 || WINDOW_Y == 0) return;
306-
for (int i = 1; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar (' ');
307-
printf ("%s", middleout);
308-
for (int i = 1; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar (' ');
396+
const string chapter_name[5] = {" Adventure", " Endless"};
397+
int CHAPTERMAX = 2 - 1, CHAPID;
398+
char middleout[50] = "Chapter Select";
399+
#define LEN 15
309400

310-
311-
int wstartx, wstarty, wendx, wendy, wwaitx, wwaity;
312-
oneline = (WINDOW_Y - 2) / 5;
313-
if (WINDOW_X > (PIDMAX / oneline + 1) * 3)
401+
void chapter_print (int i, int j)
314402
{
315-
wstartx = 0, wendx = (PIDMAX / oneline + 1) * 3 - 1;
316-
wwaitx = (WINDOW_X - (PIDMAX / oneline + 1) * 3) >> 1;
317-
if ((WINDOW_X - (PIDMAX / oneline + 1) * 3) & 1)
403+
int k = (i / 5);
404+
if (i % 5 == 2 && k <= CHAPTERMAX)
318405
{
319-
kline = true;
320-
} else kline = false;
321-
}
322-
else
323-
{
324-
wstartx = pid / oneline * 3 - (WINDOW_X >> 1), wendx = WINDOW_X + wstartx - 1;
325-
kline = false;
326-
wwaitx = 0;
406+
if (j % LEN == 0 || j % LEN == LEN - 1)
407+
{
408+
if (CHAPID != k) putchar (' ');
409+
else putchar ('|');
410+
}
411+
else
412+
{
413+
if (j < chapter_name[k].size ()) putchar (chapter_name[k][j]);
414+
else putchar (' ');
415+
}
416+
}
417+
else if (i % 5 == 0 || i % 5 == 4)
418+
{
419+
if (CHAPID == k && j % LEN != 0 && j % LEN != LEN - 1) putchar ('-');
420+
else putchar (' ');
421+
}
422+
else
423+
{
424+
if ((j % LEN == 0 || j % LEN == LEN - 1) && CHAPID == k) putchar ('|');
425+
else putchar (' ');
426+
}
327427
}
328428

429+
inline void chapter_output ()
329430
{
330-
wstarty = 0, wendy = oneline * 5 - 1;
331-
wwaity = (WINDOW_Y - oneline * 5) >> 1;
332-
}
333-
334-
for (int i = 1; i <= wwaitx; i ++) {
335-
for (int j = 1; j <= WINDOW_Y; j ++) putchar (' ');
336-
putchar ('\n');
337-
}
338-
for (int i = wstartx; i <= wendx; i ++)
339-
{
340-
if (i < 0 || i >= (PIDMAX / oneline + 1) * 3)
431+
if (WINDOW_X == 0 || WINDOW_Y == 0) return;
432+
for (int i = 1; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar (' ');
433+
printf ("%s", middleout);
434+
for (int i = 1; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar (' ');
435+
436+
437+
int wstartx, wstarty, wendx, wendy, wwaitx, wwaity;
438+
if (WINDOW_X > (CHAPTERMAX + 2) * 5)
439+
{
440+
wstartx = 0, wendx = (CHAPTERMAX + 1) * 5 - 1;
441+
wwaitx = (WINDOW_X - (CHAPTERMAX + 1) * 5) >> 1;
442+
if ((WINDOW_X - (CHAPTERMAX + 1) * 5) & 1)
443+
{
444+
kline = true;
445+
} else kline = false;
446+
}
447+
else
448+
{
449+
wstartx = CHAPID * 5 - (WINDOW_X >> 1), wendx = WINDOW_X + wstartx - 1;
450+
kline = false;
451+
wwaitx = 0;
452+
}
453+
341454
{
342-
for (int j = 1; j < WINDOW_Y; j ++) putchar (' ');
455+
wstarty = 0, wendy = LEN - 1;
456+
wwaity = (WINDOW_Y - LEN) >> 1;
457+
}
458+
459+
for (int i = 1; i <= wwaitx; i ++) {
460+
for (int j = 1; j <= WINDOW_Y; j ++) putchar (' ');
343461
putchar ('\n');
344-
continue;
345-
}
346-
for (int j = 1; j <= wwaity; j ++) putchar (' ');
347-
for (int j = wstarty; j <= wendy; j ++)
462+
}
463+
for (int i = wstartx; i <= wendx; i ++)
348464
{
349-
if (j < 0 || j >= oneline * 5)
465+
if (i < 0 || i >= (CHAPTERMAX + 1) * 5)
350466
{
351-
putchar (' ');
467+
for (int j = 1; j < WINDOW_Y; j ++) putchar (' ');
468+
putchar ('\n');
352469
continue;
470+
}
471+
for (int j = 1; j <= wwaity; j ++) putchar (' ');
472+
for (int j = wstarty; j <= wendy; j ++)
473+
{
474+
if (j < 0 || j >= LEN)
475+
{
476+
putchar (' ');
477+
continue;
478+
}
479+
chapter_print (i, j);
353480
}
354-
select_print (i, j);
481+
for (int j = 1; j <= wwaity; j ++) putchar (' ');
482+
putchar ('\n');
483+
}
484+
for (int i = 1; i <= wwaitx; i ++) {
485+
for (int j = 1; j <= WINDOW_Y; j ++) putchar (' ');
486+
putchar ('\n');
487+
}
488+
489+
if (kline)
490+
{
491+
putchar ('\n');
492+
for (int i = 1; i < WINDOW_Y; i ++) putchar (' ');
355493
}
356-
for (int j = 1; j <= wwaity; j ++) putchar (' ');
357-
putchar ('\n');
358-
}
359-
for (int i = 1; i <= wwaitx; i ++) {
360-
for (int j = 1; j <= WINDOW_Y; j ++) putchar (' ');
361-
putchar ('\n');
362-
}
363494

364-
printf ("%s", BOTTOM_LEFT_INFO);
365-
for (int i = strlen (BOTTOM_LEFT_INFO); i < WINDOW_Y - strlen (BOTTOM_RIGHT_INFO) - 1; i ++)
366-
{
367-
putchar (' ');
368-
}
369-
printf ("%s ", BOTTOM_RIGHT_INFO);
370-
if (kline)
371-
{
372-
putchar ('\n');
373-
for (int i = 1; i < WINDOW_Y; i ++) putchar (' ');
495+
printf ("%s", BOTTOM_LEFT_INFO);
496+
for (int i = strlen (BOTTOM_LEFT_INFO); i < WINDOW_Y - strlen (BOTTOM_RIGHT_INFO) - 1; i ++)
497+
{
498+
putchar (' ');
499+
}
500+
printf ("%s ", BOTTOM_RIGHT_INFO);
374501
}
375-
}
376502

377-
void select_dooutput ()
378-
{
379-
while (SEL_OUTPUT_STOP == 0)
503+
void chapter_dooutput ()
380504
{
381-
MOVETO (0, 0);
382-
select_output ();
383-
msleep (OUTPUT_TIME);
505+
while (CHAPTER_OUTPUT_STOP == 0)
506+
{
507+
MOVETO (0, 0);
508+
chapter_output ();
509+
msleep (OUTPUT_TIME);
510+
}
384511
}
512+
385513
}
386514

387515
#endif

0 commit comments

Comments
 (0)