From d379822c9c1e88b11fc768524a1f37f28d429231 Mon Sep 17 00:00:00 2001 From: monster860 Date: Sat, 2 Apr 2016 21:40:49 -0400 Subject: [PATCH] Adds link mode --- code/modules/admin/buildmode.dm | 113 +++++++++++++++++++++++++++++++- icons/misc/buildmode.dmi | Bin 1481 -> 1520 bytes icons/misc/mark.dmi | Bin 2355 -> 2691 bytes 3 files changed, 112 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index de4f374e836..9dcba04b8b4 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -6,7 +6,8 @@ #define COPY_BUILDMODE 6 #define AREAEDIT_BUILDMODE 7 #define FILL_BUILDMODE 8 -#define NUM_BUILDMODES 8 +#define LINK_BUILDMODE 9 +#define NUM_BUILDMODES 9 /obj/screen/buildmode icon = 'icons/misc/buildmode.dmi' @@ -90,6 +91,32 @@ cl = null qdel(I) +/obj/effect/buildmode_line + var/image/I + var/client/cl + +/obj/effect/buildmode_line/New(var/client/c, var/atom/atom_a, var/atom/atom_b, var/linename) + name = linename + loc = get_turf(atom_a) + I = image('icons/misc/mark.dmi', src, "line", 19.0) + var/x_offset = ((atom_b.x * 32) + atom_b.pixel_x) - ((atom_a.x * 32) + atom_a.pixel_x) + var/y_offset = ((atom_b.y * 32) + atom_b.pixel_y) - ((atom_a.y * 32) + atom_a.pixel_y) + + var/matrix/M = matrix() + M.Translate(0, 16) + M.Scale(1, sqrt((x_offset * x_offset) + (y_offset * y_offset)) / 32) + M.Turn(90 - Atan2(x_offset, y_offset)) // So... You pass coords in order x,y to this version of atan2. It should be called acsc2. + M.Translate(atom_a.pixel_x, atom_a.pixel_y) + + transform = M + cl = c + cl.images += I + +/obj/effect/buildmode_line/Destroy() + cl.images -= I + cl = null + qdel(I) + /datum/click_intercept var/client/holder = null var/list/obj/screen/buttons = list() @@ -133,6 +160,9 @@ var/area/storedarea = null var/image/areaimage var/atom/movable/stored = null + var/list/link_lines = list() + var/obj/link_obj + var/valid_links = 0 /datum/click_intercept/buildmode/New(client/c) ..() @@ -210,6 +240,11 @@ user << "Left Mouse Button on turf/obj/mob = Select corner" user << "Right Mouse Button on buildmode button = Select object type" user << "***********************************************************" + if(LINK_BUILDMODE) + user << "***********************************************************" + user << "Left Mouse Button on obj = Select button to link" + user << "Right Mouse Button on obj = Link/unlink to selected button" + user << "***********************************************************" /datum/click_intercept/buildmode/proc/change_settings(mob/user) switch(mode) @@ -310,6 +345,9 @@ areaimage.loc = storedarea else areaimage.loc = null + for(var/obj/effect/buildmode_line/L in link_lines) + qdel(L) + link_lines -= L /datum/click_intercept/buildmode/proc/select_tile(var/turf/T) return new /obj/effect/buildmode_reticule(T, holder) @@ -482,3 +520,76 @@ //Something wrong - Reset deselect_region() + if(LINK_BUILDMODE) + if(left_click && istype(object, /obj/machinery)) + link_obj = object + if(right_click && istype(object, /obj/machinery)) + if(istype(link_obj, /obj/machinery/door_control) && istype(object, /obj/machinery/door/airlock)) + var/obj/machinery/door_control/M = link_obj + var/obj/machinery/door/airlock/P = object + if(!M.id || M.id == "") + M.id = input(holder, "Please select an ID for the button", "Buildmode", "") + if(!M.id || M.id == "") + goto(line_jump) + if(P.id_tag == M.id && (P in range(M.range, M)) && P.id_tag && P.id_tag != "") + P.id_tag = null + holder << "[P] unlinked." + goto(line_jump) + if(!M.normaldoorcontrol) + if(link_lines.len && alert(holder, "Warning: This will disable links to connected pod doors. Continue?", "Buildmode", "Yes", "No") == "No") + goto(line_jump) + M.normaldoorcontrol = 1 + if(P.id_tag && alert(holder, "Warning: This will unlink something else from the door. Continue?", "Buildmode", "Yes", "No") == "No") + goto(line_jump) + P.id_tag = M.id + if(istype(link_obj, /obj/machinery/door_control) && istype(object, /obj/machinery/door/poddoor)) + var/obj/machinery/door_control/M = link_obj + var/obj/machinery/door/poddoor/P = object + if(!M.id || M.id == "") + M.id = input(holder, "Please select an ID for the button", "Buildmode", "") + if(!M.id || M.id == "") + goto(line_jump) + if(P.id_tag == M.id && P.id_tag && P.id_tag != "") + P.id_tag = null + holder << "[P] unlinked." + goto(line_jump) + if(M.normaldoorcontrol) + if(link_lines.len && alert(holder, "Warning: This will disable links to connected airlocks. Continue?", "Buildmode", "Yes", "No") == "No") + goto(line_jump) + M.normaldoorcontrol = 0 + if(!M.id || M.id == "") + M.id = input(holder, "Please select an ID for the button", "Buildmode", "") + if(!M.id || M.id == "") + goto(line_jump) + if(P.id_tag && P.id_tag != 1 && alert(holder, "Warning: This will unlink something else from the door. Continue?", "Buildmode", "Yes", "No") == "No") + goto(line_jump) + P.id_tag = M.id + + line_jump // For the goto + valid_links = 0 + for(var/obj/effect/buildmode_line/L in link_lines) + qdel(L) + link_lines -= L + + if(istype(link_obj, /obj/machinery/door_control)) + var/obj/machinery/door_control/M = link_obj + for(var/obj/machinery/door/airlock/P in range(M.range,M)) + if(P.id_tag == M.id) + var/obj/effect/buildmode_line/L = new(holder, M, P, "[M.name] to [P.name]") + L.color = M.normaldoorcontrol ? "#339933" : "#993333" + if(M.normaldoorcontrol) + valid_links = 1 + link_lines += L + var/obj/effect/buildmode_line/L2 = new(holder, P, M, "[M.name] to [P.name]") // Yes, reversed one so that you can see it from both sides. + L2.color = L.color + link_lines += L2 + for(var/obj/machinery/door/poddoor/P in world) + if(P.id_tag == M.id) + var/obj/effect/buildmode_line/L = new(holder, M, P, "[M.name] to [P.name]") + L.color = M.normaldoorcontrol ? "#993333" : "#339933" + if(M.normaldoorcontrol) + valid_links = 0 + link_lines += L + var/obj/effect/buildmode_line/L2 = new(holder, P, M, "[M.name] to [P.name]") // Yes, reversed one so that you can see it from both sides. + L2.color = L.color + link_lines += L2 diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index 92519833fde3da360f6d44d9e2ebd4a8c4d6a1e0..1d206b45e7520c9102720970740e66e824bd157d 100644 GIT binary patch delta 1291 zcmV+m1@!vK3-Ak&UID3*Uz>m8m0IFbs;uDZ=K@Y?0Iy-Plwx7wd;kCh$Vo&&RA_w zncjU++xxqEdVEpa^RAvA&+-c%&%1hhe4LBz+w-oT9xty;+J60bvbKL->w15sEr5@D zdVDIs;ro*{fY$YXt-;N+0n&kRDK`AZC4Xbm^?t2w6dv^+p>Zb&?l&-g{pVwqn*I#3nu@+-%j|7%o8Xh(3?amEFrM$`F@%C>ixJy!VqGGfdAxBvVpA21qeXX>t2Fi-3##hfiJ`i~ zQ0U8;VBx-}|A7@5ZI*`Hxi^0}${%Kb*QaTG-t0M3?eDsD5PN?;YpVTSkH)SKX|%zD zXDv|WW5Uwk^=PEcqf@APj^5$7kx==&4o#zrg+v%Ca`+brE!Py~?>cl0Cn3f7KFG-sQq1Ai;z|iU^<4{-?cU8TqcCD*W!y?S^K-T7C?#NDi5{4YwH4VqY6&7 zziaCPaEDO&yS9HW0Hvo;YT_#s&a);u&@m-*U&g(GAJZ_!u<&FP7GH>(GcpnUtSe?K^}^UUsNlXb32`f;RL`l zin*T`&&}S(xj1|4T}g7}w#vDm%nEp}=W+HHOlp5$PoWr=gyJj;Lcs66INHQc!gsj0 zj(tkU9JFxsJmrjzfP^@P5X3*i7(xL=#P1`j-p}m8e~*cw(r^B7fSs!kIIE|6yM2qR z3w}Kga~o7S`n%)=oS~v& z`sRPf8-%>5kZJ@LU@xm2R|v%;OVtA~;LxpHC5$UW0NE)Z;&nn^m!XEvF$B0ALt0|x z=bh(k$_`7gosA1^NA9al2(s}?5={z{`yyDs*j~aw zk}fEDs2!}V5BBHbF`-|0eXy6%tO)^4bMAjRn$Y3H3QE?!(Z*}Sx>ajJ(tzD*Z?rL* zux?c%q7Gif6pV4Z<6)JDt)3Ez(TML6R(aU!DY4bTn0-QN=1xCId1-mgb(2v3jA2Y) zeoctus@_cFO&3v{@U9kiN|hB{{anDw2LOCCrU)y98EOCk1f)qsK~!jg?U~E6 z)F2Rs;~VJcsd76m-T4ToiYnG;b9@5B3n0Dr&86w)(o7N{L06L*b$)aE(lqoBSw4Ic z+sCVVxqTDc{iW&h~prgZ`B;ah-iutTXSNaB2+xySRS!M6{FFjyUJA>`;7rn^{&KFJfSc2WlXSe zU(^4jH423NE$3YwH4V zhfw&twk`l;PYHjiiJwfUlq5RPl#;nG<6h5?X_#VI_`9}Vb6&75xewvJ-X}} z8$Ct(yB@6$+}cw6yDojOYO>>CTly%5Pk;E|{ox;}zdnEc;qLn3X}z~9GN5(#KJ0CT zzdJFbhp2cwl>Y7nF+~5EyiMtzPRy4hBE*^^{N0(D5+b_BlZ4)90R%(Fei0ZjRy{iy zLu>hr?Nwsw??O!cFJHsJaVvU$e~kAw`~?1oAPk6MBD0-`fmP=kf;7CvSwSEyp1}JC zP%2fuy48O$nkLUnobkAbl?W;7MU3;hH&s2W5Glq)0|jW8a3jWPWuEG?@eweo?miNR zsG)<2t%^3mlv$8wRy31Bd!jAu#PETL456I+R9P`soiR*tz zSb%?BT;(`J7(H^VdH@?BE zAMDS=V?wv``d}}iek24m&AI0c5_)$i2a{;zq#*=A|Bo%;(^AXeh{ro!U@ O0000kegQ5dbA(1g55#azpd`Zq{69`TZDl%Pk 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 literal 2355 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