38
38
var /datum /html_interface/rcd/interface
39
39
40
40
var /obj /abstract/screen/close/closer
41
+
42
+
43
+ var /list /settings // for stuff like window directions and construction options.
44
+ var /current_menu = null // we are keeping both systems of schematics for the sake of backwards compatability
45
+ var /list /schem_groups = null
46
+ var /datum /rcd_grouped_schematic/selected_schem = null
47
+
48
+
41
49
42
50
/ obj / item/ device/ rcd/ New()
43
51
. = .. ()
44
52
53
+ schem_groups= new ()
54
+ settings= new ()
55
+
45
56
// interface gets created BEFORE the schematics get created, so they can modify the HEAD content (RPD pipe colour picker).
46
57
interface = new (src , sanitize(name))
47
58
data = list ()
368
379
/ datum / rcd_schematic/ con_walls,
369
380
/ datum / rcd_schematic/ con_airlock,
370
381
/ datum / rcd_schematic/ con_window,
371
- )
382
+ )
383
+ current_menu= " deconstruct"
372
384
373
- / obj / item/ device/ rcd/ mech/ attack_self(var /mob /living/user )
374
- if (! selected || user. shown_schematics_background || ! selected. show(user))
375
- user. hud_used. toggle_show_schematics_display(schematics[" Construction" ], 0 , src )
385
+
386
+ / obj / item/ device/ rcd/ mech/ New()
387
+ . = .. ()
388
+ rcd_list += src
389
+
390
+ var /datum /rcd_scematic_grouping/destroy/dest_g = new (src )
391
+ dest_g. schematics+= new / datum / rcd_grouped_schematic/ destroy_all(src )
392
+
393
+ schem_groups+= dest_g
394
+ schem_groups+= new / datum / rcd_scematic_grouping/ build_wall/ engi_std(src )
395
+ schem_groups+= new / datum / rcd_scematic_grouping/ build_floors/ engi_std(src )
396
+ schem_groups+= new / datum / rcd_scematic_grouping/ build_airlock/ engi_std(src )
397
+ schem_groups+= new / datum / rcd_scematic_grouping/ build_windows/ engi_std(src )
398
+
399
+ current_menu= schem_groups[1 ]. name
400
+ schem_groups[1 ]. switch_to()
401
+
402
+
403
+ / obj / item/ device/ rcd/ mech/ attack_self(var /mob /user )
404
+ rebuild_ui ()
405
+ interface. show(user)
406
+ for (var /datum /rcd_scematic_grouping/schemgroup in schem_groups)
407
+ schemgroup. send_assets(user. client)
408
+ for (var /datum /rcd_grouped_schematic/sch )
409
+ sch. send_assets(user. client)
410
+ interface. hide(user) // have to do this since loading so many images takes a lot of time. and no images is better than no UI
411
+ interface. show(user)
412
+
413
+
414
+ / obj / item/ device/ rcd/ mech/ Topic(var /href , var /list /href_list )
415
+ // for(var/i in href_list)
416
+ // world.log << "[i] = [href_list[i]]"
417
+
418
+ if (href_list[" set_group" ])
419
+ for (var /datum /rcd_scematic_grouping/schem_group in schem_groups)
420
+ if (schem_group. name== href_list[" set_group" ])
421
+ current_menu= href_list[" set_group" ]
422
+ schem_group. switch_to()
423
+ do_spark ()
424
+ rebuild_ui ()
425
+ return
426
+ if (href_list[" set_schematic" ])
427
+ var /datum /rcd_scematic_grouping/group
428
+ for (var /datum /rcd_scematic_grouping/schem_group in schem_groups)
429
+ if (schem_group. name== current_menu)
430
+ group= schem_group
431
+ break
432
+ if (group)
433
+ for (var /datum /rcd_grouped_schematic/schm in group. schematics)
434
+ if (schm. name== href_list[" set_schematic" ])
435
+ selected_schem= schm
436
+ do_spark ()
437
+ rebuild_ui ()
438
+ break
439
+ return
440
+ if (href_list[" set_arg" ])
441
+ if (href_list[" value_togglelist" ])
442
+ var /val = href_list[" value_isnum" ]== " yes" ? text2num(href_list[" value" ]) : href_list[" value" ]
443
+ var /found = FALSE
444
+ for (var /n in settings[href_list[" set_arg" ]])
445
+ if (n== val)
446
+ found= TRUE
447
+ break
448
+ if ( found )
449
+ settings[href_list[" set_arg" ]] -= val
450
+ else
451
+ settings[href_list[" set_arg" ]] += val
452
+ else if (href_list[" value_resetlist" ])
453
+ settings[href_list[" set_arg" ]]= new / list ()
454
+ else if (href_list[" value_toggle" ] )
455
+ settings[href_list[" set_arg" ]] = ! settings[href_list[" set_arg" ]]
456
+ else if (href_list[" value_input" ])
457
+ var /tx = " "
458
+ for (var /datum /rcd_scematic_grouping/schem_group in schem_groups)
459
+ if (schem_group. name== current_menu)
460
+ tx= schem_group. selectiondialogue
461
+ break
462
+ settings[href_list[" set_arg" ]] = input (usr , tx, src , " [ selected_schem?. name] " )
463
+ else
464
+ settings[href_list[" set_arg" ]] = href_list[" value_isnum" ]== " yes" ? text2num(href_list[" value" ]) : href_list[" value" ]
465
+ rebuild_ui ()
466
+ return
467
+
468
+ return
469
+
470
+ / obj / item/ device/ rcd/ mech/ rebuild_ui()
471
+ var /dat = " "
472
+
473
+ // that's right, you can embed a stylesheet in the html body, and you better believe i'm going to do this instead of setting up a whole new file for like 2 rules.
474
+ dat+= {" <style>
475
+ .grouplisting{
476
+ text-align:center;
477
+ font-size:100%;
478
+ }
479
+ .grouplisting img {
480
+ width:64px;
481
+ height:64px;
482
+ }
483
+
484
+ .grouplisting a{
485
+ width:100%;
486
+ height:100%;
487
+ display:block;
488
+ background:revert;
489
+ }
490
+
491
+ .clickabletable td{
492
+ text-align:center;
493
+ height:100%; /*to make it so that links inhabit the whole size of the td. kinda annoying to have to do all this.*/
494
+ }
495
+
496
+ .clickabletable a{
497
+ width:100%;
498
+ height:100%;
499
+ display:block;
500
+ }
501
+
502
+ img, .clickabletable img, .grouplisting img {
503
+ border:none;
504
+ background:none;
505
+ image-rendering:pixelated;
506
+ }
507
+
508
+ </style>"}
509
+
510
+ dat+= " <table class='grouplisting'><tr>"
511
+ for (var /datum /rcd_scematic_grouping/schem_group in schem_groups)
512
+ dat+= " <td class='[ schem_group. name== current_menu ? " schem_selected" : " schem" ] '><a href='?src= \ref [ interface] ;set_group= [ schem_group. name] '><img src=' [ schem_group. headerimage] '><br> [ schem_group. name] </a></td>"
513
+ dat+= " </tr></table><hr>"
514
+
515
+ for (var /datum /rcd_scematic_grouping/schem_group in schem_groups)
516
+ if (schem_group. name== current_menu)
517
+ var /t = schem_group. generate_html()
518
+ dat+= t
519
+ break
520
+
521
+ interface. updateLayout(dat)
522
+
523
+ / obj / item/ device/ rcd/ mech/ afterattack(var /atom /A , var /mob /user )
524
+ if (! selected_schem)
525
+ return 1
526
+ if ( ! (user. Adjacent(A) && A. Adjacent(user)) )
527
+ return 1
528
+ if (get_dist(A, user) > 1 )
529
+ return 1
530
+
531
+ var /c = selected_schem. build(A,user)
532
+ if (! c)
533
+ to_chat (user, " <span class='warning'>\The [ src ] 's error light flickers.</span>" )
534
+ else
535
+ use_energy (c, user)
536
+ rebuild_ui ()
537
+ return 1
0 commit comments