From 2db55ef6fc9ce73ecec35d2241d2faa4082f0441 Mon Sep 17 00:00:00 2001 From: fry- Date: Mon, 2 Feb 2015 23:08:57 +0100 Subject: [PATCH 1/2] added a demo for 2D fog of war --- demos/2d/fog_of_war/.fscache | 11 ++++ demos/2d/fog_of_war/engine.cfg | 12 ++++ demos/2d/fog_of_war/floor.png | Bin 0 -> 572 bytes demos/2d/fog_of_war/fog.gd | 86 +++++++++++++++++++++++++++++ demos/2d/fog_of_war/fog.png | Bin 0 -> 31448 bytes demos/2d/fog_of_war/fog.scn | Bin 0 -> 3714 bytes demos/2d/fog_of_war/fog.xml | 29 ++++++++++ demos/2d/fog_of_war/icon.png | Bin 0 -> 3639 bytes demos/2d/fog_of_war/icon.png.flags | 1 + demos/2d/fog_of_war/tile_edit.scn | Bin 0 -> 1443 bytes demos/2d/fog_of_war/troll.gd | 43 +++++++++++++++ demos/2d/fog_of_war/troll.png | Bin 0 -> 7246 bytes demos/2d/fog_of_war/troll.scn | Bin 0 -> 1839 bytes 13 files changed, 182 insertions(+) create mode 100644 demos/2d/fog_of_war/.fscache create mode 100644 demos/2d/fog_of_war/engine.cfg create mode 100644 demos/2d/fog_of_war/floor.png create mode 100644 demos/2d/fog_of_war/fog.gd create mode 100644 demos/2d/fog_of_war/fog.png create mode 100644 demos/2d/fog_of_war/fog.scn create mode 100644 demos/2d/fog_of_war/fog.xml create mode 100644 demos/2d/fog_of_war/icon.png create mode 100644 demos/2d/fog_of_war/icon.png.flags create mode 100644 demos/2d/fog_of_war/tile_edit.scn create mode 100644 demos/2d/fog_of_war/troll.gd create mode 100644 demos/2d/fog_of_war/troll.png create mode 100644 demos/2d/fog_of_war/troll.scn diff --git a/demos/2d/fog_of_war/.fscache b/demos/2d/fog_of_war/.fscache new file mode 100644 index 00000000000..ba5e3995f3e --- /dev/null +++ b/demos/2d/fog_of_war/.fscache @@ -0,0 +1,11 @@ +::res://::1422910453 +floor.png::ImageTexture::1422910453:: +fog.gd::GDScript::1422910025:: +fog.png::ImageTexture::1422908128:: +fog.scn::PackedScene::1422909435:: +fog.xml::TileSet::1422909324:: +icon.png::ImageTexture::1422811193:: +tile_edit.scn::PackedScene::1422909313:: +troll.gd::GDScript::1422909940:: +troll.png::ImageTexture::1418669358:: +troll.scn::PackedScene::1418669358:: diff --git a/demos/2d/fog_of_war/engine.cfg b/demos/2d/fog_of_war/engine.cfg new file mode 100644 index 00000000000..5c4307b5bcb --- /dev/null +++ b/demos/2d/fog_of_war/engine.cfg @@ -0,0 +1,12 @@ +[application] + +name="Fog of War" +main_scene="res://fog.scn" +icon="icon.png" + +[input] + +move_up=[key(Up)] +move_bottom=[key(Down)] +move_left=[key(Left)] +move_right=[key(Right)] diff --git a/demos/2d/fog_of_war/floor.png b/demos/2d/fog_of_war/floor.png new file mode 100644 index 0000000000000000000000000000000000000000..07b4f8c98f615f90772f43a4c9e427bd9e25cd17 GIT binary patch literal 572 zcmV-C0>k}@P)qWwXI zR(33Zk^I^%KHgf)TI1>%w5^Ll*9|e~2Oopsx&i(04PYwAbhwNqfX3}(*SQCVy^cWC zq;A}`{IOpRm`;&Sx&~=9GL~^}^d_NbR)NMO6iwsy@w(BQgrfN!kzf**hGi0p#<}?& zt}+#0pYM82YL6bWyS)M6#o`j-lT%G=_(qx{SO0S7QWe>-20$?pdh+B5Ya4sfu zF%y7`nTp9A!@06M03pCy062zIWe)(n55m%{y4mw26iwT@?K3yeWS-nXuZcljTkivO zYbPwts+&DeLeX^HaN~XXkjd1x)@x$meW+^--P)zQOsiRSv*$@Dntt&2eCym}GJw@< zVlaQcWv`vEG^=j*JPA=lF$q_rH!aej|In@=eLgjBs_%4GKE=_DrGS)AQ8WOAl}}ML zjoTNmFYS%pv3vikL#e?mmDbJ^MFT)s`4mOt9Ew;UVtt?~HAqXQpC^h2^J0VEM9J?K z<*KlnvCMq{FA0IUmE*(QqS52QD-^1DSEq%l!60Db_vczt!jJ^zsa0000< KMNUMnLSTYe^a4-- literal 0 HcmV?d00001 diff --git a/demos/2d/fog_of_war/fog.gd b/demos/2d/fog_of_war/fog.gd new file mode 100644 index 00000000000..9da5680e4d0 --- /dev/null +++ b/demos/2d/fog_of_war/fog.gd @@ -0,0 +1,86 @@ + +extends TileMap + +# member variables here, example: +# var a=2 +# var b="textvar" + +# boundarys for the fog rectangle +var x_min = -20 # left start tile +var x_max = 20 # right end tile +var y_min = -20 # top start tile +var y_max = 20 # bottom end tile + +var position # players position + +# iteration variables +var x +var y + +# variable to check if player moved +var x_old +var y_old + +# array to build up the visible area like a square +# first value determines the width/height of the tip +# here it would be 2*2 + 1 = 5 tiles wide/high +# second value determines the total squares size +# here it would be 5*2 + 1 = 10 tiles wide/high +var l = range(2,5) + +# process that runs in realtime +func _fixed_process(delta): + position = get_node("../troll").get_pos() + + # calculate the corresponding tile + # from the players position + x = int(position.x/get_cell_size().x) + # switching from positive to negative tile positions + # causes problems because of rounding problems + if position.x < 0: + x -= 1 # correct negative values + + y = int(position.y/get_cell_size().y) + if position.y < 0: + y -= 1 + + # check if the player moved one tile further + if (x_old != x) or (y_old != y): + + # create the transparent part (visited area) + var end = l.size()-1 + var start = 0 + for steps in range(l.size()): + for m in range(x-l[end]-1,x+l[end]+2): + for n in range(y-l[start]-1,y+l[start]+2): + if get_cell(m,n) != 0: + set_cell(m,n,1,0,0) + end -= 1 + start += 1 + + # create the actual and active visible part + var end = l.size()-1 + var start = 0 + for steps in range(l.size()): + for m in range(x-l[end],x+l[end]+1): + for n in range(y-l[start],y+l[start]+1): + set_cell(m,n,-1) + end -= 1 + start += 1 + + x_old = x + y_old = y + + pass + +func _ready(): + # Initalization here + + # create a square filled with the 100% opaque fog + for x in range(x_min,x_max): + for y in range(y_min,y_max): + set_cell(x,y,0,0,0) + set_fixed_process(true) + pass + + diff --git a/demos/2d/fog_of_war/fog.png b/demos/2d/fog_of_war/fog.png new file mode 100644 index 0000000000000000000000000000000000000000..56980c298d5ebca56dd75badf3474e0788267ce9 GIT binary patch literal 31448 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 MQP7ZY1X_mwA5s&$i2wiq literal 0 HcmV?d00001 diff --git a/demos/2d/fog_of_war/fog.scn b/demos/2d/fog_of_war/fog.scn new file mode 100644 index 0000000000000000000000000000000000000000..4987f1ead5198aecede135b9d290bd9fc2676553 GIT binary patch literal 3714 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 literal 0 HcmV?d00001 diff --git a/demos/2d/fog_of_war/fog.xml b/demos/2d/fog_of_war/fog.xml new file mode 100644 index 00000000000..ed08d84a1fb --- /dev/null +++ b/demos/2d/fog_of_war/fog.xml @@ -0,0 +1,29 @@ + + + + + + "fog opaque" + + -48, -48 + 0, 0 + 0, 0, 144, 144 + + + "fog transparent" + + -48, -48 + 0, 0 + 144, 0, 144, 144 + + + "floor" + + 0, 0 + 0, 0 + 0, 0, 0, 0 + + + + + \ No newline at end of file diff --git a/demos/2d/fog_of_war/icon.png b/demos/2d/fog_of_war/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0c422e37b0ea9e6ad2901c8d425cb12f4d37694f GIT binary patch literal 3639 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 JPDHLkV1hBt8>9dL literal 0 HcmV?d00001 diff --git a/demos/2d/fog_of_war/icon.png.flags b/demos/2d/fog_of_war/icon.png.flags new file mode 100644 index 00000000000..dbef2209e80 --- /dev/null +++ b/demos/2d/fog_of_war/icon.png.flags @@ -0,0 +1 @@ +gen_mipmaps=true diff --git a/demos/2d/fog_of_war/tile_edit.scn b/demos/2d/fog_of_war/tile_edit.scn new file mode 100644 index 0000000000000000000000000000000000000000..aaca19d3701ca7a8bacf6fea2f340fcd6474c0d0 GIT binary patch literal 1443 zcmX9;U2GIp6h1Sv+i7?EU)t?|?`~UxkkSe^BJy))r?hEMi!F%}6KAHgcXubu&MY&t z+m_!|sG?2e#Xb}wE@A=?ypS4VM9tbpQN%*1#OQ6j$(P)7^WAg4 zbI-YFd_tCCZPfyts|1(}0&oBY4!A;@3Q$Rcp?#WukR~Q{YEe?<4*~?pE>(eQQeN#) z*UmXQ?YFcHg$hz9Dw8=YVbX-!S?21Fk@fluWgPIN6UvEDzMoEeIfp_m2@?!&@9$5V zw(V@rS}8x!RaCKyvr}pZPC$%uoHC45LA)sD#gfTZO2oxnwN$KQX9$}t}$tthBwo%hB%Y@Vv}HJHJx;F z(Ci2M0xmU^N~sMEbys0DI7!onl^_Yhp_ZrKtMnYra+9``>Cf7(UslIEwx@0Ixo&XD z;|mANl??SXMS(CmCM4|?A&2-wIjY_cPGlX!quLmF7i{T#jORV-M9<@+pq)&*)Kf#j zq-kW8w9kbguRg=)lTP#wxM~>E#jvzT4XIb&vF?wh(U=^3-v0CkW(Q=`-mn-Vt@%vJ~CUMK`g-R)kV3SkX^>zBRspt$4p8 zuQ`Thc`kI40qG_*5wQgEW}L(UfwjVJtU-t$C_$mE)W9)Qh(CuXF(Lg}rzkXGc($Wt z&0NZ`6xWMZfEzu78*o3vKup1UtVRKES7eQ8YAUX!Wz~%cEUX|Lw(X31LO61A-)^kM z@A;fdeXb8b#b*4Fx09~=vDj1!Enh$N#xh1wP!Hfy7$C1OZWy)}PRo5*4>hEfOVH?J zA(i%&n87JC>NtP&XQEDFOgNm>9CaPb;gQTPxqQ;jt0FU>ierPcO~@N`O5XXJgT45B zya}VY#3hU<;Vqr2?Q5AMHpk0h8jlnk3!AYKX8iI-90HRJ^?U`6Hu!}&G%691T6x2< ztxW8m+Qm{!;C<}sUMWl4DOM%Z4|L)cc}8mT1@K=kF+$P*r{v!(Nh`xQmODV{9RRAo zy>uNrx=#kQoarh0>B+OD4pb8@|HLF##im0A@$a6Y8xT+hxZnv-%_0hR-OCh2jXxB^tI zlmEh@yRd`#n_aD(4d@P~R_`p5p+9<$;XBg!aQf@x()8uyV4r>!r{=E2B`5F+6*}6fTIRE;vOtaV5zQ&kt1;=SMoz5B*@O0JtJu8xh!t zCuCiq$i~*cMIa#+uv*%I-yjUXi(&i;!$W_w7|&w^zK9K9UX%LSPR0gS0i4HQQ6JIp zB_?}}k^hJ2NA!3I?RXxamEOmxxPdiN3yM%j5^NgP7ezdRbJ7Krp^-%J#K>>Bcg@>+ zh>%);(;}Xc1iXQlqzKx~X$sF_xBv7aK3F3y#y2vGwABwUN-{1=>lrTM6fWadrn38P fB!%mxlr+a4rA>;Ae)Rgh$TEZRiE(+HjpzRWum!p` literal 0 HcmV?d00001 diff --git a/demos/2d/fog_of_war/troll.gd b/demos/2d/fog_of_war/troll.gd new file mode 100644 index 00000000000..d118d3a2bad --- /dev/null +++ b/demos/2d/fog_of_war/troll.gd @@ -0,0 +1,43 @@ + +extends KinematicBody2D + +# This is a simple collision demo showing how +# the kinematic cotroller works. +# move() will allow to move the node, and will +# always move it to a non-colliding spot, +# as long as it starts from a non-colliding spot too. + + +#pixels / second +const MOTION_SPEED=160 + +func _fixed_process(delta): + + var motion = Vector2() + + if (Input.is_action_pressed("move_up")): + motion+=Vector2(0,-1) + if (Input.is_action_pressed("move_bottom")): + motion+=Vector2(0,1) + if (Input.is_action_pressed("move_left")): + motion+=Vector2(-1,0) + if (Input.is_action_pressed("move_right")): + motion+=Vector2(1,0) + + motion = motion.normalized() * MOTION_SPEED * delta + motion = move(motion) + + #make character slide nicely through the world + var slide_attempts = 4 + while(is_colliding() and slide_attempts>0): + motion = get_collision_normal().slide(motion) + motion=move(motion) + slide_attempts-=1 + + +func _ready(): + # Initalization here + set_fixed_process(true) + pass + + diff --git a/demos/2d/fog_of_war/troll.png b/demos/2d/fog_of_war/troll.png new file mode 100644 index 0000000000000000000000000000000000000000..69f195d0341a794babffb7ee668461784eb2b7ba GIT binary patch literal 7246 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�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 Date: Mon, 2 Feb 2015 23:29:19 +0100 Subject: [PATCH 2/2] added preview picture --- demos/2d/fog_of_war/icon.png | Bin 3639 -> 8681 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/demos/2d/fog_of_war/icon.png b/demos/2d/fog_of_war/icon.png index 0c422e37b0ea9e6ad2901c8d425cb12f4d37694f..a48339004857bed67c00b853b98d6878fbe6a143 100644 GIT binary patch literal 8681 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 Hu0mjfiy!Jx literal 3639 zcmV-74#@F|P)% zTW=dlcE^8J-Ay*{q(oh9OO|A7;eH2=!1Jp z5C0zc2KWk?215PXe!_SUJO=(_`Q?+}^=cr_UI+yL7Pwg`9{-fgeKe$#8Ss_y?O8>1 zDB#}G!+!<-;e!b-1SoaIE+k4R;A;IqOA-IJ{PM{^Hm_;TFCScZ03nDbM;V)%qgpAV zJa@3iq{h_D5(tUasPG|#2dFpdnBmCJC$dwcx%}?$A+UhJ?En2k2yd7%l9_Qv(pe_s z$=3DPdz<7oUk}trW@45vW^T29?^jA3og8v(-Z~!X}2)dbauR$Nz~^-i5>BH$VGpJf)DL(?!{?OWC$qeYZlra&i@RNhdS! zmtQ`a(}K7E+j^sZ>CS}I_|=176Vh}vAy9x2UH%n4p5i#adv0Gh7VeQWBY^1YLkKW+ zo$KS**gn_}6nVMfVTL2=iR{#S34C)^({GM#DFjl;t~UqZcplTq42Bu?F9^}`5kjJe zOr}zqR$ph~_bq*zS9Gp{%-=}-dH(X~!Duh&(r0{fdI10_HKf#oj|M`J%1#s3^p=q4 z;))6g@Rg1qa)YN&Q&A4fQPDM z6V;6io9j{|e#S`}QtRtDd!gaER~`ZZLIc>^MerG^SdFW9H6ZG??bH1LIyhee1B`DG zj8``>%Z~x26w31uasdBxfehy=K+^^=>5$16U;c{8coOf!nB|4YMq}K+|7(nJ^uo5< z1;bLC$WDFRD+b7n&+z5qJ%kyjbdm>Dmo~?5EOKxD4pAf2GjRE-;3*Zv1J|()lk!Qv zjki-Cre>E|y19g{g{Tydy81E05%gXJqNyxj%-+URin;6rbJ+==uD_}*?r{yWd{MZyDi44zI{t(Oxisa}NU(VfWwf$^rhH9lq`8e0rm$fBI zr%q5QW)|+9D||aXHQ_IU6oRO3Ff)I*^Lq13Vq}Whkuf}V{&e;!3w{xAo>E*-jgTI{ zarz8^)O6-=ECeR>0b-+16it7ybbSFCOpg-4b6qSah_3z&Q1@Is*8y5XK=J0yGE&Ia zLgW78{4vQY#Yz>22BzThah|AdM>J8Z1&u>NkFTD5_$Ys@Xq5RFCf&YM;P zvp&y+J=bG&e557(Nuk91)h%{5b1l7^kuVEOH&6Q;0>fE=0NZhx|7^B(X=81N=P#b2 zX?|BPUaYV%cbi+E&oOmloVC}RJ-bp$VHgIwp<_2JT(`HPG)-gj+8D0u@#CXs931A5 zng&X-va-TgUq56dn?~0)rf*EJv9^t_>jPWeP!^y(MI>TkM*IcS@!<*2pFhRWL#>>> zVT5?Q_L|+z9Ft{(kjd*;{yw0PXGjFjDwc?~ zc76<9Cln6#vi&S^ zzx&^RCbxA)@ zsgxp-OtgMC>W!gRv_mOCN=dm?ZVA13X935xyV}`ygU^;e!*#qXr^{{2U$xE8-okM@ z1DR&w#N6Tx0M$y3hGh*EB@Q+mu zK44-x%fxh+zn%UY^0^~Cr5K+a1z>k;pL(r6c`D@^nb9P%M2yji5nRXRC|}^{pg^@+L({Zw zh7=&^@Ff72W%rF{r6$>Yzr)FKiA*-d*yJceK)u$WT&!@EFVLu4ms0kn6oB#rlzO$! zZnfSy<^l;c*+clYHsw-A4r+2E;`34GbHE4`L~Oo@+L53heVm*YxLj9ty?dXW!#k{*aTJ z9&E1q({oD!W-P`1`8zOwhxMa8d%N!_9_~P!0;CYE?(d+KBArN)2$^V747|5LOsZ`V zg?dV1c`ml=QneZsipOM9BdzK*T}pE05_Y3XVq}u($r;9D37))JrcyZQRDcm|aC%BH zJCdbg)yP##9mE=*M{es4p6jsJd@dZtFr$P*5hAe!H%BL0%DRkD?eu!JFIo+D4|CLO zWo)aCRjagidH`zGB9pi8wY@a|`r_;&X0Tujg(5U#$Cd(I$7z{4(03UtH61gSVqtcP z-0?oe!U6Siftos^aNuDzYJ7fuzU#R{z0TTJXFjeyY;CXj(De{^W^Q%)9w`J*SH8z{ zEQHh$QW8y!kW7t|O=ehL{;qpVKj_1DT|!dx_XgS&)>44gsC7OVjI?~ULN*%ng>Q~N zAxN7h>8Tl*nrXFr`TYByN(0zE+@*Y+L+XYvc-vSOZGSx1L3u96~u2A!v9mCnY~S)js+f)p8F7)Jh#rB^>f&`4=nyi_~?JnF+?T(>>R$o>G`b z=-jlF49st7>1$G9vuBNup=qs((!PrtrI1o5tZ99R$!_U{ot-u6m6O&6NJu~RQ&zp) zlA}X~YxzAE#->_z0V9bNyN5YSCwU47+Y}DA{D-=hz(K)ckhkl{IDo+S4}E9-ra-FG z4|EF}L{w+46%ThP9`2wSAtH$k>C8AcM#fr>dM&@-!Oy7zgkX2$6$@iiEnkodo1~^^ z@up@d+YJhpGW)p=Mzhy@^R8(Wj}LgQ>6m7ecsNSh47U;(P5Jsc$)8)w%O7~b!s#HlPP?g|DnKcea(TJ4&eHTOXAw6- z#M7h9WU@Wk)})3JieNWtWzFhd;y<6`yTJiO0((sLT0opZSN_?gN3`n zcMlL<@yo{XA&qLWqt7lcaS4~ zpkdW%)T>yHDz0M_4V_<>n2aaM8zDlGIAJqJI2<7yiVzMNg!K@nZnT`=SsqS#>kNpb z5EQKj>#IL@(d#OaY2xdLe>HIB=0#|KQ-cOLgSH(64cFn(@^`*NY~!V~LZl5sNFM+2 zUz`NhV?%9|ox!Q_YM@B))XG$c#a)(e$+md%?0Y=N?pa^lQvphOD9>g2>33`#=Y#Qf zIVCiQkQB02Fnv*bUCLI~`DLuYQ+|QeZs~;Or~lKj8{9m+wYSOY%SRXGBrP4-0dDrZ9dvlSx6ThoImV~wSs0rF=qN+`Q=+|$PYS`> z;XZrYt2nL5_S_e?qvM~eyLk~I$EvgQ{yDoFuef>Z9@ELppImr2b(DMMB5&XP;E(me z@mQP4PDRXcI-!#vDmeOAG+8chj+y4APrA+Q{m*UYL zZXeG+2%3kcnt{-_>15`T$L18ubtxQdQ8?J*H4u&^i6=)%#8X5j&@?n5(E=~u zj#EW=*h=Ag3fpzCU6;Dupj1AgTs)#)F0`HzLS999@K48{t|oqxgOdS-kVxG>A0&cJ zP5+>jPhKenO5rIF<+^yD6D*5Ae8t+?)1yD_(b=959sgQTU0*&p&OJH{kjwA>ej+>d z-V8?`nBhqJDrX5lC8U!X%y8sA@K4JxpZs(Cy}mB`&*k|1{{iVth5oYr`Az@;002ov JPDHLkV1hBt8>9dL