From 931d8916440ca672245bcfac264e2af8deda2289 Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Thu, 30 Jan 2020 18:37:27 -0800 Subject: [PATCH] Convert ModuleRestockLookAtConstrain into ModuleRestockConstraints New module is extendable and modular, allowing constraints to be run in the expected order without relying on possibly undefined behavior --- .../ReStock/Patches/Ground/restock-wheels.cfg | 59 +++++------ .../PatchesMH/Ground/restock-mh-wheels.cfg | 38 ++----- .../GameData/ReStock/Plugins/Restock.dll | Bin 38400 -> 39424 bytes .../Parts/Ground/restock-wheel-1-T.cfg | 6 +- .../Parts/Ground/restock-wheel-4.cfg | 38 ++----- .../Constraints/CopyPositionConstraint.cs | 40 ++++++++ .../Constraints/CopyRotationConstraint.cs | 40 ++++++++ Source/Restock/Constraints/IConstraint.cs | 10 ++ .../Restock/Constraints/LookAtConstraint.cs | 33 ++++++ Source/Restock/ModuleRestockConstraints.cs | 79 +++++++++++++++ .../Restock/ModuleRestockLookAtConstraint.cs | 95 ------------------ Source/Restock/Restock.csproj | 6 +- 12 files changed, 255 insertions(+), 189 deletions(-) create mode 100644 Source/Restock/Constraints/CopyPositionConstraint.cs create mode 100644 Source/Restock/Constraints/CopyRotationConstraint.cs create mode 100644 Source/Restock/Constraints/IConstraint.cs create mode 100644 Source/Restock/Constraints/LookAtConstraint.cs create mode 100644 Source/Restock/ModuleRestockConstraints.cs delete mode 100644 Source/Restock/ModuleRestockLookAtConstraint.cs diff --git a/Distribution/Restock/GameData/ReStock/Patches/Ground/restock-wheels.cfg b/Distribution/Restock/GameData/ReStock/Patches/Ground/restock-wheels.cfg index 4d1ce4f1..da309570 100644 --- a/Distribution/Restock/GameData/ReStock/Patches/Ground/restock-wheels.cfg +++ b/Distribution/Restock/GameData/ReStock/Patches/Ground/restock-wheels.cfg @@ -32,15 +32,15 @@ MODULE { - name = ModuleRestockLookAtConstraint + name = ModuleRestockConstraints - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = Suspension1 targetName = Suspension2 } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = Suspension2 targetName = Suspension1 @@ -130,82 +130,69 @@ MODULE { - name = FXModuleLookAtConstraint + name = ModuleRestockConstraints - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = Link1 targetName = Link1Target } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = Link2 targetName = Link2Target } - } - - MODULE - { - name = FXModuleConstrainPosition - - matchRotation = true - matchPosition = false - CONSTRAINFX + COPYROTATIONCONSTRAINT { - moversName = LowerBracket + rotatorsName = LowerBracket targetName = Base } - CONSTRAINFX + COPYROTATIONCONSTRAINT { - moversName = SteeringPivotFollower + rotatorsName = SteeringPivotFollower targetName = SteeringPivot } - CONSTRAINFX + COPYROTATIONCONSTRAINT { - moversName = WheelPivotFollower + rotatorsName = WheelPivotFollower targetName = WheelPivot } - } - - MODULE - { - name = FXModuleLookAtConstraint - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = ShockCylinder targetName = ShockPiston } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = ShockPiston targetName = ShockCylinder } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = SteeringPiston1 targetName = SteeringCylinder1 } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = SteeringCylinder1 targetName = SteeringPiston1 } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = SteeringPiston2 targetName = SteeringCylinder2 } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = SteeringCylinder2 targetName = SteeringPiston2 @@ -241,27 +228,27 @@ MODULE { - name = ModuleRestockLookAtConstraint + name = ModuleRestockConstraints - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = DamperCylinder targetName = DamperPiston } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = DamperPiston targetName = DamperCylinder } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = SteeringCylinder1 targetName = SteeringPiston1 } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = SteeringPiston1 targetName = SteeringCylinder1 diff --git a/Distribution/Restock/GameData/ReStock/PatchesMH/Ground/restock-mh-wheels.cfg b/Distribution/Restock/GameData/ReStock/PatchesMH/Ground/restock-mh-wheels.cfg index 397e8269..2c7b6ea2 100644 --- a/Distribution/Restock/GameData/ReStock/PatchesMH/Ground/restock-mh-wheels.cfg +++ b/Distribution/Restock/GameData/ReStock/PatchesMH/Ground/restock-mh-wheels.cfg @@ -103,67 +103,51 @@ MODULE { - name = ModuleAdvancedLookAtConstraint + name = ModuleRestockConstraints - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = Link1 targetName = Link1Target } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = Link2 targetName = Link2Target } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = SuspensionPiston targetName = SuspensionPistonTarget } - CONSTRAINLOOKFX + LOOKATCONSTRAINT { rotatorsName = SuspensionCylinder targetName = SuspensionCylinderTarget } - } - - MODULE - { - name = FXModuleConstrainPosition - - matchRotation = true - matchPosition = false - CONSTRAINFX + COPYROTATIONCONSTRAINT { - moversName = LowerBracket + rotatorsName = LowerBracket targetName = UpperBracket } - CONSTRAINFX + COPYROTATIONCONSTRAINT { - moversName = SteeringPivotFollower + rotatorsName = SteeringPivotFollower targetName = SteeringPivot } - } - - MODULE - { - name = FXModuleConstrainPosition - - matchRotation = false - matchPosition = true - CONSTRAINFX + COPYPOSITIONCONSTRAINT { moversName = WheelMesh targetName = WheelPivotFollower } - CONSTRAINFX + COPYPOSITIONCONSTRAINT { moversName = WheelMeshBusted targetName = WheelPivotFollower diff --git a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll index bf2d6b2b82c659dbbbda3db9cbeb778d591bfff6..a2c920e4b4883558383b16d926166dc24503b454 100644 GIT binary patch delta 15126 zcmaia34B!5_5Zo|&Ai!?NoFRQC1J9#4%q;aRS}R)_OL0jh(tg@grO5eaR@IFrQm|X zSQpd^#nx(Zjr$69#aipqTCIxU4qB~R7h1*t_nh|iifT3auZ^S6(>Rs>XEqAd`Zw(wVXZoc*8;G{c=rm|oc(F4Zj%1GWmqCD^m z?jV|(tJF2Q2Gz@d(-ja^;M$VASXHYlbN8uU>YChM)iu!q5Bzr$E=_KFq@L(^bBR<= zT|OvRulvVON1r`(^8zAQ)d}T?n-+A#(ru9Yb>@AOR+yWXTzUoq zNZkWjY6KjZfoR^~`w<}g{VRp4>?T#f%Qcu}3Rrbtp=8rVXy`&@vx#FAs3= zC&I!To1N$NY+5pW#1B9GpfevsX}d{32ormxfsUb8QSP77n)$4%Jva3bZkdFaR-_*W z<&OrcPcuDR^StRtSkVoNOfS|x3YNz~{_JB6j{_tlHNCy*U0^cRY_=PeK5Py~R84=# zS+S&5+E>vqWU&y5w4<$7=kx3 z<)q+5Q!yp#2nwPyoytO2HP^@t;ohGCqqENfCA6xHHbSY42*+R|YV)*_-jmCVCqmCb z*t2SAvoH{y3AajN&vu+-7!7jyR| z>Uk~t)2{&X2A{2nyy*n!m18k#6y#q(XAZDWuEHU|$KdVR@MZrBL3$;C3wBd&h0c5r zJEzGoU*|#@9D!pPEopj{?cE_)#EfES<3eUAcTq{A>ok~$yy=b5W^zY0t@ef77~9`+ zyGpv9AkkdSdWq(e{~C=y8SaC2U|5z8!0R+Gxf$%+?&izadfVxx4@?MvTRjmKAh?_*KP`B zVCwYSAdS>M(Q2vZ9<{EXMb+-?|mK+49l_FUAF>_)3V95&B~ zzovJg?a{)T^m`!lI<qebf83O-gSlPF{??!Xf?)q< z`eR_kTWy8CsZW^nc`)by09AW-W*yAHAwI{iPsVU0JSabf61M|v^LuvN6I9b@4F3c~ zSjjf&&jAiSsGa$OW&ZS+xS{`l;WqRfY-rdByoaMj9UFm8A(Q^p*STBD(xb8bdHFW; ztQgH}_~vT1aI0E{=g5V&7Uj&^4Yn55>Z-b1$1bbK(&`b-Jf53V-aYgUd}^adZC=mJ zQwY52+uY{zio_vEtG4LWPqojLS6KgM?W&`+Z%bRq&u^Z@{b0@`eGM9qb%zmzI_*<_ zvo?_Vip~GS=H}Y#akFb7keQX&E;r;^lxc&&Rwj(hOJK0q;gOR14vhk)rwN^zRgUdj zoo)YP+rspFnC6+@rU{))J^7B?A)67Yk?9RycG3K3#ARfLx3kzP+%?z%QitIr;*tXQ zS?M2`Ln+oqGpE4RcVy3KB85SPT(!QCnN^^xJ*Zd>BH{^ooP{0FT*R$Hu1m3YRLX$X zZfAx(P188c%nvYdhSjkj*$I0=r+zvui0Ay~$w<7$BE?jm5|pXDyfR_A;Jtl1uy@O! zJ#|KA5zO=&NL^_+%z7G`R*|4W9Eo=6tmyG%^EXeI9&}dpBEb_JlO5@+36$+S%U1SC zYlGU#vWYWrg$E$U=caKdVE+ z!CPV=vCf8qMPeY5Qy}?q^la4;eU>dc1%EPF4qjY|GVMX!X{3mQ?s!Fxhgm5~lWmpH6ClV;VK?YlyABg}Ow&w^F+d~Rx@ z3L|~pl*FD8m1x-nT`j;ZVAlA|*l}3a6s^+5(z?^*q#ycRixY6?12M*GHXQ>+j~3RX zLPXVhYlG-7RRBmA0`h%UZC>VT6m{xNSVpTnUSB%ICT_Im=TU7eQ&)h+XiIt9b}aGC z39}m<9sH>xK*XIY#x3(Vm}d?EQc+e3h~C6W!Av0*f6egBAsB?*nVi*en&1F*rhg&i zW~P~MZh3|@<3#S#F&T2Kee6+WI?IZxlBO8CIlrCdr8WpzigjeL{BZxc&T@)Vd9dss zz{yII@2`$To2=6@P`_zsS>7~Ep2UTacA6}(JXvVojH8Ea-=*lN6dlE-BR24x<=@x2 z%vgUv?e*x?S#W{VseLvLk&ciD=2Y6(Mc5xHVYh?K70}tmxlg;rExVhCkcdtv3k2AC zT2W^0)5;o|*5)Okv^R^&aivSpycwOlbouwq?6G>T&N81yPW<^g%f`NR9E0Hrt{IWJ zmy_*EM`lALPiC27olzlM-Y#xFlfA~oY0SU3w!H(#J&M*}`%8P^x=2EZ`Z*Jeb8mGo zwFf7G)L_685EiAMCzAbknn+<~)8v`Nc(8JLAofi11RR-3Ntw(fJl8iCoST z$*a=hz9tyy1V*E?OWDbNEE?LeBAX!NRmd}R5mJfSMaL{fgL81hA~eldT|!nM%Q4E8 ze2XcqtQvQ?!}$s0m6-6iMmRa(ARY{VpUjWU?zD;;XI<`%>LN zX1lX6g6#t5G7nB(Cm>JhDG->j=m}-*t2li54o73TA9~HPI0c<%PuRMq)i7^a#j5|Z zCmz`b&x3`tvd(AYqn8zHf3&RD!tYVbD);wP(CQ*{#pb9jKK12!YJ#5FacwA|sQ)dD zh_Gu)XF8jOKGh53Xl?<8?VuI6!EeA+XGM}_!Pb23^Jd3_ibvBaSVy;}`ydm|7jUC2 zW5?Od@(;b7dx~Hc+A5tzpso}i8K#``o7ZtGtVoWbx>{$MPglTS#H~Z_W~7Vjh_zT+ z=e1kL;L$df)%C1S@%T}9+#I`eai$`SGs+kVr_IOJtB*R>T2fX$+|_FJ8#4|xwn_gdXQDx`F~2~oH)(I3 zPHnKM?mC6jK4fP3p*qtnsnb|-dxJWKQ@{D9PF zba}Jmfbn#1uAECj>MY}?C9x5GG}jJu(XAat;U6L;rLz}9E-y3bDsFliH$^3|>*{0l z8s<~g(B%8lHMqs}@AI;) zgYF0V`1AsT)i zD6T^Xb|#`Bce)RYO@w5NLhjh?G`{@!o3UP8)!1KcIZTQ~lv$2?#xbEEY%-a!g|ozY zkjQtY%vwr?;*=;zs$}>8f(jR$ZIDn(Vnd3ys?zq{dAs|O?JHj7z|CTrhW7=y-?495?ZtD*PGzcd@dR`zVCSR6$;aOLy4<#O?4)r1XfHFTaGXE} zA&{Yqc@IiqeV~9jyu-x_E?_%F)q%_fg&2R+V3?k7?@<@!uI|&@UX-$K4oA7-50dqL~33A|}k$%zF-K{w~qXTZrt3s7^EYSl^z*=2Q@M z!#4RW?tRf$w;3xlOO`Lf`Ge@&;gE+Rn>B-W;dQeRvToyMjUSEsi{M|&Rrag4u-g&F zOeh5j7&|y2)fB)Tn=!$ueDdekNFr6@LU!;5Z_9nS<4}OV0eGR{Ka)!RKNOqv3qfyy z>5T8u;s}+a5KP+Y`$fp4v;2$`ExCOrc(dRx!9R=9dfz@YULaTpxt|&luSo}eC+7L7 z2r*5he&{_&R~5hNG3i;FW0+LqT~lDvT|Vyk4gZ<~KOJAht;UOFX@a#^E0z}qEmovV z7F}NSUJM<;-8xz(-FzeNx|r|9OfvkB7W?TLLbX6kUn4boIG{T}G2H!%k$ z6{tCepDK{^Ae~>tj=G`yFcpQ^CM6@A5MEOdrUPEi!E*&`3Ko%(NAxa@#f;&#&c&9C zAn{YM;Nj>UbPha6$qmoeB03R~mMb39_R=}R~Y((nX#uo3ot8Y`ne6RnUf6qBE#`HZzdlg30i)5nxCzC)h{k^hAy zJf@_K?E3(Z;I{lV1wpz;X0(sY(_>iQe!2wpl~a%5lozC>(q(A@J3UsW&y5`T=^K8% zpK4niDU>S&LqnUf2)Hu8tzQ0gA0>J3mzv<|BPe? zX*CkNi12d!O~E?40WM6ss*G#+ll*Tr#wVeC7Ge)`&2P1dLjq5PTUz}Ma$Xz1 z!Q+zG4*x5pgOLU+IIV+yDBKYIC4R#2h_WTWA-Efn2ZU=3HU#g&oJEA27iX>v3z6MS zEoAN(9KM))OLU{@SmAsz){UVd!i^AaEPirn#T)6J;H+gdmPUy3j${LZ8H<1H=JrUJ z_%i$|H$k}Pg_}T=XglIx1CBsX5uI7YmXol1aJx-nIhio5ib6WjWe;>y@!gBLmxY^2 zv&75O;86b!bc!e`$)*i7n~cgrnu79LMyJuKWFXQNnE7SYNT&<;rf>@hRSw-X2xu8C zr4`^%$XIYnolP0hJua3_%ysx&Mdyibn&@!S%?ithw`Fu8{`I78#?$y<^+@nld~SQO z_)nm($$tg7DZUlk%dZ5d6%D`~uZS=XNHR9&Gahs^p6{8iOqwS6T9oNafQsIWz6L)x z74HRppWJFFi^k>efFfeP1JP57cTk3x6>x(`1hu&68Q_iw3a*ZS2%EVH?q)*dAD~+U z+hCt8=T?sezJTNiicLhwp66RJz- z+&+yM=}&@hyT8LH+QmgCj_+gv92 zGr=aobD{~aNngji!R9jebXAE@;5FV#(neq4XpFp)TF_lPoek`Oj@xm$*mTJw`jl$!>3V~h3l z6s%3Uvb%8c27GnIni1}4VoN;Gd$6vR?!!kA58W)>)09bA+C%p_+>7wyr6(Qk#FF*e zOMew^J$-20>J88*!nM+js(eNHbXCtI9p=+>!r2|>(`Uk=!`!l=$r-nL3#fa_4xtvG zCqwjva2O7P4Uwz2c#;%_=v(2Qrkjm9_~LdwztcK{4AYy{!XXWB4K204F1*JZrb}yB z*6Q_#9s>7EhkFdV2;JatuM|E6?zawi7IZ~)yTh%8u88h;xGm5X)8h{JJLrn(S%>@9 zyBj6Xv0oRN6Io$f9gWlfssl!!M^3d z!<6p?Y7oxuVg#+|(Dn6=q~{$Sm&GWm8QI>huWuA>5bguTI%^DT@b|Qv*)jA{C(|)B z`b5^*rsL?h!flQ(EgtF{M|TTnkA56IB-}cxq!XZf%Hd7{cM`qmaBHwTji;A8+PP`G zMV|<}U)_Z6C(u6~Zhx{5xCFmG(SF~Jr9L%*Ds4_(jyj$|{67y^*R9KNaD5%!zM|2- z3Do3p-HT^Hmlci!b%VRc(Q$th$$HUYxx7&=r&|#BCWSNly02re(5yi*e2684#%NQrkN+% z!R#*`4sMRkNidUXzN6z{Ceu>k>}i@z=L%`x;7Hou{ZxLx#GhRW_4K^MargD~0MzZ>*VD@mcNeCqo<4OrA5Kj5ti+xNvsZ^)wC~`rj{c*V7b7$#K`yY@1UYcRjT^9LLS1qLER-0(|D7Gl7a8b~9G- znb^U#c#p*L!&{@K7!L6U^}?%+q7gt%LrXwgj;Y7veM4e#1t# zTqgnD?)=UxIWpZ3E$T;Ror1#@RQsY>|4S1C8 z^k@&$Eh7IQ$XZ)s2Wm?`2y$2l#g9Ea+osja_O=bn@#~@05hIwN(02DW_K@`2*jdt< z?%~VF&KblN!WG7ZMQ|14ilOdfbQvxaS2M2Fcue}qibEKOFb-iH!csIZ1zid{i8sL{ z^hvl%LY9QA46-uF${;I)tPCK1*Zu%Fj~|o%o1QR z{aonPf~~+3+9>p9U{`t&*qe3(6}=?*Io*%_;t=sl$)gjy3a z2{j6(TdBC!c)^5bx{KIb-Q`vzrmJ-#aSpB4eakMVjWE5QT6IC;uYrlgEwoX)3h$t6 z(fD4vMO+*}5RcMbpr4=zfiKZ+;On$Ur}7V?)rJC}f`^iPwTC_{C{o9Y{c2rY(o?;z zZ!9}OZO4l#Vrf*TCMT)h>UTJ}Z&ue8%mRHm=-z69AfMKHD?UIR&}WpaP0d1H|qBi+mPv8%z7BH{5$^%#BzJV07N&$ z{R|w94LkunIp9W0Pma8YX11fQ1s}um;k*@Ur16FRM(@(KuFfrLfHo0qH11MEf{S3!;m(xq zUl)3_dO6Q$wCWgM-#4qt@ipjWa{NNW+OLZ7zbf{tgLy^9c!Qg!c=`|+~gVBGB9 zY78+>i``(%k*E)-D+7IKj*Mf!I;-G5DsKW4)<~`F}STy=jYY98dP2M7}wcSNvrj7W>2*M3wwrZr7ZH5 zvQIRqOkkm_Q9WQzSFhv4T%J#Drw=`6xz@-YaG{tss6o-YU8@b=IvQ19*EZFtDuAnz zz>m?*Z=zqhT1DGWbNBspHZWar!re$a4}h!vKdx!0r&(&FaX3%AHyU#U*B5E`=a>`^ zB$ZaU!2LRvdZX@EWTMo4sU)XS*CZFauat3IPea_z?maX&y3svSrwV;)q&`D7mP8^4 z$@BR>bt$?WZd{51T<5+?25_lV)kvK#S?u17X~hPNt?737SsK0Hy^}r;{1MnxV7-I} zynP9plI@qTJ1I=mb_tEZml2let!v zVZ+%&{k-GNmyC0bspe|EJK0kyH92~Qx!+h*w#aE^eG-kypfboLo7CIz_ya%uMTg*LVS4=^9A%b|^`v-HiaaO?|vr_NGmp7|Yuf?rW zKQFjN@VwX?<~>q4k4Q3m>uuq0%xewadLNN&Dc9Pl*TZ{zP;iiEr`SI!_9J!Bdy?l# zv24{J2ByGfL*5L*22X=N>{(?tU^*}n|h zft=j_kvT923RQ7eHDsMWwn)LP&!wGQ~C+5mi3UFPXd*U@TE9X|3hMkwp6 z!vp?8pw*3b;8smLf&J-0;BkVZ=yA{!MLvUG2mLdV&lg-uZhsv$Q6FHIjt8!zS^g1} zqZ|FB=o0!@jK{k!R7bh%$pDW)q0M+!Eok1dGiD~_vGMC%kc-Y)cR!TmO^x$zTv z2XMd8?+UF9mKz4kD~0YR^hlxS3%yQohu|*3-J*R0w6)r^Pel7gL@suuT0+~H+!xW9LZ>TMw%>Y6l@jTF1TB8zaV)e zERQr694V4{o*d-`8ij5Z+%C9VknmXv!w?)HI8Si9_e;q4d2@7Xz#?Cct_kc5ybBTK zF^&+NC)gsmO>mdsK0(T7%Xxw=g4+al3GNdd5fmH2ZGyW5_u29S*0xNN+de@mWKo6S z2*G)RErQ!@I>a{H1a}GU6QnTYIcsv#a=XU6GOh<)-P~WgN0~EB%e>IsU|wV1V18#N zJY}9UJ^aH*44>-aIJlN#O(gNXt&DKSr#Y^8&p}9<&c*pzwRS(nl~YrGqpa_z6r)=~GxH>04-%^lxaBbQp(t zey8aN)QYt(H412|LCBw9RRi->EikS|0!v_7MqOZ8MrE)pqY7mWg4j7=03;$8}}dF@0*{R!##67t`^Jy1Kzw`M_5|w z8HQhSe*9O07pfoq<-VNSYuHlHP`ru#*uxsG0KDDcjTKiM7tcir3Z)c<(goXa5?5L7 zXZ8IPzfhxGJJeo1hW6^aa4*$E)PLwjb7Jo1`q7@L%V(@?%&g44Q(xCsF>SkPE=#Xk zm}zQzL;|I2S+-E>K6Bpb4Z|mu>nJHfXhjstKvk=WvTxqP7 z9aG?OC&Mkb@#V!8^c06% z_N#EcSwSpwlMV*ExGR*3;1${k;xG5zMLoyd>#iWEJr#*mOr^Y3YaU{Fm&J?!=t=Dk6U}g-e7nkVhb+}x;!d8ue&GD8}5$&!>yt4h;TDg z$A?=EanHHSH*`^<+|CVgw^#UAHdLvVxx*WJq!4FoC3kay55aj2cLh#2UXIi21ig^m zpO>4s@wSS^KGV)n%U529syEDJ5SL+?;n}(P#mRs+yMXSFYejC%#g#bGq6e25ZmmTd z4rbNG$9fiXRzr((cU`<-n6E-}-oh<=u*ek@I=s+})P-9%D$W3!`yCdfks|F*A^)Gd zQWRR;HvN+2x)RH(@-wx$ujl^(oQp@c delta 14226 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 constraints; + + public override void OnLoad(ConfigNode node) + { + base.OnLoad(node); + + constraints = new List(); + var cnodes = node.GetNodes(); + this.Log($"Loading {cnodes.Length} constraints"); + + foreach (var cnode in cnodes) + { + switch (cnode.name) + { + //LookAtConstraint + case "CONSTRAINLOOKFX": + case "LOOKATCONSTRAINT": + constraints.Add(new LookAtConstraint(cnode, this.part)); + break; + + //CopyPositionConstraint + case "COPYPOSITIONCONSTRAINT": + constraints.Add(new CopyPositionConstraint(cnode, this.part)); + break; + + //CopyRotationConstraint + case "COPYROTATIONCONSTRAINT": + constraints.Add(new CopyRotationConstraint(cnode, this.part)); + break; + + //Unknown + default: + this.LogError($"Unknown constraint type \"{cnode.name}\""); + break; + } + } + + this.Log($"Loaded {constraints.Count} constraints"); + } + + public override void OnStart(StartState state) + { + if (HighLogic.LoadedSceneIsFlight || HighLogic.LoadedSceneIsEditor) + { + if (constraints == null || constraints.Count == 0) + { + ConfigNode cfg; + foreach (UrlDir.UrlConfig pNode in GameDatabase.Instance.GetConfigs("PART")) + { + if (pNode.name.Replace("_", ".") == part.partInfo.name) + { + cfg = pNode.config; + ConfigNode node = cfg.GetNodes("MODULE").Single(n => n.GetValue("name") == moduleName); + OnLoad(node); + } + } + } + } + } + + void LateUpdate() + { + if (constraints == null) return; + + foreach (var constraint in constraints) + { + constraint.Update(); + } + } + } +} \ No newline at end of file diff --git a/Source/Restock/ModuleRestockLookAtConstraint.cs b/Source/Restock/ModuleRestockLookAtConstraint.cs deleted file mode 100644 index 8ef71f2c..00000000 --- a/Source/Restock/ModuleRestockLookAtConstraint.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; - -namespace Restock -{ - - public class ModuleRestockLookAtConstraint : PartModule - { - - [System.Serializable] - public class LookConstraint - { - string rotatorsName; - string targetName; - - // Cached components - Transform target; - Transform rotator; - Part part; - - public LookConstraint(ConfigNode node, Part p) - { - node.TryGetValue("rotatorsName", ref rotatorsName); - node.TryGetValue("targetName", ref targetName); - part = p; - rotator = p.FindModelTransform(rotatorsName); - target = p.FindModelTransform(targetName); - } - - public void UpdateRotators() - { - if (rotator != null && target != null) - { - Vector3 targetPostition = new Vector3(target.position.x, - target.position.y, - target.position.z); - - Vector3 lookPos = target.position - rotator.position; - var rotation = Quaternion.LookRotation(lookPos, target.up); - rotator.rotation = rotation; - } - } - } - - public List constraints; - - public override void OnLoad(ConfigNode node) - { - base.OnLoad(node); - constraints = new List(); - ConfigNode[] cnodes = node.GetNodes("CONSTRAINLOOKFX"); - Debug.Log(String.Format("[ModuleAdvancedLookAtConstraint]: Loading {0} constraints", cnodes.Length)); - - for (int i = 0; i < cnodes.Length; i++) - { - constraints.Add(new LookConstraint(cnodes[i], this.part)); - } - - Debug.Log(String.Format("[ModuleAdvancedLookAtConstraint]: Loaded {0} constraints", constraints.Count)); - } - public override void OnStart(StartState state) - { - if (HighLogic.LoadedSceneIsFlight || HighLogic.LoadedSceneIsEditor) - { - if (constraints == null || constraints.Count == 0) - { - ConfigNode cfg; - foreach (UrlDir.UrlConfig pNode in GameDatabase.Instance.GetConfigs("PART")) - { - if (pNode.name.Replace("_", ".") == part.partInfo.name) - { - cfg = pNode.config; - ConfigNode node = cfg.GetNodes("MODULE").Single(n => n.GetValue("name") == moduleName); - OnLoad(node); - } - } - } - } - } - - void LateUpdate() - { - if (constraints != null) - { - for (int i = 0; i < constraints.Count; i++) - { - constraints[i].UpdateRotators(); - } - } - } - } -} diff --git a/Source/Restock/Restock.csproj b/Source/Restock/Restock.csproj index c4dd63fa..8c469675 100644 --- a/Source/Restock/Restock.csproj +++ b/Source/Restock/Restock.csproj @@ -44,6 +44,10 @@ + + + + @@ -55,7 +59,7 @@ - +