From ebeb4dc8aa1c4c324e44494f8b4631faec20685c Mon Sep 17 00:00:00 2001 From: Dmitry Nesterenko Date: Sat, 4 Apr 2015 22:12:56 +0300 Subject: [PATCH] all source code --- CollisionDefines.h | 16 + Edges.h | 8 + EditMap.sln | 20 + EditMap.suo | Bin 0 -> 47616 bytes GraphicDynamicObject.cpp | 122 ++++++ GraphicDynamicObject.h | 40 ++ GraphicObject.cpp | 46 ++ GraphicObject.h | 52 +++ InitCombo.h | 212 +++++++++ Initiate.cpp | 14 + Initiate.h | 7 + Map.cpp | 912 +++++++++++++++++++++++++++++++++++++++ Map.h | 69 +++ Object.cpp | 10 + Object.h | 32 ++ Tables.cpp | 88 ++++ Tables.h | 6 + TileMap.cpp | 167 +++++++ TileMap.h | 51 +++ TileMapAnimation.cpp | 79 ++++ TileMapAnimation.h | 26 ++ TileMapAnimationEx.cpp | 120 ++++++ TileMapAnimationEx.h | 31 ++ TileMapEx.cpp | 167 +++++++ TileMapEx.h | 33 ++ TileMapParticle.cpp | 100 +++++ TileMapParticle.h | 32 ++ TileMapResource.cpp | 146 +++++++ TileMapResource.h | 47 ++ hge.dll | Bin 0 -> 166400 bytes level1.lev | Bin 0 -> 82505 bytes level2.lev | Bin 0 -> 81613 bytes main.cpp | 517 ++++++++++++++++++++++ options.h | 0 34 files changed, 3170 insertions(+) create mode 100644 CollisionDefines.h create mode 100644 Edges.h create mode 100644 EditMap.sln create mode 100644 EditMap.suo create mode 100644 GraphicDynamicObject.cpp create mode 100644 GraphicDynamicObject.h create mode 100644 GraphicObject.cpp create mode 100644 GraphicObject.h create mode 100644 InitCombo.h create mode 100644 Initiate.cpp create mode 100644 Initiate.h create mode 100644 Map.cpp create mode 100644 Map.h create mode 100644 Object.cpp create mode 100644 Object.h create mode 100644 Tables.cpp create mode 100644 Tables.h create mode 100644 TileMap.cpp create mode 100644 TileMap.h create mode 100644 TileMapAnimation.cpp create mode 100644 TileMapAnimation.h create mode 100644 TileMapAnimationEx.cpp create mode 100644 TileMapAnimationEx.h create mode 100644 TileMapEx.cpp create mode 100644 TileMapEx.h create mode 100644 TileMapParticle.cpp create mode 100644 TileMapParticle.h create mode 100644 TileMapResource.cpp create mode 100644 TileMapResource.h create mode 100644 hge.dll create mode 100644 level1.lev create mode 100644 level2.lev create mode 100644 main.cpp create mode 100644 options.h diff --git a/CollisionDefines.h b/CollisionDefines.h new file mode 100644 index 0000000..73155da --- /dev/null +++ b/CollisionDefines.h @@ -0,0 +1,16 @@ +#pragma once + +#define GRAVITATION 0.3 +#define DRAGGING 0.999999 +#define BOUNCE 0.5 +#define FRICTION 0.1 + +#define WORLD_LEFT 0 +#define WORLD_TOP 0 +#define WORLD_RIGHT 800 +#define WORLD_BOTTOM 600 + + +#define COLLISION_NONE 0 +#define COLLISION_AXIS 1 +#define COLLISION_OTHER 2 \ No newline at end of file diff --git a/Edges.h b/Edges.h new file mode 100644 index 0000000..f2f68e9 --- /dev/null +++ b/Edges.h @@ -0,0 +1,8 @@ +#pragma once + + + +#define EDGE_ID_OFF 0 +#define EDGE_ID_INTERESTING 1 +#define EDGE_ID_SOLID 2 + diff --git a/EditMap.sln b/EditMap.sln new file mode 100644 index 0000000..bd3d593 --- /dev/null +++ b/EditMap.sln @@ -0,0 +1,20 @@ +п»ї +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EditMap", "EditMap.vcproj", "{E9423B38-C119-40D9-93B1-858DB43B8CA5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E9423B38-C119-40D9-93B1-858DB43B8CA5}.Debug|Win32.ActiveCfg = Debug|Win32 + {E9423B38-C119-40D9-93B1-858DB43B8CA5}.Debug|Win32.Build.0 = Debug|Win32 + {E9423B38-C119-40D9-93B1-858DB43B8CA5}.Release|Win32.ActiveCfg = Release|Win32 + {E9423B38-C119-40D9-93B1-858DB43B8CA5}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/EditMap.suo b/EditMap.suo new file mode 100644 index 0000000000000000000000000000000000000000..55485593e32c19eab17d13b10836651544389c5b GIT binary patch literal 47616 zcmeI52b@*K`G)Tl9c4?p~ngo%WrKiei$1K+8vb#?Gs zO7$d;_hwQ9siD+J+FWWZZ6R$bHIa1q6Wd8mrDjrdsfDz)w2ic_w7s;m)KMBQ?I`Ue z(OyO>%#m72t))Gsw$iRrJE^_YLE25)UD`w1LE1}V`%VgbNx4!NsjJjY>Mr$=dP=)U zdrQ5g{!(A5pR|ue8YoZkVUnWN+Hm=ekVZ)dNTa1O(m~Q#X`FPRG(nmuk^aF7_mw6| zeWYqL`H>yQBueyOnU2Mv#5{%b6Gy6)ncFsMHKE9~fppgS{T@sIecqE8oUumLPWeU8s zngrV>va{$Dp$yfyM_*^@U-}o8uiU0279^(YKk^-~@{}c}CT8eUb$PRWj`AmO`Wqpv zI%C|XuVSGe5Hb!tViq3*=>LoZ^nbw`7`sC~sx?Q`7TQcVm_Jf~cN~ajVkE zpL`iFGtHl})~DIYQun_+|08wer>GS4`l?O&NBNRBR<&pOH;f78pEhQT<6JgJ`!OwQ zZ=v0V&&d(#$Im}ms$~1$xIM1o{?oFisy^tO#Zmt&KMJ*pxhYjhB2$*y{zj-|bJgmY z2ab1NDAC!Zsxe?sxBo4ad#3G=`4ZjACBT{eW z&-{eEu_)1M{)xB$e5E^8M`W&3j_>nmeOIbFNH-F7R{qS5lDTJ=|5Evn%1Rb8UH)M% zny;EElPa^0%Aa$``sCkK{yRFc%Gya~`BcT~>ztXTefeAtUrFtxXKwD+Z1wk_`~d%0 zpTCo^IA?Ce9EGxsQ2oz|YMC=vq1poHufx|~8*tT@JYDpOuJMjmtJzzzF1qR)AobF$ zaG+*_xuScCch;y%Z13p%T*Z3ny0Dk%0Da3gz2u)KcC6--MJh+dd`CrRpLnjc*orHGk zuWfso_CMAOX1U>w(m8IHS^#sM)INTYj#G8kx(4~v_D^!c163Q;MQJpLDpp%aEk*hg zaQ(-c2m6%i{>R6k(2f`f4_8?jc^M6pt&Q<6y^%k&*B0xM|1Koy@h3UnbyZ*LsI&Bd z=y-GWIY4D8l3RJt>!(i}wk?*QdyetBCX;e7+UIG^rd=*n{R~vOxmuzJG7?vwYM-?u zNX6~PCfYXoE^m*s9v*W0KWgOsSQ{oZS_ z>vOlZX*2llcUB$Se#+c#P)3Db(^@S5e)-PBuerSFmWy{@z4!WUuT`vCZGS)x>rXYk z`l)y|)KT?0Rjn|2&6I2+8!K(Oya`=|-&977QwySvI2Z@Pho}DGR0-%wE*7cyV#Zne)nu=g%!Jnps#@+;Q%Knolw6 zB#%PT+H-EWVy?=Fo1lI_N3Fh4xy{zUtimSef0?X4aL*z;tF_We=AK#p?d8AR z=ihYgFP8#VV`2SwJNae0|DEOgoYO6wH*;EXX&ImD_no(3&Kz!zXtz418#H1Y73!!Z zSEf2f=ML5+n@huMF(xP1x{@n&9ivrHM!3-%C`D#k$yB*!J?ckYaidL@YQC~a`;uIF z98%-G3iZPon_A}zX~KG^HgvtW2rH+YFBvt*{(UwExY`+A9p~KKZiEOHyEp{-no$ z)vZIHrVNxT7;Tczh`Ql4v8}}U4HoA5ibfp9dLsQFKhA|Pu19u~awO(RuzFIC)J0;< zf~6aO@T<vd|7=4U$GPX#92qXTTgw+#((KhQ7 zk%jX`p5l$nwp2)Td#S0})@F<~+nBX98z8oW;RD$2yyF%yZ4U z$5;=u-e%N&KgFqoea*H~ys!NR#QgFVXTJxTam)wWZ%E9K^JgD@H^PkcIKN_}V}4^5 zC*K2Oeq-!6G3HmGIQbr8MjcGD-{hEIk>ccAY(~CQ?KdOlH(PP?og4F;Wxpe0ex-_& zZ<*NviqE&-A~TNpVzXn+^2ClcJJF0|ezMtVW*qaSW@nml%+FGsV}7m~V_0kZoo~i5 zzryTlGmiN+W;evxjb^_y@j`@4``P z&sLmcUeAnux=>%jxUY*J=ZasZFxo*2eUEKtKia|eW;?~$&StI6Xa~D0PQA1@qyF03 zZ}*tro{Cd1dzsM=_OM^)m|r)=DSLM_((7u!UNOHuij!}@m|t)E<;DE+6(`?8X0(HW z_8SuO8?HF{jxZzNVfGsx^Bb!;`5qYa8)LtTF~3QQlW&0;?ciYh9cD&5m~2*LmM2zh zHq(rDFx#xejCOFiS((`Yu?32A%om&GD!#em*imMjqmDIOYSu>VbhC5Jnu&3YvA}3Y z=j!_{6rN{4<{7{AwwIVOAG*}+3Nz~MO0(ZN$&=;(Td+}zuV0Eirs5=zZr9| zhs+)^8!z^h*aWFP2T;}mDE zINc1t*^0MTxWJ5db(G>w6&@2~&LVM~nZ8b(q&U}BOB7~0k7v7Me$@4Yd0L%X6uaVn z?7oh#Pzq`#Zky`^EJxbf@x2_fmyJ?bo<1`(#Rf_tJ$eoPgU#wG>=3aH5$;!(uk-Xiw$USG9rh{|gZ>7i%`jGBEhHFi5neP&DTUT1@2Ff{1jE`(F!E|BVa#@F*9HnU(DCQKHqXO_XSR}cIP=p^ z(__BS~R+III`ATl3lT5$<(Y5M~{f+XEp18aM*nfItru%=Se8aV6a>OI?aGqfN zV8p|iRnboPuD*ojNaZ=5TFdsoeow5Hs)ZLxGt}03Dy@9&`H^9hx21HHHg22g1MCoq zkrQKH06SJg7!7 zED7Ip6rL-cC!H_-Qo2C8P`XIESYn;)R}yO=zm_hOE|-2IT_G)#u9U8lu9mKmDC%|6 z_0kQ}jnYlh&C+kB-$}Pfw@SB3w@bg5?vU=3?vg0qJqquY{viEPx=*6dKP>%8dQf^u z!gsmCKRf=Y!pEdnr6;5(rKhC7NN-5bNNmG;7h@Rl=M+Bg_}?AAsPHA}W$7Oh(=>cv zQ~0{{p7gfan+o4@{2hlMD|}!2K>ASnNMd{J6UA3cYos5f&!lgq&!sP<|49FpzLePJ zYlYu9{vDy?$tJO+ezGm>D0+tCJ19KUY!AgxRUEtAY^dVDF}upFjo3A2_n7T3cCXp} zW_e-{m_2MZQf#@|V`ilHgxM=*Bg9@cd&6vy*ebJk%(fPL&+H>J()-x#YqK$8-Ae^XF*vt+$&r+9tEvCYj$Zws^SV}3iB?P4}uemQ1s%_v_xvpvj6Z!fdGV}5~ga!W9(|P8_h<^?jnoIO4_%hoAJgJ?95tfP1x#WyqK7&TNJ zYizcg;!Vt&nKc(X!hL}<2y%ooX znz0MR6es_YW*m>6_B+6AE3t8kH&r;^teN6r2 zH&*0Gk3P6V3ZuQSQioqV`@veJFv_x-7}mjltrcgb4(nnzN%1{W7-LgUv;Ov@e5~GK zfelkUth%w%MwvO5dG-s8I_jF8e*Q_jNpG5eMn{b!ho$#Ue%o2WRV|b8boqCQ?)0Tk zu_pN+rzCq(Ewc3aXSDxWoFy3@GTr|L^1VUA(&e9<+4Ij?IZB6-H`Dx|mhU_XqwHlG zQfaxzE2LUlNV_r2%1$z)m;b`-Of&L4+w45EJhAi5E;3_ey4dUrvn|AynO$SX2yw01 zjb`L~li4k1^rGJ@PLI9UjMn@I#V0Gg&x{e`R>iT0%(hf~x#H~aqh{>y68k-FMlX8O zY=s#;`VF(U%&5P&&E7MkEbp6rR0&&c#(u1^-{)p~ihW`BwOL28Z_KikIL8RTY%-E< zW`i#jLO5huUvujLkBeXGR_+W~DJ!X13U@xBQM# zoVIa-8TlTa!f3lEi(%*44|cx&E;Zw<`kas3WoGTgmMM-gW9C@WChsz1#tfrf{lP5E zp83e^nKT}>Ux*7O9x-ES;ZdArPnxw;{3){)W*x*TH}k;MB$OsH2dwFdMnv+txE{CDu@Jtg%@` z#XFgGHESc*&8(MMcQIz%*gj^A`pmeoFw17!Fv}ihKUQZ(*lzGCCdm~B($JgLBJ zvf1Whg=WQOyNFFQn`OqBGuw>WHt8`=9$~h?j9FEfc^_p){T*(2gU7Bl+gb7J%$U7X z7S63Vn=yM2b#RB-J!X{UUb8=$H5Pl&?9XP@)gxw4m~nicGz(V-%&x+f0apX$OP#)G zzgNt56?@g}4Kv26Rc7y)vA^${eQ3t<_{eOv8Rc7J#+3y5Qm0>-ePzbE@oTdm%;>9G z4fKz!oYxKNhgy%-5s{}o38E zNqG{}=zIxAYuHY=Q*i%racU0y|i7=KffbgdZ)5?XkdmDLzA@ z$Ig-PqYjFtI3thw5;LWvq~Le7;`p6l#&u_jge{Tq>mZ#fVW&&5cG4LVcA*sfE{aHU zg)jJBZgzdl?*_A5%z7)l)$Beq_U(SNht2R?ZuXcNevg|yZN~ntl&G_3&8U~>B=+|O zvpj{*NZ2b9WoB0Ns)W5E!AS3IiS*u)V5Il1M0y`eu%6N?30o}%wk9IUl{pyceJPRN zR}zf$zLrSudkIE6{6fO&2n1G_h^&Db`8G6b9Aiz)nwfF^+(L2k;3+k}rYy}XVLZKt z@f1_=Yh%{lj5AdSGoEH6N*`@6VV%qe!##3k5DEp07oF~k%@n)2dC(y9K z#wmWV*`fBMzfVYEUBsq{vA^L7GwS)U6h=Si2{WujAyNA5;fm0wd8!OXKcA7p=rarX zQg)R6=rc!~9dE||o?x~l=69-Dc$y5qv&_zq`SBDH_A4{`!lhPd+WQ-vqHm z_T$MW@@0m0oY^U6`-v?vJHw1w$C+m5n~fF=Pc;3?jQ0F%`(0^9zr5P)Mzj6J4oG2) zB|OQ5-EBX%y~pfNW(8sonmuN=yVw(EE6nKo&zikt#ILL*P~IV)1_=Wpsb-8bBIP}&CI5VwJ_VkjB)oCrxzIWlHZ!`WIyIo zJY9vgGi#;zZf0H07-M@W&OD-@SsTT}TYQGa{6^W2C$!iP>VCN5*ugQsL+v-!Y=pj_ zWWSkaZNz4o%`;=)%FGs{v5aC3wOM@+jdTWWTuStqfx%+52T zADwS@ky%@@OU!OEqtD!I_D3`N$9-lGn$Z^?GJD31@~tp?-i$W%ce9txsH<1Z{%J-% zzhU-v%t~i{M!o~h3d}gK9%^=k8T&ThY@r!_VX@g# zGwSLWW@njkg@3l$1!nBWg=UwU4H3J{Y?;~CVpp48Z?=utO=h>4aSd>**&Sw#8+V%B zYsNVKN3$o*I7UyItu$kQpEY~YEJy4mvscX+hh8&VWj0vsEwi2KCEEt`rd<@rdYg?^ zypP$wW_yX{nN2i1NbF#&@U5i{motXyNPP}5f_^HXLk%@`A(HG9#FIrVFbb2#5MtFJgK*VF~8 z)?u9dhvL}BW^DVZ;%xi18QZcl&9>i~F?ak#aV)G>Ggp2og^^xkB|v&xD}NLAjP!vigl3XhvNfWENJs**2_dhm~&5QB&yg`y}tB{&u*07yfxYNuP$S!7W?6bp*l$G4Z;V;E)67mx5MwXHo#q_HxnqqT7TdPSY_=KO z&QY9JGS7^j#GPoY)U2`MWoC=bwh%kg>;yCR;}pdik(QXTA1B)H3^UFuXPW)ejC#J% z>{2sEyUWb3G$W7e6lXNMF~;sUd%%nqbCu%QpUtSFN6emx`8}mLC;!*X$m7XM*c)Ql z$M&OMJ~8_&#{O;gUo+C%YBRRfXkoUM;y)?a_1@u4!;w?!b~ei@i5b3CKb~AoBaaA?@cjqm{rl1 zR;4h?_o=u2QX%Q#_m$#&_l+6tg;^KJlo=O(43>2iXQimF8Ex}lPH!_ajzI&(u`SF< zyP4vo8)j*=!^Za8#eS@kXr3ndvS97=&KHW2GS*6>L~SH|v33${SBX}I(W+szTIL5> ze+kB%DNn*iNMYNN5lLR_z~}`t%t{poR_6G53X`pZG^uo z$5^d)4AYwzQ{Tk6C?ZACGo__|c6#5z=O~YmA8qVW*I$@vQGfB5X7nATcks+FnLfX8 zZq9x)=Mrfeo1M`w6dIoW|l4}oRc%QY(de?lAK-z2MsKkI=`%-bpF(WnI)yu z78Q|IJh8UvUg$HoaOS*@B~xalZq&E9H*f!mN-!-d!Q8baSePt9X(+)$lC$b9W@>OKFO`4naggz%hwom2ZTQ$+F4f$#?Zc4;o(_8VyRLAJM zn!WBR`O}N=(C{(3`Ej%wL}%retLE8Vmpnc6kS?zj>>j;9u$#W=rtf%_-~fHsS+TDA zuSfJfkEaZj@}w@&!^F8=LX6uGE9?B4S5v01%S?X_(nxh(^LKUdmY?$Xw9vyCSH`F! zkJ3E@Dl_@kuktqz^9I1=dtD0DZ`OU|Fz@Fnf8#KBbt=Abm^X>7+s}Ak8*gr-H)>V< zh~{$@M7^94=%JGazhcG7XSx~ls)HqLj)dRVQdGeTk1$ggkLq4Q^rrvdcN9Q& zf&|0wL>4xtt~I;KjQzbuqRwtLqh4;4 z4v=m)E3Ar3CQVc$wH&S&3A7^6CDCkc*mrwO*FlzNAW{?v*uWxLvs_T5f#`qpk{ z91rd$#To62J4RTzOVnTST(j=pmVN7-!tm>9*2jJvhj51}Fvg31`kuP#Z$FMv-xNll z87PJgwjX_Fh#7aOh*IVeW@F6o3wNw0#{9zFDeg3}34W7_$flXm7p9xdF{3Yp)9w72 zA9tXzMKQm{X2+W4>igr&PBNqJPga~dIMs|}+thwb&Dx2DyH4kswGrcP6Lz^7^~`VF zv8&A*D*l++U(DF{X|rd|T8lkr_M#c%@JnVq*-Nya^t#zwW{k@`-HWX@Bactb{$tid z>`Sxn%oxLeFsrLZNR(~E6Sz&yXwS`Pq_Xgo@8*i{V%Elfw8`BRryh4VW87$Kzo9X| zLiHhN1GjQKhitFEZl{m9fUhL zfsx0l_B-9%k_UHbuyf4lGvN+SVB~wQ{VuQ{`Ch1a9fjdH=`9rxcW|z-Uyj%^Z+ndy z*Cp4Qg}XXjLEL1`ea_6n(c#>sG(DBS&FZl8Mh zhvP9o+tAhrdRzK*xFa;ojAK4RacoSCjWe5QMta;O>ZPzS#!gk7JWh+T%M}mn50sg0 zxq}0{*?w&mpQJd(T^s!ROLv)Z*9OMi>^`#xW9%WbN6aWgW$O=r(f2gfa94-2aQ7$9 zsF&->O!m6dqtC2T9DCQSt>PbCHGtnq|G|Mq#ED6J3V5Hqj-^1J3kMmJS#rrGl6x+6o;#dze<_EpZ_A#RlxKo7n`OqGFw&!K zl$eFPVw`^$m>p?9%6ydKw2kA2?U*T=X$@fOk3-Z0p7TyP+ zT)7D=MYFt;!(XH-mM4EDg}1NpH?_ht+YF_`JbGG!#V-Kh8R5K~ZtRLjARxlKJwea0k3!&2FbJ zE-jlsbKdmS)EZQE&%DC@TiV&^y7$ET>T0f*BD-zU>N-yptghpei7&3gx7_O36z+jn zJTK>^d;dV!=()o39jq)C-ap1QNO)eSGQT)`S08f1#eMvX8pg>tSPhe?)n*}Y!dfL% z!;Nc`e|+l4o&MCn=|N+!`88F=##Z?|3R#`nP=DK{e3nk{9Jhh4Ig)P@4c8fra6j(# zRO+v0S@ZfSpWEP`L(Pv^PZPB5XaIc1*Q*rfV-M>J- z;r{;5?8P^DTaV3tmkzkGVEJSoIR0OTXx$o!erub7}$?K+?&Le)l zZc08)SDW_OV3U}Ot-JKPG3NVSyLH!Hh?>u9TW=C|S#hdS)$71F_F73z`}`((?NH?_ z*Ef7Cu1))G`TwH*ZmiXS^*L8%uXD}2X`HK4FKhm{+UItgVEbHmJ%8h@Rn_*~wd4Pb zy4`qZt=f#MKd-A+{Ot#I`Ba^THCj8|G{%7HZ;@~Kku|qVZO4F3qn%cqzlMdZjZvSq z>GPZ7cv{sW&Hq~6ZuOI#tD;}Nu=v9rny_}%RdE*R`o1j>EmjDloUCPGr%NyvzRr-a%Ox03 zLi|R;-jrbM*IN>{T7vB=t&uQ(T>@j@`Nap%&Wtp}uNPm+E;8GGBdmkwFKM=fJe(EL z$as!%&h$PDnqny#=pTbk5z@mio`K%Z_TXF182|w=I-6di7OMyKQ5&dG^j3){o zb^LjS;cmypY#_TuA<=r$Gm3Om_*b(W#c$Fhu=mkXjGVFHTjP9-?0Xj?|sl9NqL?qzmgJ{qibD zfAxHS(Q%5+RX>;>vGLj}Px_%P032TOrXiimy(+C!}_C5TE(i0v*>bD=fD;x@7t_o(8(=?(WC z#^2YB8ypqNz~=^Lj1rN9!q!r{`@gx-8#&~Z#%l8Z{l6-`TbyRP{CO6?I?G99XEBmA zm8z=a)HI$IxX3VF{#`PB|33K!OU+ zq1gTsj2=1E@$m{tU%@)Iv7d&0bz1&0Wa{Fs%|DDrj2>Y$;tW+)IoEEO64|iNP4{d# zIZ8kCQiNxtH~iDY74KTl8a9BF_B!=Qy&^_qofIQue1M%OG3&r~lwhe zI)n0;6AN{Q<%~PL!r66B>|6Hy!myb_N_Ef5X1(VuU)l7|0f}X8hwk(oU&Djd4Ur7O z_;w-QMB5P$pX13SIqz_&&2Ko;kAFSl8CDvv$@m}5EWJzV^5^VcooW1EJN9LI{2y1M z;myM7@~?jMO(bfP|J}-evO8P4{JTVR==3$f_|G$Z{7yg9{r|Uohp%l?M6O%Ab>{Qo z`$Vh}S3Q=~RAL8tfal}F`WHx^+tK>IKcYSx) zSW;VCMSPHLCc*e!FY_sk9vX5?{*n|ATJCgTpPa1_#&yg&X1_GcOVsw4Ovz_DhA8ct zjsxM>I$;JGS_WZrrJLzh4YRf3x|%6eNjm77rbJgUycZ@%@fpz=o1@uqc(2T1`j#=b zI69+{PcZ6gV~?vLuXtFq@~8hL$5fqJ$~4z2Rml5rD*GkbVV})q0=7Z_g8l7l!bDj){+PFwQnh6eTs1j z+fKr-jkLXlaeWKpx^!0w>nOn($(aFRdrN`!j!5#jz}RlI8SMkc*m#gxxNe4p>*m80 z$8TS0vg1<~mXBciuwGX4XG5#MnV@!hT!Skp4rPuTGkzHL$Eb{PZh%dbww5sJ2)2t9 zbuxw2b9{e8Kbs)V%ol4SvE8=PmJ$}$I@&89#;Y(B~hDi zQy9v@cQwtwm$v=8guN`07WSG%KV2iin2YizAL^^QLf95*um8J5=P|jZG3FoaMF;tW zy-DL9ef5?8z28ph=RdjCC8ge%9rYHDN~ZaLDqr4jgr&IBo}-zCH6?-^Oh8*{R01NQwQdu*++ zw3WpBg!n#)?|%yGs&aI5S$>NAH`P2fk5H{KJ|3b_|3~wU?-UXbe-IA_`_K?^{gsXrER7i zzsBFD%Rj6YRhf{!sLA#BDs6X32Ko0$m$AQ7{#nfGI!l=zyT;o8-V&B>|GQ+i{+`85 zgBfV1`O`>Gm$2kJ2k!i4r|Eohp@>FC>x9vQIm2PhxnP7j64pwBF@Fm4-a(3IQX=Lf zA82E?C%;_n3gb~Xg|HlHp5plmOU&vi{=B!j!Hj&v{EfGVIq&XzGi#dn$=3GzbL0JD zB|HM6zXUe6^|ji$s5S_LQ9G!uq#ced%x0(PQ>YDQ!}!rpxpKn7QKY63)=9#Twv4cD zQefR9lDv9=(eC=2akOEylKsrWdM=FhT)rPEt=lTdd0i^_KVXzPSUetB2$_d(GV33` LblaOZ9v}OEa^WRZ literal 0 HcmV?d00001 diff --git a/GraphicDynamicObject.cpp b/GraphicDynamicObject.cpp new file mode 100644 index 0000000..db36074 --- /dev/null +++ b/GraphicDynamicObject.cpp @@ -0,0 +1,122 @@ +#include "GraphicDynamicObject.h" + +GraphicDynamicObject::GraphicDynamicObject() +: GraphicObject() +{ + TYPE_ID = GRAPHIC_DYNAMIC_OBJECT_ID; + + this->old_pos = pos; + speed = max_speed = 0; + + tile = NULL; +} + +GraphicDynamicObject::GraphicDynamicObject(const char *texture_name, hgeVector pos, short xw, short yw, short layer) +: GraphicObject(texture_name, pos, xw, yw, layer) +{ + TYPE_ID = GRAPHIC_DYNAMIC_OBJECT_ID; + + this->old_pos = pos; + speed = max_speed = 0; + + tile = NULL; + +} + +GraphicDynamicObject::~GraphicDynamicObject() +{ +} + +void GraphicDynamicObject::Verlet() +{ + float d = DRAGGING; + float g = GRAVITATION; + + float px, py; + + float ox = old_pos.x; //we can't swap buffers since mcs/sticks point directly to vector2s.. + float oy = old_pos.y; + + old_pos.x = px = pos.x; //get vector values + old_pos.y = py = pos.y; //pos = position + //old_pos = old position + + //integrate + pos.x += (d*px) - (d*ox); + pos.y += (d*py) - (d*oy) + g; +} + +//(px,py) is projection vector, (dx,dy) is surface normal +void GraphicDynamicObject::ReportCollision(float px, float py, float dx, float dy, TileMap *tile) +{ + //calc velocity + float vx = pos.x - old_pos.x; + float vy = pos.y - old_pos.y; + + //find component of velocity parallel to collision normal + float dp = (vx*dx + vy*dy); + float nx = dp*dx;//project velocity onto collision normal + + float ny = dp*dy;//nx,ny is normal velocity + + float tx = vx-nx;//px,py is tangent velocity + float ty = vy-ny; + + //we only want to apply collision response forces if the object is travelling into, and not out of, the collision + float b,bx,by,f,fx,fy; + if(dp < 0) + { + f = FRICTION; + fx = tx * f; + fy = ty * f; + + b = 1 + BOUNCE;//this bounce constant should be else where, i.e inside the object/tile/etc.. + + bx = (nx * b); + by = (ny * b); + } + else + { + //moving out of collision, do not apply forces + bx = by = fx = fy = 0; + } + + pos.x += px;//project object out of collision + pos.y += py; + + old_pos.x += px + bx + fx;//apply bounce+friction impulses which alter velocity + old_pos.y += py + by + fy; +} + +void GraphicDynamicObject::Move(int move) +{ + float fx = 0; + float fy = 0; + + switch (move) + { + case MOVE_LEFT: + fx -= speed; + break; + + case MOVE_RIGHT: + fx += speed; + break; + + case MOVE_UP: + fy -= speed + GRAVITATION; + break; + + case MOVE_DOWN: + fy += speed; + break; + } + + float vx = pos.x - old_pos.x; + float newx = min(max_speed, max(-max_speed, vx+fx)); + pos.x = old_pos.x + newx; + + float vy = pos.y - old_pos.y; + float newy = min(max_speed, max(-max_speed, vy+fy)); + pos.y = old_pos.y + newy; +} \ No newline at end of file diff --git a/GraphicDynamicObject.h b/GraphicDynamicObject.h new file mode 100644 index 0000000..7f61215 --- /dev/null +++ b/GraphicDynamicObject.h @@ -0,0 +1,40 @@ +#pragma once + +#include "GraphicObject.h" +#include "CollisionDefines.h" + +#define MOVE_LEFT 1 +#define MOVE_RIGHT 2 +#define MOVE_UP 3 +#define MOVE_DOWN 4 + +class TileMap; +class World; + +class GraphicDynamicObject: public GraphicObject +{ + friend World; +public: + GraphicDynamicObject(); + GraphicDynamicObject(const char *texture_name, hgeVector pos, short xw, short yw, short layer); + virtual ~GraphicDynamicObject(); + + virtual void Verlet(); + virtual void ReportCollision(float px, float py, float dx, float dy, TileMap *tile); + + virtual void Move(int move); + + virtual void Render() = 0; + + void SetSpeed(float speed) { this->speed = this->max_speed = speed; } + void SetSpeed(float speed, float max_speed) { this->speed = speed; this->max_speed = max_speed; } + + virtual int Update() = 0; + +protected: + hgeVector old_pos; + float speed, max_speed; + + TileMap *tile; + //TileMap *prev_tile; +}; diff --git a/GraphicObject.cpp b/GraphicObject.cpp new file mode 100644 index 0000000..91665bb --- /dev/null +++ b/GraphicObject.cpp @@ -0,0 +1,46 @@ +#include "GraphicObject.h" + + + +HGE *GraphicObject::hge = NULL; +hgeResourceManager *GraphicObject::resources_manager = NULL; + +GraphicObject::GraphicObject() + +: xw(0) +, yw(0) +{ + TYPE_ID = GRAPHIC_OBJECT_ID; + hge = hgeCreate(HGE_VERSION); + + layer = 0; + + pos.x = 0; + pos.y = 0; +} + +GraphicObject::GraphicObject(const char *texture_name, hgeVector pos, short xw, short yw, short layer) +{ + if (texture_name) + { + resource_name = texture_name; + } + + TYPE_ID = GRAPHIC_OBJECT_ID; + hge = hgeCreate(HGE_VERSION); + + this->layer = layer; + + this->pos = pos; + this->xw = abs(xw); + this->yw = abs(yw); +} + +GraphicObject::~GraphicObject() +{ + hge->Release(); + + // world->RemoveObject(this); + + resource_name.clear(); +} diff --git a/GraphicObject.h b/GraphicObject.h new file mode 100644 index 0000000..5673ae6 --- /dev/null +++ b/GraphicObject.h @@ -0,0 +1,52 @@ +#pragma once + +#include "Object.h" + +#include +#include +#include +#include + +class GraphicObject: public Object +{ +public: + GraphicObject(); + GraphicObject(const char *resource_name, hgeVector pos, short xw, short yw, short layer); + + virtual ~GraphicObject(); + + void SetResName(char *name) { resource_name = name; } + const char *GetResName() { return resource_name.c_str(); } + + void SetPos(hgeVector pos) { this->pos = pos; } + void SetPos(float x, float y) { this->pos.x = x; this->pos.y = y; } + hgeVector GetPos() { return pos; } + + void SetWidth(short width) { this->xw = width; } + short GetWidth() const { return xw; } + + void SetHeight(short height) { this->yw = height; } + short GetHeight() const { return yw; } + + void SetLayer(short layer) { this->layer = layer; } + short GetLayer() { return layer; } + + + virtual void UpdateGraphic() { /*empty*/ } + + virtual void Render() = 0; + + static void SetResourceManager(hgeResourceManager *rm) { resources_manager = rm; } + +protected: + hgeVector pos; + short xw, yw; + short layer; //уровень рисования и столкновения + + std::string resource_name; + + static HGE *hge; + + static hgeResourceManager *resources_manager; + +}; diff --git a/InitCombo.h b/InitCombo.h new file mode 100644 index 0000000..91b2cb0 --- /dev/null +++ b/InitCombo.h @@ -0,0 +1,212 @@ +#include +#include "Map.h" + +extern HWND hCB_ObjType; +extern HWND hCB_SprName; +extern HWND hCB_AnimName; +extern HWND hCB_TileType; +extern HWND hCB_PS1; +extern HWND hCB_PS2; +extern HWND hCB_ResType; + +void InitComboBoxTiles() +{ + LRESULT index = SendMessage(hCB_ObjType, CB_ADDSTRING, 0, (LPARAM)"undefined"); + SendMessage(hCB_ObjType, CB_SETITEMDATA, index, (LPARAM)-1); + SendMessage(hCB_ObjType, CB_SETCURSEL, 0, 0); + + index = SendMessage(hCB_ObjType, CB_ADDSTRING, 0, (LPARAM)"TileMap"); + SendMessage(hCB_ObjType, CB_SETITEMDATA, index, (LPARAM)TILE_MAP_ID); + + + index = SendMessage(hCB_ObjType, CB_ADDSTRING, 0, (LPARAM)"TileMapEx"); + SendMessage(hCB_ObjType, CB_SETITEMDATA, index, (LPARAM)TILE_MAP_EXTENDED_ID); + + index = SendMessage(hCB_ObjType, CB_ADDSTRING, 0, (LPARAM)"TileMapAnimation"); + SendMessage(hCB_ObjType, CB_SETITEMDATA, index, (LPARAM)TILE_MAP_ANIMATION_ID); + + index = SendMessage(hCB_ObjType, CB_ADDSTRING, 0, (LPARAM)"TileMapAnimationEx"); + SendMessage(hCB_ObjType, CB_SETITEMDATA, index, (LPARAM)TILE_MAP_ANIMATION_EX_ID); + + index = SendMessage(hCB_ObjType, CB_ADDSTRING, 0, (LPARAM)"TileMapParticle"); + SendMessage(hCB_ObjType, CB_SETITEMDATA, index, (LPARAM)TILE_MAP_PARTICLE_ID); + + index = SendMessage(hCB_ObjType, CB_ADDSTRING, 0, (LPARAM)"TileMapResource"); + SendMessage(hCB_ObjType, CB_SETITEMDATA, index, (LPARAM)TILE_MAP_RESOURCE_ID); + +} + +void InitComboBox1() +{ + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"undefined"); + SendMessage(hCB_SprName, CB_SETCURSEL, 0, 0); + + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"empty"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_2"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_3_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_3_2"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_4_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_4_2"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_5"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_6"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_7"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_8"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_9"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_10"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_11"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_12"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_13"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_14_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_14_2"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_15"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_16"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_17"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_18"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"g_1_19"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"tree1_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"tree1_2"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"tree1_3"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"tree1_4"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"tree1_5"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"tree1_6"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"tree1_7"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"tree1_8"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"tree1_9"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"fence1_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"fence1_2"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"fence1_3"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"fence1_4"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"fence1_5"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"fence1_6"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"fence1_7"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"fence1_8"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stone1_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stone1_2"); + + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stone2_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stone2_2"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stone2_3"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stone2_4"); + + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"grass1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"grass2"); + + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stone3"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stone4"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stone5"); + + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stub1_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"stub1_2"); + + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"grass3_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"grass3_2"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"grass3_3"); + + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush1_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush1_2"); + + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_1"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_2"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_3"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_4"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_5"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_6"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_7"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_8"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_9"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_10"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_11"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_12"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_13"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_14"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_15"); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)"bush2_16"); + + for (int i = 1; i <= 18; i++) + { + char str[256] = {0}; + sprintf(str, "tree2_%d", i); + SendMessage(hCB_SprName, CB_ADDSTRING, 0, (LPARAM)str); + } +} + +void InitComboBox2() +{ + SendMessage(hCB_AnimName, CB_ADDSTRING, 0, (LPARAM)"undefined"); + SendMessage(hCB_AnimName, CB_SETCURSEL, 0, (LPARAM)-1); + SendMessage(hCB_AnimName, CB_SETCURSEL, 0, 0); + + SendMessage(hCB_AnimName, CB_ADDSTRING, 0, (LPARAM)"hard"); +} + +void InitComboBox3() +{ + LRESULT index = 0; + + SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"undefined"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)-1); + SendMessage(hCB_TileType, CB_SETCURSEL, 0, 0); + + index = SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"TILE_TYPE_EMPTY"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)TILE_TYPE_EMPTY); + + index = SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"TILE_TYPE_FULL"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)TILE_TYPE_FULL); + + index = SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"TILE_TYPE_45DEGREE_pn"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)TILE_TYPE_45DEGREE_pn); + + index = SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"TILE_TYPE_45DEGREE_nn"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)TILE_TYPE_45DEGREE_nn); + + index = SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"TILE_TYPE_45DEGREE_np"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)TILE_TYPE_45DEGREE_np); + + index = SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"TILE_TYPE_45DEGREE_pp"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)TILE_TYPE_45DEGREE_pp); + + index = SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"TILE_TYPE_22DEGREE_pn"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)TILE_TYPE_22DEGREE_pn); + + index = SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"TILE_TYPE_22DEGREE_nn"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)TILE_TYPE_22DEGREE_nn); + + index = SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"TILE_TYPE_22DEGREE_np"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)TILE_TYPE_22DEGREE_np); + + index = SendMessage(hCB_TileType, CB_ADDSTRING, 0, (LPARAM)"TILE_TYPE_22DEGREE_pp"); + SendMessage(hCB_TileType, CB_SETITEMDATA, index, (LPARAM)TILE_TYPE_22DEGREE_pp); +} + +void InitComboBoxPS1() +{ + LRESULT index = 0; + + SendMessage(hCB_PS1, CB_ADDSTRING, 0, (LPARAM)"undefined"); + SendMessage(hCB_PS1, CB_SETCURSEL, 0, 0); +} + +void InitComboBoxPS2() +{ + LRESULT index = 0; + + SendMessage(hCB_PS2, CB_ADDSTRING, 0, (LPARAM)"undefined"); + SendMessage(hCB_PS2, CB_SETCURSEL, 0, 0); +} + +void InitComboBoxTileRes() +{ + LRESULT index = 0; + + index = SendMessage(hCB_ResType, CB_ADDSTRING, 0, (LPARAM)"RESOURCE_TYPES::LIFES"); + SendMessage(hCB_ResType, CB_SETITEMDATA, index, (LPARAM)RESOURCE_TYPES::LIFES); + + index = SendMessage(hCB_ResType, CB_ADDSTRING, 0, (LPARAM)"RESOURCE_TYPES::AID"); + SendMessage(hCB_ResType, CB_SETITEMDATA, index, (LPARAM)RESOURCE_TYPES::AID); + + index = SendMessage(hCB_ResType, CB_ADDSTRING, 0, (LPARAM)"RESOURCE_TYPES::ARMOUR"); + SendMessage(hCB_ResType, CB_SETITEMDATA, index, (LPARAM)RESOURCE_TYPES::ARMOUR); + + SendMessage(hCB_ResType, CB_SETCURSEL, 0, 0); +} \ No newline at end of file diff --git a/Initiate.cpp b/Initiate.cpp new file mode 100644 index 0000000..e3c738d --- /dev/null +++ b/Initiate.cpp @@ -0,0 +1,14 @@ +#include "Initiate.h" + +#include + +#include "GraphicObject.h" +#include "GraphicDynamicObject.h" + + +hgeResourceManager* CreateResourceManager() +{ + hgeResourceManager *rm = new hgeResourceManager; + GraphicObject::SetResourceManager(rm); + return rm; +} diff --git a/Initiate.h b/Initiate.h new file mode 100644 index 0000000..b9d5bd6 --- /dev/null +++ b/Initiate.h @@ -0,0 +1,7 @@ +#pragma once + +class hgeResourceManager; +class World; + +hgeResourceManager* CreateResourceManager(); +World* InitiateWorld(); \ No newline at end of file diff --git a/Map.cpp b/Map.cpp new file mode 100644 index 0000000..0b46a34 --- /dev/null +++ b/Map.cpp @@ -0,0 +1,912 @@ +#include + +#include "Map.h" + +Map::Map(size_t layers, size_t rows, size_t cols, int screen_width, int screen_hight, short tile_width, short tile_hight) +{ + TYPE_ID = MAP_ID; + + this->layers = layers; + + this->rows = rows; + this->cols = cols; + + this->screen_width = screen_width; + this->screen_hight = screen_hight; + + this->tile_width = tile_width; + this->tile_hight = tile_hight; + + this->offset_x = 0; + this->offset_y = 0; + + grid.resize(layers); + + for (size_t l = 0; l < layers; l++) + { + grid[l].resize(rows); + for (size_t i = 0; i < rows; i++) + { + grid[l][i].resize(cols); + } + } + + tile = NULL; +} + +Map::~Map() +{ + Free(); +} + +void Map::Free() +{ + for (size_t l = 0; l < layers; l++) + { + for (size_t i = 0; i < rows; i++) + { + for (size_t j = 0; j < cols; j++) + { + if (grid[l][i][j] != NULL) + { +/* + if (TILE_MAP_ID == grid[l][i][j]->GetObjectType()) + delete ((TileMap *)grid[l][i][j]); + else if (TILE_MAP_EXTENDED_ID == grid[l][i][j]->GetObjectType()) + delete ((TileMapEx *)grid[l][i][j]); + else if (TILE_MAP_ANIMATION_ID == grid[l][i][j]->GetObjectType()) + delete ((TileMapAnimation *)grid[l][i][j]); + else if (TILE_MAP_PARTICLE_ID == grid[l][i][j]->GetObjectType()) + delete ((TileMapParticle *)grid[l][i][j]); +*/ + + delete grid[l][i][j]; + + grid[l][i][j] = NULL; + } + } + } + } + grid.clear(); +} + +void Map::InsertTile(int row, int col, TileMap *tile) +{ + size_t layer = tile->GetLayer(); + + grid[layer][row][col] = tile; +} + +void Map::DeleteTile(int layer, int row, int col) +{ + TileMap *t = grid[layer][row][col]; + + if (t == tile) + { + tile = NULL; + } + + if (t != NULL) + { + delete t; + t = NULL; + } + + grid[layer][row][col] = NULL; +} + +TileMap* Map::GetTile(int layer, const hgeVector *pos) +{ + return GetTile(layer, pos->x, pos->y); +} + +TileMap* Map::GetTile(int layer, float x, float y) +{ + int row = (int)floor((y + offset_y) / tile_hight); + int col = (int)floor((x + offset_x) / tile_width); + + return grid[layer][row][col]; +} + +TileMap* Map::GetTile(int layer, int row, int col) +{ + return grid[layer][row][col]; +} + +void Map::GetTileIndex(const hgeVector *pos, int &row, int &col) +{ + row = (int)floor((pos->y + offset_y) / tile_hight); + col = (int)floor((pos->x + offset_x) / tile_width); +} + +void Map::HorizontalScroll(int offset_x) +{ + if (0 < offset_x) + { + if (((this->offset_x + offset_x) + screen_width) < ((tile_width * cols))) + this->offset_x += offset_x; + else + this->offset_x = (cols * tile_width) - screen_width; + } + else if (0 > offset_x) + { + if ((this->offset_x + offset_x) > 0) + this->offset_x += offset_x; + else + this->offset_x = 0; + } +} + +void Map::VerticalScroll(int offset_y) +{ + if (0 < offset_y) + { + if (((this->offset_y + offset_y) + screen_hight) < ((tile_hight * rows))) + this->offset_y += offset_y; + else + this->offset_y = (rows * tile_hight) - screen_hight; + } + else if (0 > offset_y) + { + if ((this->offset_y + offset_y) > 0) + this->offset_y += offset_y; + else + this->offset_y = 0; + } +} + + +void Map::Render(int layer) +{ + hgeVector temp; + + size_t row = floor(offset_y / tile_hight); + size_t col = floor(offset_x / tile_width); + size_t n = (size_t)ceil((float)((screen_hight + offset_y) / tile_hight)); + size_t m = (size_t)ceil((float)((screen_width + offset_x) / tile_width)); + + float temp_x = (tile_width / 2) - ((int)offset_x % tile_width); + float temp_y = (tile_hight / 2) - ((int)offset_y % tile_hight); + float x = temp_x; + float y = temp_y; + + size_t l = layer; + + for (size_t i = row; i < n; i++) + { + for (size_t j = col; j < m; j++) + { + if (grid[l][i][j] != NULL) + { + temp = grid[l][i][j]->pos; + + grid[l][i][j]->pos.x = x; + grid[l][i][j]->pos.y = y; + + int object_type = grid[l][i][j]->GetObjectType(); + + switch( object_type ) + { + case TILE_MAP_ID: + ((TileMap *)grid[l][i][j])->Render(); + break; + + case TILE_MAP_EXTENDED_ID: + ((TileMapEx *)grid[l][i][j])->Render(); + break; + + case TILE_MAP_ANIMATION_ID: + ((TileMapAnimation *)grid[l][i][j])->Render(); + break; + + case TILE_MAP_PARTICLE_ID: + ((TileMapParticle *)grid[l][i][j])->GetParticle()->MoveTo(x, y, true); + ((TileMapParticle *)grid[l][i][j])->Render(); + break; + + case TILE_MAP_ANIMATION_EX_ID: + ((TileMapAnimationEx *)grid[l][i][j])->MoveParticle(x, y, true); + ((TileMapAnimationEx *)grid[l][i][j])->Render(); + break; + + case TILE_MAP_RESOURCE_ID: + ((TileMapResource *)grid[l][i][j])->MoveParticle(x, y, true); + ((TileMapResource *)grid[l][i][j])->Render(); + break; + } + + grid[l][i][j]->pos = temp; + } + + x += tile_width; + } + x = temp_x; + y += tile_hight; + } +} + +TileMap *Map::SelectTile(short layer, hgeVector &p) +{ + if (tile) + tile->ShowTileQuad(false); + + tile = this->GetTile(layer, &p); + + if (tile) + tile->ShowTileQuad(true); + + return tile; +} + +void Map::Save(const char *file_name) +{ + std::ofstream f(file_name, std::ios::binary); + if (f.is_open()) + { + int ce = 7;//кол-во сущностей + + f.write((const char *)&ce, sizeof(int)); + + std::string next_level = "level2.lev"; + int l = next_level.size(); + f.write((const char *)&l, sizeof(int)); + f.write(next_level.c_str(), l); + + f.write((const char *)&layers, sizeof(size_t)); + f.write((const char *)&rows, sizeof(size_t)); + f.write((const char *)&cols, sizeof(size_t)); + + for (size_t l = 0; l < layers; l++) + { + for (size_t i = 0; i < rows; i++) + { + for (size_t j = 0; j < cols; j++) + { + + if (grid[l][i][j] == NULL) + { + short null_tile = -1; + f.write((const char *)&null_tile, sizeof(short)); + } + else + { + short object_type = grid[l][i][j]->GetObjectType(); + + f.write((const char *)&object_type, sizeof(object_type)); + + switch (object_type) + { + + case TILE_MAP_ID: + ((TileMap *)grid[l][i][j])->Save(&f); + break; + + case TILE_MAP_EXTENDED_ID: + ((TileMapEx *)grid[l][i][j])->Save(&f); + break; + + case TILE_MAP_ANIMATION_ID: + ((TileMapAnimation *)grid[l][i][j])->Save(&f); + break; + + case TILE_MAP_PARTICLE_ID: + ((TileMapParticle *)grid[l][i][j])->Save(&f); + break; + + case TILE_MAP_ANIMATION_EX_ID: + ((TileMapAnimationEx *)grid[l][i][j])->Save(&f); + break; + + case TILE_MAP_RESOURCE_ID: + ((TileMapResource *)grid[l][i][j])->Save(&f); + break; + } + } + f.flush(); + } + } + } + f.close(); + } +} + +void Map::Load(const char *file_name) +{ + Free(); + + std::ifstream f(file_name, std::ios::binary); + + if (f.is_open()) + { + short object_type = 0; + + + int ce = 0;//кол-во сущностей + + f.read((char *)&ce, sizeof(int)); + + int l = 0; + char *buffer = NULL; + f.read((char *)&l, sizeof(int)); + buffer = new char[l]; + f.read((char *)buffer, l); + buffer[l] = '\0'; + //next_level = buffer; + //delete[] buffer; + + f.read((char *)&layers, sizeof(size_t)); + f.read((char *)&rows, sizeof(size_t)); + f.read((char *)&cols, sizeof(size_t)); + + + + grid.resize(layers); + + for (size_t l = 0; l < layers; l++) + { + grid[l].resize(rows); + for (size_t i = 0; i < rows; i++) + { + grid[l][i].resize(cols); + } + } + + for (size_t l = 0; l < layers; l++) + { + for (size_t i = 0; i < rows; i++) + { + for (size_t j = 0; j < cols; j++) + { + f.read((char *)&object_type, sizeof(short)); + + switch(object_type) + { + case -1: + grid[l][i][j] = NULL; + break; + + case TILE_MAP_ID: + grid[l][i][j] = new TileMap(); + grid[l][i][j]->Load(&f); + break; + + case TILE_MAP_EXTENDED_ID: + grid[l][i][j] = new TileMapEx(); + ((TileMapEx *)grid[l][i][j])->Load(&f); + break; + + case TILE_MAP_ANIMATION_ID: + grid[l][i][j] = new TileMapAnimation(); + ((TileMapAnimation *)grid[l][i][j])->Load(&f); + break; + + case TILE_MAP_PARTICLE_ID: + grid[l][i][j] = new TileMapParticle(); + ((TileMapParticle *)grid[l][i][j])->Load(&f); + break; + + case TILE_MAP_ANIMATION_EX_ID: + grid[l][i][j] = new TileMapAnimationEx(); + ((TileMapAnimationEx *)grid[l][i][j])->Load(&f); + break; + + case TILE_MAP_RESOURCE_ID: + grid[l][i][j] = new TileMapResource(); + ((TileMapResource *)grid[l][i][j])->Load(&f); + break; + + } + } + } + } + f.close(); + } + + +} + +void Map::UpdateGraphic() +{ + size_t row = floor(offset_y / tile_hight); + size_t col = floor(offset_x / tile_width); + size_t n = (size_t)ceil((float)((screen_hight + offset_y) / tile_hight)); + size_t m = (size_t)ceil((float)((screen_width + offset_x) / tile_width)); + + for (size_t l = 0; l < layers; l++) + { + for (size_t i = row; i < n; i++) + { + for (size_t j = col; j < m; j++) + { + if (grid[l][i][j] != NULL) + { + grid[l][i][j]->UpdateGraphic(); + } + } + } + } +} + + + +void Map::UpdateEdges(int layer) +{ + size_t l = layer; + + for (size_t i = 1; i < rows - 1; i++) + { + for (size_t j = 1; j < cols - 1; j++) + { + TileMapEx *tile; + TileMapEx *tile_next;//Соседний tile + + tile = (TileMapEx *)grid[l][i][j]; + tile_next = (TileMapEx *)grid[l][i - 1][j]; + + + if(tile->tile_type == TILE_TYPE_EMPTY) + { + if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_up = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_up = EDGE_ID_SOLID; + } + else if(((tile_next->signy * -1) <= 0)) + { + tile->edge_up = EDGE_ID_INTERESTING; + } + else + { + tile->edge_up = EDGE_ID_SOLID; + } + } + else if(tile->tile_type == TILE_TYPE_FULL) + { + if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_up = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_up = EDGE_ID_OFF; + } + else if((tile_next->signy * -1) <= 0) + { + tile->edge_up = EDGE_ID_INTERESTING; + } + else + { + tile->edge_up = EDGE_ID_OFF; + } + } + else + { + if(0 <= (tile->signy * -1)) + { + if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_up = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_up = EDGE_ID_SOLID; + } + else if((tile->signy * -1) <= 0) + { + tile->edge_up = EDGE_ID_INTERESTING; + } + else + { + tile->edge_up = EDGE_ID_SOLID; + } + } + else + { + + if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_up = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_up = EDGE_ID_OFF; + } + else if((tile_next->signy * -1) <= 0) + { + tile->edge_up = EDGE_ID_INTERESTING; + } + else + { + tile->edge_up = EDGE_ID_OFF; + } + + } + } + + + tile_next = (TileMapEx *)grid[l][i + 1][j];//Соседний tile + + + if(tile->tile_type == TILE_TYPE_EMPTY) + { + if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_down = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_down = EDGE_ID_SOLID; + } + else if((tile_next->signy * 1) <= 0) + { + tile->edge_down = EDGE_ID_INTERESTING; + } + else + { + tile->edge_down = EDGE_ID_SOLID; + } + } + else if(tile->tile_type == TILE_TYPE_FULL) + { + if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_down = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_down = EDGE_ID_OFF; + } + else if((tile_next->signy * 1) <= 0) + { + tile->edge_down = EDGE_ID_INTERESTING; + } + else + { + tile->edge_down = EDGE_ID_OFF; + } + } + else + { + if(0 <= (tile->signy * 1)) + { + if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_down = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_down = EDGE_ID_SOLID; + } + else if((tile_next->signy * 1) <= 0) + { + tile->edge_down = EDGE_ID_INTERESTING; + } + else + { + tile->edge_down = EDGE_ID_SOLID; + } + } + else + { + if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_down = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_down = EDGE_ID_OFF; + } + else if((tile_next->signy * 1) <= 0) + { + tile->edge_down = EDGE_ID_INTERESTING; + } + else + { + tile->edge_down = EDGE_ID_OFF; + } + } + } + + tile_next = (TileMapEx *)grid[l][i][j + 1]; + + if(tile->tile_type == TILE_TYPE_EMPTY) + { + if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_right = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_right = EDGE_ID_SOLID; + } + else if((tile_next->signx * 1) <= 0 || tile_next->tile_type == TILE_TYPE_22DEGREE_pn || tile_next->tile_type == TILE_TYPE_22DEGREE_pp) + { + tile->edge_right = EDGE_ID_INTERESTING; + } + else + { + tile->edge_right = EDGE_ID_SOLID; + } + } + else if(tile->tile_type == TILE_TYPE_FULL) + { + if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_right = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_right = EDGE_ID_OFF; + } + else if((tile_next->signx * 1) <= 0 || tile_next->tile_type == TILE_TYPE_22DEGREE_pn || tile_next->tile_type == TILE_TYPE_22DEGREE_pp) + { + tile->edge_right = EDGE_ID_INTERESTING; + } + else + { + tile->edge_right = EDGE_ID_OFF; + } + } + else + { + if(0 <= (tile->signx*1)) + { + if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_right = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_right = EDGE_ID_SOLID; + } + else if((tile_next->signx * 1) <= 0 || tile_next->tile_type == TILE_TYPE_22DEGREE_pn || tile_next->tile_type == TILE_TYPE_22DEGREE_pp) + { + tile->edge_right = EDGE_ID_INTERESTING; + } + else + { + tile->edge_right = EDGE_ID_SOLID; + } + } + else + { + if(tile->tile_type == TILE_TYPE_22DEGREE_nn || tile->tile_type == TILE_TYPE_22DEGREE_np) + { + + if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_right = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_right = EDGE_ID_SOLID; + } + else if((tile_next->signx*1) <= 0 || tile_next->tile_type == TILE_TYPE_22DEGREE_pn || tile_next->tile_type == TILE_TYPE_22DEGREE_pp) + { + tile->edge_right = EDGE_ID_INTERESTING; + } + else if(tile_next->tile_type == TILE_TYPE_FULL || (0 < (tile_next->signx * 1)) ) + { + tile->edge_right = EDGE_ID_SOLID; + } + else + { + tile->edge_right = EDGE_ID_OFF; + } + + } + else + { + if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_right = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_right = EDGE_ID_OFF; + } + else if((tile_next->signx * 1) <= 0 || tile_next->tile_type == TILE_TYPE_22DEGREE_pn || tile_next->tile_type == TILE_TYPE_22DEGREE_pp) + { + tile->edge_right = EDGE_ID_INTERESTING; + } + else + { + tile->edge_right = EDGE_ID_OFF; + } + } + } + } + + tile_next = (TileMapEx *)grid[l][i][j - 1];//Соседний tile + + if(tile->tile_type == TILE_TYPE_EMPTY) + { + if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_left = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_left= EDGE_ID_SOLID; + } + else if((tile_next->signx*-1) <= 0 || tile_next->tile_type == TILE_TYPE_22DEGREE_nn || tile_next->tile_type == TILE_TYPE_22DEGREE_np) + { + tile->edge_left= EDGE_ID_INTERESTING; + } + else + { + tile->edge_left= EDGE_ID_SOLID; + } + } + else if(tile->tile_type == TILE_TYPE_FULL) + { + if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_left = EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_left = EDGE_ID_OFF; + } + else if((tile_next->signx * -1) <= 0 || tile_next->tile_type == TILE_TYPE_22DEGREE_nn || tile_next->tile_type == TILE_TYPE_22DEGREE_np) + { + tile->edge_left= EDGE_ID_INTERESTING; + } + else + { + tile->edge_left= EDGE_ID_OFF; + } + } + else + { + if(0 <= (tile->signx * -1)) + { + if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_left= EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_left= EDGE_ID_SOLID; + } + else if((tile_next->signx * -1) <= 0 || tile_next->tile_type == TILE_TYPE_22DEGREE_nn || tile_next->tile_type == TILE_TYPE_22DEGREE_np) + { + tile->edge_left= EDGE_ID_INTERESTING; + } + else + { + tile->edge_left= EDGE_ID_SOLID; + } + } + else + { + if(tile->tile_type == TILE_TYPE_22DEGREE_pn || tile->tile_type == TILE_TYPE_22DEGREE_pp) + { + if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_left= EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_left= EDGE_ID_SOLID; + } + else if((tile_next->signx*-1) <= 0 || tile_next->tile_type == TILE_TYPE_22DEGREE_nn || tile_next->tile_type == TILE_TYPE_22DEGREE_np) + { + tile->edge_left= EDGE_ID_INTERESTING; + } + else if(0 < (tile_next->signx*-1) || tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_left= EDGE_ID_SOLID; + } + else + { + tile->edge_left= EDGE_ID_OFF; + } + } + else + { + if(tile_next->tile_type == TILE_TYPE_FULL) + { + tile->edge_left= EDGE_ID_OFF; + } + else if(tile_next->tile_type == TILE_TYPE_EMPTY) + { + tile->edge_left= EDGE_ID_OFF; + } + else if((tile_next->signx*-1) <= 0 || tile_next->tile_type == TILE_TYPE_22DEGREE_nn || tile_next->tile_type == TILE_TYPE_22DEGREE_np) + { + tile->edge_left= EDGE_ID_INTERESTING; + } + else + { + tile->edge_left= EDGE_ID_OFF; + } + } + } + } + } + } +} + +bool Map::QueryPoint(int layer, float x, float y) +{ + TileMap *tile = this->GetTile(layer, x, y); + return TestPointTile(x, y, tile); +} + +bool Map::TestPointTile(float x, float y, TileMap *t) +{ + if (t) + { + x += offset_x; + y += offset_y; + + switch (t->GetTileType()) + { + case TILE_TYPE_EMPTY: + return false; + break; + + case TILE_TYPE_FULL: + return TestPointVsTileFull(x, y, t); + break; + + case TILE_TYPE_45DEGREE_pn: + case TILE_TYPE_45DEGREE_nn: + case TILE_TYPE_45DEGREE_np: + case TILE_TYPE_45DEGREE_pp: + return TestPointVsTile45Degree(x, y, (TileMapEx *)t); + break; + + case TILE_TYPE_22DEGREE_pn: + case TILE_TYPE_22DEGREE_nn: + case TILE_TYPE_22DEGREE_np: + case TILE_TYPE_22DEGREE_pp: + return TestPointVsTile22Degree(x, y, (TileMapEx *)t); + break; + + default: + return false; + break; + } + } + + return false; +} + +bool Map::TestPointVsTileFull(float x, float y, TileMap *t) +{ + return true; +} + +bool Map::TestPointVsTile45Degree(float x, float y, TileMapEx *t) +{ + float dx = x - t->pos.x; + float dy = y - t->pos.y; + if (dx * t->sx + dy * t->sy <= 0) + { + return true; + } + else + { + return false; + } +} + +bool Map::TestPointVsTile22Degree(float x, float y, TileMapEx *t) +{ + hgeVector pos = t->GetPos(); + float dx = x - (pos.x + t->signx * t->xw); + float dy = y - (pos.y - t->signy * t->yw); + if (dx * t->sx + dy * t->sy <= 0) + { + return true; + } + else + { + return false; + } +} diff --git a/Map.h b/Map.h new file mode 100644 index 0000000..a26ce75 --- /dev/null +++ b/Map.h @@ -0,0 +1,69 @@ +#pragma once + +#include "Object.h" +#include "TileMap.h" +#include "TileMapEx.h" +#include "TileMapAnimation.h" +#include "TileMapParticle.h" +#include "TileMapAnimationEx.h" +#include "TileMapResource.h" + +#include + + +class Map: public Object +{ +public: + Map(size_t layers, size_t rows, size_t cols, int screen_width, int screen_hight, short tile_width, short tile_hight); + virtual ~Map(); + + void Free(); + + void InsertTile(int row, int col, TileMap *tile); + void DeleteTile(int layer, int row, int col); + + TileMap* GetTile(int layer, const hgeVector *pos); + TileMap* GetTile(int layer, float x, float y); + TileMap* GetTile(int layer, int row, int col); + + float GetOffsetX() { return offset_x; } + float GetOffsetY() { return offset_y; } + + void SetOffsetX(float offset) { offset_x = offset;} + void SetOffsetY(float offset) { offset_y = offset;} + + void GetTileIndex(const hgeVector *pos, int &row, int &col); + + void HorizontalScroll(int offset_x); + void VerticalScroll(int offset_y); + + void Render(int layer); + + TileMap *SelectTile(short layer, hgeVector &p); + + void Save(const char *file_name); + void Load(const char *file_name); + + void UpdateGraphic(); + + void UpdateEdges(int layer); + + bool QueryPoint(int layer, float x, float y); + + bool TestPointTile(float x, float y, TileMap *t); + bool TestPointVsTileFull(float x, float y, TileMap *t); + bool TestPointVsTile45Degree(float x, float y, TileMapEx *t); + bool TestPointVsTile22Degree(float x, float y, TileMapEx *t); + +protected: + float offset_x, offset_y; + short tile_width, tile_hight; + int screen_width, screen_hight; + + size_t rows, cols; + size_t layers; + + TileMap *tile; + + std::vector< std::vector< std::vector > > grid; +}; diff --git a/Object.cpp b/Object.cpp new file mode 100644 index 0000000..178941c --- /dev/null +++ b/Object.cpp @@ -0,0 +1,10 @@ +#include "Object.h" + +Object::Object() +{ + TYPE_ID = OBJECT_ID; +} + +Object::~Object() +{ +} diff --git a/Object.h b/Object.h new file mode 100644 index 0000000..ad5456a --- /dev/null +++ b/Object.h @@ -0,0 +1,32 @@ +#pragma once + +#include "options.h" + +#define OBJECT_ID 1 +#define GRAPHIC_OBJECT_ID 2 +#define GRAPHIC_DYNAMIC_OBJECT_ID 10 + +#define TILE_MAP_ID 20 +#define TILE_MAP_EXTENDED_ID 21 +#define TILE_MAP_ANIMATION_ID 22 +#define TILE_MAP_PARTICLE_ID 23 +#define TILE_MAP_ANIMATION_EX_ID 24 +#define TILE_MAP_RESOURCE_ID 25 + +#define MAP_ID 34 + + + + +class Object +{ +public: + Object(); + virtual ~Object(); + + virtual inline int GetObjectType() const + { return TYPE_ID; } + +protected: + short TYPE_ID; +}; diff --git a/Tables.cpp b/Tables.cpp new file mode 100644 index 0000000..eec4d7b --- /dev/null +++ b/Tables.cpp @@ -0,0 +1,88 @@ +#include "Tables.h" + + +#include "Object.h" + +#include "TileMapEx.h" +#include "TileMapResource.h" + + +const char *GetTilesObjectName(int id) +{ + switch(id) + { + case TILE_MAP_ID: + return "TileMap"; + + case TILE_MAP_EXTENDED_ID: + return "TileMapEx"; + + case TILE_MAP_ANIMATION_ID: + return "TileMapAnimation"; + + case TILE_MAP_ANIMATION_EX_ID: + return "TileMapAnimationEx"; + + case TILE_MAP_PARTICLE_ID: + return "TileMapParticle"; + + case TILE_MAP_RESOURCE_ID: + return "TileMapResource"; + } + + return ""; +} + +const char *GetTileMapTypeName(int id) +{ + switch (id) + { + case TILE_TYPE_EMPTY: + return "TILE_TYPE_EMPTY"; + + case TILE_TYPE_FULL: + return "TILE_TYPE_FULL"; + + case TILE_TYPE_22DEGREE_nn: + return "TILE_TYPE_22DEGREE_nn"; + + case TILE_TYPE_22DEGREE_np: + return "TILE_TYPE_22DEGREE_np"; + + case TILE_TYPE_22DEGREE_pn: + return "TILE_TYPE_22DEGREE_pn"; + + case TILE_TYPE_22DEGREE_pp: + return "TILE_TYPE_22DEGREE_pp"; + + case TILE_TYPE_45DEGREE_nn: + return "TILE_TYPE_45DEGREE_nn"; + + case TILE_TYPE_45DEGREE_np: + return "TILE_TYPE_45DEGREE_np"; + + case TILE_TYPE_45DEGREE_pn: + return "TILE_TYPE_45DEGREE_pn"; + + case TILE_TYPE_45DEGREE_pp: + return "TILE_TYPE_45DEGREE_pp"; + } + + return ""; +} + + +const char *GetTileMapNameResType(int id) +{ + + switch (id) + { + case RESOURCE_TYPES::AID: + return "RESOURCE_TYPES::AID"; + case RESOURCE_TYPES::ARMOUR: + return "RESOURCE_TYPES::AID"; + case RESOURCE_TYPES::LIFES: + return "RESOURCE_TYPES::LIFES"; + } + return ""; +} \ No newline at end of file diff --git a/Tables.h b/Tables.h new file mode 100644 index 0000000..d7306ba --- /dev/null +++ b/Tables.h @@ -0,0 +1,6 @@ +#pragma once + + +const char *GetTilesObjectName(int id); +const char *GetTileMapTypeName(int id); +const char *GetTileMapNameResType(int id); \ No newline at end of file diff --git a/TileMap.cpp b/TileMap.cpp new file mode 100644 index 0000000..3df69ea --- /dev/null +++ b/TileMap.cpp @@ -0,0 +1,167 @@ +#include + +#include "TileMap.h" + + + +TileMap::TileMap() +: GraphicObject() +{ + TYPE_ID = TILE_MAP_ID; + + edge_up = edge_down = edge_left = edge_right = EDGE_ID_OFF; + + layer = 0; + SetTileType(TILE_TYPE_EMPTY); + + show_tile_quad = false; +} + +TileMap::TileMap(char *resurce_name, hgeVector pos, short xw, short yw, short layer) +: GraphicObject(resurce_name, pos, xw, yw, layer) +{ + TYPE_ID = TILE_MAP_ID; + + edge_up = edge_down = edge_left = edge_right = EDGE_ID_OFF; + + layer = 0; + SetTileType(TILE_TYPE_EMPTY); + + show_tile_quad = false; +} + +TileMap::~TileMap() +{ +} + +void TileMap::SetTileType(short type) +{ + this->tile_type = type; +} + +void TileMap::Render() +{ + float x0, y0, x1, y1, x2, y2, x3, y3; + + x0 = pos.x - xw; y0 = pos.y - yw; + x1 = pos.x + xw; y1 = pos.y - yw; + x2 = pos.x + xw; y2 = pos.y + yw; + x3 = pos.x - xw; y3 = pos.y + yw; + + switch (tile_type) + { + case TILE_TYPE_EMPTY: + case TILE_TYPE_FULL: + { + if (!resource_name.empty()) + { + hgeSprite *sprite = resources_manager->GetSprite(resource_name.c_str()); + + if (sprite) + { + sprite->Render4V(x0, y0, x1, y1, x2, y2, x3, y3); + } + + RenderTileQuad(); + } + break; + } + } +} + +void TileMap::Save(std::ofstream *f) +{ + if (f) + { + size_t l = 0; + + f->write((const char *)&tile_type, sizeof(short)); + f->write((const char *)&pos.x, sizeof(float)); + f->write((const char *)&pos.y, sizeof(float)); + f->write((const char *)&xw, sizeof(short)); + f->write((const char *)&yw, sizeof(short)); + f->write((const char *)&layer, sizeof(short)); + + l = resource_name.size(); + + f->write((const char *)&l, sizeof(size_t)); + f->write(resource_name.c_str(), l*sizeof(char)); + } +} + +void TileMap::Load(std::ifstream *f) +{ + if (f) + { + size_t l = 0; + + f->read((char *)&tile_type, sizeof(short)); + f->read((char *)&pos.x, sizeof(float)); + f->read((char *)&pos.y, sizeof(float)); + f->read((char *)&xw, sizeof(short)); + f->read((char *)&yw, sizeof(short)); + f->read((char *)&layer, sizeof(short)); + + f->read((char *)&l, sizeof(size_t)); + + resource_name.clear(); + resource_name.resize(l); + + char *name = new char[l+1]; + + f->read(name, l*sizeof(char)); + name[l] = '\0'; + resource_name = name; + + delete[] name; + } +} + +void TileMap::InsertObject(GraphicDynamicObject *obj) +{ + for (size_t i = 0; i < objects.size(); i++) + { + if (obj == objects[i]) + return; + } + + objects.push_back(obj); +} + +void TileMap::RemoveObject(GraphicDynamicObject *obj) +{ + std::vector::iterator i = objects.begin(); + + while (i != objects.end()) + { + if (*i == obj) + { + objects.erase(i); + break; + } + i++; + } +} + +void TileMap::RenderTileQuad() +{ + if (show_tile_quad) + { + float x0, y0, x1, y1, x2, y2, x3, y3; + + x0 = pos.x - xw; y0 = pos.y - yw; + x1 = pos.x + xw; y1 = pos.y - yw; + x2 = pos.x + xw; y2 = pos.y + yw; + x3 = pos.x - xw; y3 = pos.y + yw; + + hge->Gfx_RenderLine(x0, y0, x1, y1, ARGB(255, 255, 0, 0)); + hge->Gfx_RenderLine(x1, y1, x2, y2, ARGB(255, 255, 0, 0)); + hge->Gfx_RenderLine(x2, y2, x3, y3, ARGB(255, 255, 0, 0)); + hge->Gfx_RenderLine(x3, y3, x0, y0, ARGB(255, 255, 0, 0)); + } +} + +void TileMap::ShowTileQuad(bool show) +{ + show_tile_quad = show; +} \ No newline at end of file diff --git a/TileMap.h b/TileMap.h new file mode 100644 index 0000000..24a4ba6 --- /dev/null +++ b/TileMap.h @@ -0,0 +1,51 @@ +#pragma once + + +#include + +#include "CollisionDefines.h" +#include "GraphicObject.h" +#include "Edges.h" + +#include + +#define TILE_TYPE_EMPTY 0 +#define TILE_TYPE_FULL 1 + +class Map; +class GraphicDynamicObject; + +class TileMap: public GraphicObject +{ + friend Map; + +public: + TileMap(); + TileMap(char *sprite_name, hgeVector pos, short xw, short yw, short layer); + + virtual ~TileMap(); + + virtual void SetTileType(short type); + short GetTileType() { return tile_type; } + + virtual void Render(); + + virtual void RenderTileQuad(); + virtual void ShowTileQuad(bool show); + + + virtual void Save(std::ofstream *file); + virtual void Load(std::ifstream *file); + + void InsertObject(GraphicDynamicObject *obj); + void RemoveObject(GraphicDynamicObject *obj); + +protected: + short tile_type; + bool show_tile_quad; + +public: + std::vector objects; //временно + short edge_up, edge_down, edge_left, edge_right; + +}; diff --git a/TileMapAnimation.cpp b/TileMapAnimation.cpp new file mode 100644 index 0000000..b4598ed --- /dev/null +++ b/TileMapAnimation.cpp @@ -0,0 +1,79 @@ +#include "TileMapAnimation.h" + +TileMapAnimation::TileMapAnimation() +: TileMap() +, animation(NULL) +{ + TYPE_ID = TILE_MAP_ANIMATION_ID; +} + +TileMapAnimation::TileMapAnimation(char *res_name, hgeVector pos, short xw, short yw, short layer) +: TileMap(res_name, pos, xw, yw, layer) +{ + TYPE_ID = TILE_MAP_ANIMATION_ID; + + if (res_name != NULL) + { + animation = new hgeAnimation( *(resources_manager->GetAnimation(resource_name.c_str())) ); + + animation->Play(); + } +} + +TileMapAnimation::~TileMapAnimation() +{ + if (animation) + { + delete animation; + animation = NULL; + } +} + +void TileMapAnimation::Render() +{ + float x0, y0, x1, y1, x2, y2, x3, y3; + + x0 = pos.x - xw; y0 = pos.y - yw; + x1 = pos.x + xw; y1 = pos.y - yw; + x2 = pos.x + xw; y2 = pos.y + yw; + x3 = pos.x - xw; y3 = pos.y + yw; + + if (animation) + { + animation->Render4V(x0, y0, x1, y1, x2, y2, x3, y3); + } + + RenderTileQuad(); +} + +void TileMapAnimation::Save(std::ofstream *file) +{ + TileMap::Save(file); +} + +void TileMapAnimation::Load(std::ifstream *file) +{ + TileMap::Load(file); + + if (animation != NULL) + delete animation; + + animation = new hgeAnimation( *(resources_manager->GetAnimation( resource_name.c_str())) ); + animation->Play(); +} + +void TileMapAnimation::UpdateGraphic() +{ + float dt = hge->Timer_GetDelta(); + animation->Update(dt); +} + +void TileMapAnimation::Stop() +{ + animation->Stop(); +} + +void TileMapAnimation::Play() +{ + animation->Play(); +} \ No newline at end of file diff --git a/TileMapAnimation.h b/TileMapAnimation.h new file mode 100644 index 0000000..9926c0c --- /dev/null +++ b/TileMapAnimation.h @@ -0,0 +1,26 @@ +#pragma once + +#include + +#include "TileMap.h" + +class TileMapAnimation: public TileMap +{ +public: + TileMapAnimation(); + TileMapAnimation(char *res_name, hgeVector pos, short xw, short yw, short layer); + virtual ~TileMapAnimation(); + + virtual void Render(); + + virtual void Save(std::ofstream *file); + virtual void Load(std::ifstream *file); + + virtual void UpdateGraphic(); + + virtual void Play(); + virtual void Stop(); + +protected: + hgeAnimation *animation; +}; diff --git a/TileMapAnimationEx.cpp b/TileMapAnimationEx.cpp new file mode 100644 index 0000000..125e99f --- /dev/null +++ b/TileMapAnimationEx.cpp @@ -0,0 +1,120 @@ +#include "TileMapAnimationEx.h" + +TileMapAnimationEx::TileMapAnimationEx() +: TileMapAnimation() +{ + Object::TYPE_ID = TILE_MAP_ANIMATION_EX_ID; + ps_name = ""; + ps = NULL; +} + +TileMapAnimationEx::TileMapAnimationEx(char *animation_name, char *particle_name, hgeVector pos, short xw, short yw, short layer) +: TileMapAnimation(animation_name, pos, xw, yw, layer) +{ + Object::TYPE_ID = TILE_MAP_ANIMATION_EX_ID; + + if (particle_name != NULL) + { + ps_name = particle_name; + + ps = new hgeParticleSystem( *(resources_manager->GetParticleSystem( ps_name.c_str() )) ); + + ps->FireAt(pos.x, pos.y); + } + else + { + ps = NULL; + } +} + +TileMapAnimationEx::~TileMapAnimationEx() +{ + if (ps) + { + delete ps; + ps = NULL; + } + + ps_name.clear(); +} + +void TileMapAnimationEx::Play() +{ + TileMapAnimation::Play(); + if (ps) + ps->Fire(); + +} + +void TileMapAnimationEx::Stop() +{ + TileMapAnimation::Stop(); + if (ps) + ps->Stop(); +} + +void TileMapAnimationEx::Render() +{ + TileMapAnimation::Render(); + + if (ps) + { + ps->Render(); + } +} + +void TileMapAnimationEx::Save(std::ofstream *f) +{ + TileMapAnimation::Save(f); + + size_t l = ps_name.length(); + + f->write((const char *)&l, sizeof(size_t)); + f->write(ps_name.c_str(), l*sizeof(char)); +} + +void TileMapAnimationEx::Load(std::ifstream *f) +{ + TileMapAnimation::Load(f); + + ps_name.clear(); + + size_t l = 0; + f->read((char *)&l, sizeof(size_t)); + + char *name = new char[l]; + f->read(name, l*sizeof(char)); + name[l] = '\0'; + + ps_name = name; + + + if (ps) + { + delete ps; + ps = NULL; + } + + if (!ps_name.empty()) + { + ps = new hgeParticleSystem( *(resources_manager->GetParticleSystem( ps_name.c_str() )) ); + ps->Fire(); + } + + +} + +void TileMapAnimationEx::MoveParticle(float x, float y, bool move) +{ + if (ps) + ps->MoveTo(x, y, move); +} + +void TileMapAnimationEx::UpdateGraphic() +{ + TileMapAnimation::UpdateGraphic(); + + float dt = hge->Timer_GetDelta(); + if (ps) + ps->Update(dt); +} \ No newline at end of file diff --git a/TileMapAnimationEx.h b/TileMapAnimationEx.h new file mode 100644 index 0000000..eca87c6 --- /dev/null +++ b/TileMapAnimationEx.h @@ -0,0 +1,31 @@ +#pragma once + +#include "TileMapAnimation.h" +#include "TileMapParticle.h" + +class TileMapAnimationEx: public TileMapAnimation +{ +public: + TileMapAnimationEx(); + TileMapAnimationEx(char *animation_name, char *particle_name, hgeVector pos, short xw, short yw, short layer); + virtual ~TileMapAnimationEx(); + + virtual void Render(); + + virtual void Save(std::ofstream *file); + virtual void Load(std::ifstream *file); + + virtual void UpdateGraphic(); + + hgeParticleSystem * GetParticle() const { return ps; } + + virtual void Play(); + virtual void Stop(); + virtual void MoveParticle(float x, float y, bool move); + + const char * GetPSName() { return ps_name.c_str(); } + +protected: + hgeParticleSystem *ps; + std::string ps_name; +}; diff --git a/TileMapEx.cpp b/TileMapEx.cpp new file mode 100644 index 0000000..c1d490d --- /dev/null +++ b/TileMapEx.cpp @@ -0,0 +1,167 @@ +#include +#include "TileMapEx.h" + +TileMapEx::TileMapEx() +: TileMap() +{ + TYPE_ID = TILE_MAP_EXTENDED_ID; +} + +TileMapEx::TileMapEx(char *texture_name, hgeVector pos, short xw, short yw, short layer) +: TileMap(texture_name, pos, xw, yw, layer) +{ + TYPE_ID = TILE_MAP_EXTENDED_ID; +} + +TileMapEx::~TileMapEx() +{ +} + +void TileMapEx::SetTileType(short type) +{ + tile_type = type; + switch (tile_type) + { + case TILE_TYPE_EMPTY: + case TILE_TYPE_FULL: + { + signx = 0; + signy = 0; + sx = 0; + sy = 0; + } + break; + + case TILE_TYPE_45DEGREE_pn: + { + signx = 1; + signy = -1; + sx = signx / sqrt(2.0f);//get slope unit normal + sy = signy / sqrt(2.0f);//since normal is (1,-1), length is sqrt(1*1 + -1*-1) = sqrt(2) + } + break; + + case TILE_TYPE_45DEGREE_nn: + { + signx = -1; + signy = -1; + sx = signx / sqrt(2.0f);//get slope unit normal + sy = signy / sqrt(2.0f);//since normal is (1,-1), length is sqrt(1*1 + -1*-1) = sqrt(2) + } + break; + + case TILE_TYPE_45DEGREE_np: + { + signx = -1; + signy = 1; + sx = signx / sqrt(2.0f);//get slope unit normal + sy = signy / sqrt(2.0f);//since normal is (1,-1), length is sqrt(1*1 + -1*-1) = sqrt(2) + } + break; + + case TILE_TYPE_45DEGREE_pp: + { + signx = 1; + signy = 1; + sx = signx / sqrt(2.0f);//get slope unit normal + sy = signy / sqrt(2.0f);//since normal is (1,-1), length is sqrt(1*1 + -1*-1) = sqrt(2) + } + break; + + case TILE_TYPE_22DEGREE_pn: + { + signx = 1; + signy = -1; + float slen = sqrt(2.0f*2.0f + 1.0f*1.0f); + sx = (signx * 1) / slen; + sy = (signy * 2) / slen; + } + break; + + case TILE_TYPE_22DEGREE_nn: + { + signx = -1; + signy = -1; + float slen = sqrt(2.0f*2.0f + 1.0f*1.0f); + sx = (signx * 1) / slen; + sy = (signy * 2) / slen; + } + break; + + case TILE_TYPE_22DEGREE_np: + { + signx = -1; + signy = 1; + float slen = sqrt(2.0f*2.0f + 1.0f*1.0f); + sx = (signx * 1) / slen; + sy = (signy * 2) / slen; + } + break; + + case TILE_TYPE_22DEGREE_pp: + { + signx = 1; + signy = 1; + float slen = sqrt(2.0f*2.0f + 1.0f*1.0f); + sx = (signx * 1) / slen; + sy = (signy * 2) / slen; + } + break; + } +} + +//TODO: render +void TileMapEx::Render() +{ + switch (tile_type) + { + case TILE_TYPE_EMPTY: + case TILE_TYPE_FULL: + { + TileMap::Render(); + } + break; + + default: + + TileMap::Render(); + float x0, y0, x1, y1, x2, y2, x3, y3; + + x0 = pos.x - xw; y0 = pos.y - yw; + x1 = pos.x + xw; y1 = pos.y - yw; + x2 = pos.x + xw; y2 = pos.y + yw; + x3 = pos.x - xw; y3 = pos.y + yw; + + hgeSprite *sprite = resources_manager->GetSprite(resource_name.c_str()); + if (sprite) + { + sprite->Render4V(x0, y0, x1, y1, x2, y2, x3, y3); + } + RenderTileQuad(); + + break; + } + +} + +void TileMapEx::Save(std::ofstream *f) +{ + TileMap::Save(f); + + f->write((const char *)&signx, sizeof(float)); + f->write((const char *)&signy, sizeof(float)); + f->write((const char *)&sx, sizeof(float)); + f->write((const char *)&sy, sizeof(float)); + +} + +void TileMapEx::Load(std::ifstream *f) +{ + TileMap::Load(f); + + f->read((char *)&signx, sizeof(float)); + f->read((char *)&signy, sizeof(float)); + f->read((char *)&sx, sizeof(float)); + f->read((char *)&sy, sizeof(float)); + +} \ No newline at end of file diff --git a/TileMapEx.h b/TileMapEx.h new file mode 100644 index 0000000..83a9930 --- /dev/null +++ b/TileMapEx.h @@ -0,0 +1,33 @@ +#pragma once + +#include "TileMap.h" + +#define TILE_TYPE_45DEGREE_pn 2//45-degree triangle, whose normal is (+ve,-ve) +#define TILE_TYPE_45DEGREE_nn 3//(+ve,+ve) +#define TILE_TYPE_45DEGREE_np 4//(-ve,+ve) +#define TILE_TYPE_45DEGREE_pp 5//(-ve,-ve) + +#define TILE_TYPE_22DEGREE_pn 6 +#define TILE_TYPE_22DEGREE_nn 7 +#define TILE_TYPE_22DEGREE_np 8 +#define TILE_TYPE_22DEGREE_pp 9 + + +class TileMapEx: public TileMap +{ +public: + TileMapEx(); + TileMapEx(char *sprite_name, hgeVector pos, short xw, short yw, short layer); + virtual ~TileMapEx(); + + virtual void SetTileType(short type); + + virtual void Save(std::ofstream *file); + virtual void Load(std::ifstream *file); + + virtual void Render(); + +public: + float signx, signy; + float sx, sy; +}; diff --git a/TileMapParticle.cpp b/TileMapParticle.cpp new file mode 100644 index 0000000..ce89216 --- /dev/null +++ b/TileMapParticle.cpp @@ -0,0 +1,100 @@ +#include "TileMapParticle.h" + +TileMapParticle::TileMapParticle() +: TileMap() +, ps(NULL) +{ + TYPE_ID = TILE_MAP_PARTICLE_ID; + + ps_name = ""; + ps = NULL; +} + + +TileMapParticle::TileMapParticle(char *texture_name, char *name_particle, hgeVector pos, short xw, short yw, short layer) +: TileMap(texture_name, pos, xw, yw, layer) +{ + TYPE_ID = TILE_MAP_PARTICLE_ID; + + ps_name = name_particle; + + ps = new hgeParticleSystem( *(resources_manager->GetParticleSystem( ps_name.c_str() )) ); + + ps->FireAt(pos.x, pos.y); +} + +TileMapParticle::~TileMapParticle() +{ + if (ps) + { + delete ps; + ps = NULL; + } + + ps_name.clear(); +} + + +void TileMapParticle::Render() +{ + TileMap::Render(); + + if (ps) + { + ps->Render(); + } +} + +void TileMapParticle::Save(std::ofstream *f) +{ + TileMap::Save(f); + + size_t l = ps_name.length(); + + f->write((const char *)&l, sizeof(size_t)); + f->write(ps_name.c_str(), l*sizeof(char)); + +} + +void TileMapParticle::Load(std::ifstream *f) +{ + TileMap::Load(f); + ps_name.clear(); + + size_t l = 0; + f->read((char *)&l, sizeof(size_t)); + + char *name = new char[l]; + f->read(name, l*sizeof(char)); + + ps_name = name; + + if (ps) + { + delete ps; + } + + ps = new hgeParticleSystem( *(resources_manager->GetParticleSystem( ps_name.c_str() )) ); + ps->Fire(); +} + +void TileMapParticle::UpdateGraphic() +{ + float dt = hge->Timer_GetDelta(); + ps->Update(dt); +} + +void TileMapParticle::Play() +{ + ps->Fire(); +} + +void TileMapParticle::Stop() +{ + ps->Stop(); +} + +void TileMapParticle::MoveParticle(float x, float y, bool move) +{ + ps->MoveTo(x, y, move); +} \ No newline at end of file diff --git a/TileMapParticle.h b/TileMapParticle.h new file mode 100644 index 0000000..34b07fd --- /dev/null +++ b/TileMapParticle.h @@ -0,0 +1,32 @@ +#pragma once + +#include + +#include "TileMap.h" + +class TileMapParticle: public TileMap +{ +public: + TileMapParticle(); + TileMapParticle(char *texture_name, char *particle_name, hgeVector pos, short xw, short yw, short layer); + virtual ~TileMapParticle(); + + virtual void Render(); + + virtual void Save(std::ofstream *file); + virtual void Load(std::ifstream *file); + + virtual void UpdateGraphic(); + + hgeParticleSystem * GetParticle() const { return ps; } + + virtual void Play(); + virtual void Stop(); + void MoveParticle(float x, float y, bool move); + + const char * GetPSName() { return ps_name.c_str(); } + +protected: + hgeParticleSystem *ps; + std::string ps_name; +}; diff --git a/TileMapResource.cpp b/TileMapResource.cpp new file mode 100644 index 0000000..d6cb6ae --- /dev/null +++ b/TileMapResource.cpp @@ -0,0 +1,146 @@ +#include "TileMapResource.h" + +TileMapResource::TileMapResource() +: TileMapAnimationEx() +{ + Object::TYPE_ID = TILE_MAP_RESOURCE_ID; + + used_name_ps = ""; + ps_used = NULL; + + resource_type = 0; +} + +TileMapResource::TileMapResource(char *animation_name, char *particle_name, char *particle_used_name, hgeVector pos, short xw, short yw, short layer) +: TileMapAnimationEx(animation_name, particle_name, pos, xw, yw, layer) +{ + Object::TYPE_ID = TILE_MAP_RESOURCE_ID; + + if (particle_used_name != NULL) + { + used_name_ps = particle_used_name; + + ps_used = new hgeParticleSystem( *(resources_manager->GetParticleSystem( particle_used_name )) ); + } + else + { + ps_used = NULL; + } + + used = false; + + resource_type = 0; +} + +TileMapResource::~TileMapResource() +{ +} + + +void TileMapResource::UpdateGraphic() +{ + if (!used) + { + TileMapAnimationEx::UpdateGraphic(); + } + else + { + float dt = hge->Timer_GetDelta(); + if (ps_used) + ps_used->Update(dt); + } +} + +void TileMapResource::Render() +{ + if (!used) + { + TileMapAnimationEx::Render(); + } + else + { + ps_used->Render(); + } +} + +void TileMapResource::MoveParticle(float x, float y, bool move) +{ + if (!used) + { + TileMapAnimationEx::MoveParticle(x, y, move); + } + else + { + if (ps_used) + ps_used->MoveTo(x, y, move); + } +} + +void TileMapResource::Used(bool used) +{ + this->used = used; + + if (!used) + { + animation->Play(); + + if (ps_used) + ps_used->Stop(); + + if (ps) + ps->Fire(); + } + else + { + animation->Stop(); + + if (ps) + ps->Stop(); + + if (ps_used) + ps_used->Fire(); + } +} + +void TileMapResource::Save(std::ofstream *f) +{ + TileMapAnimationEx::Save(f); + + size_t l = used_name_ps.length(); + + f->write((const char *)&resource_type, sizeof(int)); + + f->write((const char *)&l, sizeof(size_t)); + f->write(used_name_ps.c_str(), l*sizeof(char)); +} + +void TileMapResource::Load(std::ifstream *f) +{ + TileMapAnimationEx::Load(f); + + used_name_ps.clear(); + + f->read((char *)&resource_type, sizeof(int)); + + size_t l = 0; + f->read((char *)&l, sizeof(size_t)); + + char *name = new char[l]; + f->read(name, l*sizeof(char)); + name[l] = '\0'; + + used_name_ps = name; + + if (ps_used) + { + delete ps_used; + ps_used = NULL; + } + + if (!used_name_ps.empty()) + { + ps_used = new hgeParticleSystem( *(resources_manager->GetParticleSystem( used_name_ps.c_str() )) ); + } + + used = false; +} \ No newline at end of file diff --git a/TileMapResource.h b/TileMapResource.h new file mode 100644 index 0000000..2a37caf --- /dev/null +++ b/TileMapResource.h @@ -0,0 +1,47 @@ +#pragma once + +#include "TileMapAnimationEx.h" + +enum RESOURCE_TYPES +{ + LIFES = 1, + AID = 2, + ARMOUR = 3 +}; + +class Entity; + +class TileMapResource: public TileMapAnimationEx +{ +public: + TileMapResource(); + TileMapResource(char *animation_name, char *particle_name, char *particle_used_name, hgeVector pos, short xw, short yw, short layer); + ~TileMapResource(); + + inline void SetResourceType(int type) { resource_type = type; } + inline int GetResourceType() const { return resource_type; } + + inline bool IsUsed() const { return used; } + inline void Used(bool used); + virtual void UpdateGraphic(); + + virtual void Render(); + + void MoveParticle(float x, float y, bool move); + + virtual void Save(std::ofstream *file); + virtual void Load(std::ifstream *file); + + const char* GetUsedPSName() { return used_name_ps.c_str(); } + +protected: + int resource_type; + + bool used; + + float time; + float timer; + + hgeParticleSystem *ps_used; + std::string used_name_ps; +}; diff --git a/hge.dll b/hge.dll new file mode 100644 index 0000000000000000000000000000000000000000..222a0fd480c3bd2a95898543768a9b4645594c38 GIT binary patch literal 166400 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%0A6Q>@jrA{J+-%8Tn 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 Z#{`ZE91}Pua7^Hsz%hYi0^g|<_+P_<#47** literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..3384924 --- /dev/null +++ b/main.cpp @@ -0,0 +1,517 @@ +#include +#include + +#include "Map.h" +#include "Initiate.h" +#include "Tables.h" +#include "InitCombo.h" + +#pragma comment(lib, "hge.lib") +#pragma comment(lib, "hgehelp.lib") + + +HGE* hge = NULL; +hgeResourceManager *resource_manager = NULL; + + + +HWND hwndHGE = 0; + +HWND hCB_ObjType = 0; +HWND hCB_SprName = 0; +HWND hCB_AnimName = 0; +HWND hCB_TileType = 0; +HWND hCB_PS1 = 0; +HWND hCB_PS2 = 0; +HWND hCB_ResType = 0; + +HWND hEdit = 0; +HWND hEditLoad = 0; +HWND hEditSave = 0; + +HWND hButtonOk = 0; +HWND hButtonDel = 0; +HWND hButtonSave = 0; +HWND hButtonLoad = 0; + +hgeVector mouse_pos(0, 0); +hgeRect hge_rect(0, 0, 800, 768); + + +Map *map = NULL; + + +TileMap *tile = NULL; +int layer = 0; +int row = 0, col = 0; + +// #define LAYER 3 +#define LAYERS 7 + + +LRESULT CALLBACK HGEProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); + + +void InitMap() +{ + size_t rows = 20; + size_t cols = 250; + map = new Map(LAYERS, rows, cols, 800, 768, 64, 64); + + TileMap *tile = NULL; + hgeVector pos(32, 32); + + for (size_t i = 0; i < rows; i++) + { + for (size_t j = 0; j < cols; j++) + { + tile = new TileMap("empty", pos, 32, 32, 3); + tile->SetTileType(TILE_TYPE_EMPTY); + pos.x += 64; + + map->InsertTile(i, j, tile); + } + pos.x = 32; + pos.y += 64; + } +} + + + +bool FrameFunc() +{ + POINT p; + GetCursorPos(&p); + + ScreenToClient(hwndHGE, &p); + + mouse_pos.x = (float)p.x; + mouse_pos.y = (float)p.y; + + if (map) + map->UpdateGraphic(); + + if (hge->Input_GetKeyState(HGEK_LBUTTON) && hge_rect.TestPoint(mouse_pos.x, mouse_pos.y)) + { + int n = GetWindowTextLength(hEdit)+1; + char *buf = new char[n]; + GetWindowText(hEdit, buf, n); + layer = atoi(buf); + delete[] buf; + + if (tile) + tile->ShowTileQuad(false); + + tile = map->SelectTile(layer, mouse_pos); + map->GetTileIndex(&mouse_pos, row, col); + + if (!tile) + { + SendMessage(hCB_ObjType, CB_SETCURSEL, 0, 0); + SendMessage(hCB_SprName, CB_SETCURSEL, 0, 0); + SendMessage(hCB_AnimName, CB_SETCURSEL, 0, 0); + SendMessage(hCB_TileType, CB_SETCURSEL, 0, 0); + } + else + { + SendMessage(hCB_ObjType, CB_SETCURSEL, 0, 0); + SendMessage(hCB_SprName, CB_SETCURSEL, 0, 0); + SendMessage(hCB_AnimName, CB_SETCURSEL, 0, 0); + SendMessage(hCB_TileType, CB_SETCURSEL, 0, 0); + + tile->ShowTileQuad(true); + + LRESULT index = SendMessage(hCB_ObjType, CB_FINDSTRING, -1, (LPARAM)GetTilesObjectName(tile->GetObjectType())); + if (index != -1) + SendMessage(hCB_ObjType, CB_SETCURSEL, index, 0); + + if (tile->GetObjectType() == TILE_MAP_RESOURCE_ID) + { + TileMapResource *tr = (TileMapResource *)tile; + index = SendMessage(hCB_ResType, CB_FINDSTRING, -1, (LPARAM)GetTileMapNameResType(tr->GetResourceType())); + if (index != -1) + SendMessage(hCB_ResType, CB_SETCURSEL, index, 0); + + index = SendMessage(hCB_PS2, CB_FINDSTRING, -1, (LPARAM)((TileMapResource *)tile)->GetUsedPSName()); + if (index != -1) + SendMessage(hCB_PS2, CB_SETCURSEL, index, 0); + } + + index = SendMessage(hCB_SprName, CB_FINDSTRING, -1, (LPARAM)tile->GetResName()); + if (index != -1) + SendMessage(hCB_SprName, CB_SETCURSEL, index, 0); + + if (tile->GetObjectType() == TILE_MAP_ANIMATION_EX_ID || tile->GetObjectType() == TILE_MAP_PARTICLE_ID) + { + if (tile->GetObjectType() == TILE_MAP_ANIMATION_EX_ID) + { + index = SendMessage(hCB_PS1, CB_FINDSTRING, -1, (LPARAM)((TileMapAnimationEx *)tile)->GetPSName()); + } + else if (tile->GetObjectType() == TILE_MAP_PARTICLE_ID) + { + index = SendMessage(hCB_PS1, CB_FINDSTRING, -1, (LPARAM)((TileMapParticle *)tile)->GetPSName()); + } + if (index != -1) + { + SendMessage(hCB_PS1, CB_SETCURSEL, index, 0); + } + } + + + if (tile->GetObjectType() == TILE_MAP_ANIMATION_ID || + tile->GetObjectType() == TILE_MAP_ANIMATION_EX_ID || + tile->GetObjectType() == TILE_MAP_RESOURCE_ID) + { + index = SendMessage(hCB_AnimName, CB_FINDSTRING, -1, (LPARAM)tile->GetResName()); + if (index != -1) + SendMessage(hCB_AnimName, CB_SETCURSEL, index, 0); + } + + + index = SendMessage(hCB_TileType, CB_FINDSTRING, -1, (LPARAM)GetTileMapTypeName(tile->GetTileType())); + if (index != -1) + SendMessage(hCB_TileType, CB_SETCURSEL, index, 0); + } + } + + + int offset = 4; + if (hge->Input_GetKeyState(HGEK_S)) + { + map->VerticalScroll(offset); + } + if (hge->Input_GetKeyState(HGEK_W)) + { + map->VerticalScroll(offset*-1); + } + if (hge->Input_GetKeyState(HGEK_D)) + { + map->HorizontalScroll(offset); + } + if (hge->Input_GetKeyState(HGEK_A)) + { + map->HorizontalScroll(offset*-1); + } + + + return false; +} + + +bool RenderFunc() +{ + hge->Gfx_BeginScene(); + hge->Gfx_Clear(0); + + for (int i = 0; i < LAYERS; i++) + { + map->Render(i); + } + + hge->Gfx_EndScene(); + return false; +} + + +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR, int iCmdShow) +{ + MSG msg; + WNDCLASS wndclass; + char szHGEName[] = "HGE Workspace"; + + wndclass.style = CS_HREDRAW|CS_VREDRAW; + wndclass.lpfnWndProc = HGEProc; + wndclass.cbClsExtra = 0; + wndclass.cbWndExtra = 0; + wndclass.hInstance = hInstance; + wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); + wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);; + wndclass.lpszMenuName = NULL; + wndclass.lpszClassName = szHGEName; + + if ( !RegisterClass(&wndclass) ) + { + MessageBox(NULL, "Unable to open the HGE window!", szHGEName, MB_ICONERROR); + return 0; + } + + hwndHGE = CreateWindowEx(WS_EX_CLIENTEDGE, + szHGEName, + szHGEName, + WS_OVERLAPPEDWINDOW|WS_VISIBLE, + 15,128, + 1024,768, + NULL, + NULL, + hInstance, + NULL + ); + + if (hwndHGE == NULL) + { + MessageBox(NULL, "HGE Window Creation Failed!", "Error!", MB_ICONEXCLAMATION|MB_OK); + return 0; + } + + hButtonOk = CreateWindow("BUTTON", "OK", WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON, 808,250,80,30, hwndHGE, NULL, hInstance, NULL); + + hButtonDel = CreateWindow("BUTTON", "DELETE", WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON, 914,250,80,30, hwndHGE, NULL, hInstance, NULL); + hButtonLoad = CreateWindow("BUTTON", "Load", WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON, 937,610,60,30, hwndHGE, NULL, hInstance, NULL); + hButtonSave = CreateWindow("BUTTON", "Save", WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON, 937,640,60,30, hwndHGE, NULL, hInstance, NULL); + + hCB_ObjType = CreateWindowEx(WS_EX_CLIENTEDGE, "COMBOBOX", "", WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_AUTOHSCROLL|CBS_DROPDOWNLIST, 804,10,200,500, hwndHGE, NULL, hInstance, NULL); + hCB_SprName = CreateWindowEx(WS_EX_CLIENTEDGE, "COMBOBOX", "", WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_AUTOHSCROLL|CBS_DROPDOWNLIST, 804,40,200,500, hwndHGE, NULL, hInstance, NULL); + hCB_AnimName = CreateWindowEx(WS_EX_CLIENTEDGE, "COMBOBOX", "", WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_AUTOHSCROLL|CBS_DROPDOWNLIST, 804,70,200,500, hwndHGE, NULL, hInstance, NULL); + hCB_TileType = CreateWindowEx(WS_EX_CLIENTEDGE, "COMBOBOX", "", WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_AUTOHSCROLL|CBS_DROPDOWNLIST, 804,100,200,500, hwndHGE, NULL, hInstance, NULL); + hCB_PS1 = CreateWindowEx(WS_EX_CLIENTEDGE, "COMBOBOX", "", WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_AUTOHSCROLL|CBS_DROPDOWNLIST, 804,130,200,500, hwndHGE, NULL, hInstance, NULL); + hCB_PS2 = CreateWindowEx(WS_EX_CLIENTEDGE, "COMBOBOX", "", WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_AUTOHSCROLL|CBS_DROPDOWNLIST, 804,160,200,500, hwndHGE, NULL, hInstance, NULL); + hCB_ResType = CreateWindowEx(WS_EX_CLIENTEDGE, "COMBOBOX", "", WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_AUTOHSCROLL|CBS_DROPDOWNLIST, 804,190,200,500, hwndHGE, NULL, hInstance, NULL); + + hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL|ES_NUMBER, 870,300,80,30, hwndHGE, NULL, hInstance, NULL); + hEditLoad = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL, 804,610,128,30, hwndHGE, NULL, hInstance, NULL); + hEditSave = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL, 804,640,128,30, hwndHGE, NULL, hInstance, NULL); + + InitComboBoxTiles(); + InitComboBox1(); + InitComboBox2(); + InitComboBox3(); + InitComboBoxPS1(); + InitComboBoxPS2(); + InitComboBoxTileRes(); + + SetWindowText(hEdit, "0"); + + ShowWindow(hwndHGE, iCmdShow); + UpdateWindow(hwndHGE); + + RECT hgeClient; + GetClientRect(hwndHGE, &hgeClient); + + hge = hgeCreate(HGE_VERSION); + + hge->System_SetState(HGE_FRAMEFUNC, FrameFunc); + hge->System_SetState(HGE_RENDERFUNC, RenderFunc); + hge->System_SetState(HGE_USESOUND, false); + hge->System_SetState(HGE_WINDOWED, true); + hge->System_SetState(HGE_SCREENWIDTH, 800); + hge->System_SetState(HGE_SCREENHEIGHT, 768); + hge->System_SetState(HGE_SCREENBPP, 32); + hge->System_SetState(HGE_HIDEMOUSE, false); + hge->System_SetState(HGE_HWNDPARENT, hwndHGE ); + + if (hge->System_Initiate() ) + { + resource_manager = CreateResourceManager(); + resource_manager->ChangeScript("resource.rs"); + + InitMap(); + + while (true) + { + if(hge->System_GetState(HGE_HWND)) + hge->System_Start(); + + if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + { + if(msg.message == WM_QUIT) + break; + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + } + + delete map; + + hge->System_Shutdown(); + hge->Release(); + + return 0; +} + +LRESULT CALLBACK HGEProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + HDC hdc; + PAINTSTRUCT ps; + + + switch (msg) + { + case WM_CREATE: + return 0; + + case WM_PAINT: + hdc = BeginPaint(hwnd, &ps); + EndPaint(hwnd, &ps); + return 0; + + case WM_DESTROY: + return 0; + + case WM_COMMAND: + if ((HWND)lParam == hButtonSave) + { + char *path = NULL; + int len = GetWindowTextLength(hEditSave)+1; + path = new char[len]; + GetWindowText(hEditSave, path, len); + map->Save(path); + delete[] path; + } + else if ((HWND)lParam == hButtonLoad) + { + char *path = NULL; + int len = GetWindowTextLength(hEditLoad)+1; + path = new char[len]; + GetWindowText(hEditLoad, path, len); + map->Load(path); + delete[] path; + } + else if ((HWND)lParam == hButtonOk) + { + char *spr_name = NULL, *anim_name = NULL, *ps_name1 = NULL, *ps_name2 = NULL; + int res_type = 0; + + int len = 0; + LRESULT tile_type = -1; + LRESULT obj_type = -1; + LRESULT cur_index = -1; + + cur_index = SendMessage(hCB_ObjType, CB_GETCURSEL, 0, 0); + obj_type = SendMessage(hCB_ObjType, CB_GETITEMDATA, cur_index, 0); + + cur_index = SendMessage(hCB_TileType, CB_GETCURSEL, 0, 0); + tile_type = SendMessage(hCB_TileType, CB_GETITEMDATA, cur_index, 0); + + len = GetWindowTextLength(hCB_SprName)+1; + spr_name = new char[len]; + + GetWindowText(hCB_SprName, spr_name, len); + if (strcmp("undefined", spr_name) == 0) + { + delete[] spr_name; + spr_name = NULL; + } + + if (obj_type == TILE_MAP_ANIMATION_ID || obj_type == TILE_MAP_ANIMATION_EX_ID || obj_type == TILE_MAP_RESOURCE_ID) + { + len = GetWindowTextLength(hCB_AnimName)+1; + anim_name = new char[len]; + GetWindowText(hCB_AnimName, anim_name, len); + if (strcmp("undefined", anim_name) == 0) + { + delete[] anim_name; + anim_name = NULL; + } + } + + if (obj_type == TILE_MAP_ANIMATION_EX_ID || obj_type == TILE_MAP_PARTICLE_ID || obj_type == TILE_MAP_RESOURCE_ID) + { + len = GetWindowTextLength(hCB_PS1)+1; + ps_name1 = new char[len]; + GetWindowText(hCB_PS1, ps_name1, len); + if (strcmp("undefined", ps_name1) == 0) + { + delete[] ps_name1; + ps_name1 = NULL; + } + } + + if (obj_type == TILE_MAP_RESOURCE_ID) + { + len = GetWindowTextLength(hCB_PS2)+1; + ps_name2 = new char[len]; + GetWindowText(hCB_PS2, ps_name2, len); + if (strcmp("undefined", ps_name2) == 0) + { + delete[] ps_name2; + ps_name2 = NULL; + } + } + + + if (obj_type == TILE_MAP_RESOURCE_ID) + { + len = GetWindowTextLength(hCB_ResType)+1; + char *str = new char[len]; + GetWindowText(hCB_ResType, str, len); + + if (strcmp(str, "RESOURCE_TYPES::LIFES") == 0) + { + res_type = RESOURCE_TYPES::LIFES; + } + else if (strcmp(str, "RESOURCE_TYPES::AID") == 0) + { + res_type = RESOURCE_TYPES::AID; + } + else if (strcmp(str, "RESOURCE_TYPES::ARMOUR") == 0) + { + res_type = RESOURCE_TYPES::ARMOUR; + } + } + + + hgeVector pos(32, 32); + pos.x += col*64; + pos.y += row*64; + + if (obj_type != -1) + { + map->DeleteTile(layer, row, col); + tile = NULL; + } + + switch (obj_type) + { + case TILE_MAP_ID: + tile = new TileMap(spr_name, pos, 32, 32, layer); + break; + case TILE_MAP_EXTENDED_ID: + tile = new TileMapEx(spr_name, pos, 32, 32, layer); + break; + case TILE_MAP_ANIMATION_ID: + tile = new TileMapAnimation(anim_name, pos, 32, 32, layer); + break; + case TILE_MAP_PARTICLE_ID: + tile = new TileMapParticle(spr_name, ps_name1, pos, 32, 32, layer); + break; + case TILE_MAP_ANIMATION_EX_ID: + tile = new TileMapAnimationEx(anim_name, ps_name1, pos, 32, 32, layer); + break; + case TILE_MAP_RESOURCE_ID: + tile = new TileMapResource(anim_name, ps_name1, ps_name2, pos, 32, 32, layer); + ((TileMapResource *)tile)->SetResourceType(res_type); + break; + } + + if (tile && -1 < tile_type) + { + tile->SetTileType(tile_type); + } + + if (tile) + { + tile->ShowTileQuad(true); + map->InsertTile(row, col, tile); + } + + delete[] spr_name; + delete[] anim_name; + delete[] ps_name1; + delete[] ps_name2; + } + break; + + case WM_LBUTTONDOWN: + mouse_pos.x = LOWORD(lParam); + mouse_pos.y = HIWORD(lParam); + break; + + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + + } + + return 0; +} \ No newline at end of file diff --git a/options.h b/options.h new file mode 100644 index 0000000..e69de29