From 74871ca4b53994f3906a950704100c722c736fbd Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Sat, 26 Aug 2023 14:05:19 -0500 Subject: [PATCH] Implement Memory Collection Point animations and units --- olcCodeJam2023Entry/Constant.h | 2 + olcCodeJam2023Entry/Image.h | 4 +- olcCodeJam2023Entry/Info.txt | 3 +- olcCodeJam2023Entry/VirusAttack.cpp | 127 +++++++++++++++++- olcCodeJam2023Entry/VirusAttack.h | 24 ++++ olcCodeJam2023Entry/assets/bit_restorer.png | Bin 0 -> 9548 bytes olcCodeJam2023Entry/assets/corrupter.png | Bin 0 -> 11063 bytes olcCodeJam2023Entry/assets/left_shifter.png | Bin 0 -> 9205 bytes .../assets/memory_collection_point.png | Bin 0 -> 946 bytes olcCodeJam2023Entry/assets/memory_swapper.png | Bin 0 -> 11450 bytes olcCodeJam2023Entry/assets/right_shifter.png | Bin 0 -> 9224 bytes .../olcCodeJam2023Entry.vcxproj | 2 + .../olcCodeJam2023Entry.vcxproj.filters | 6 + olcCodeJam2023Entry/util.cpp | 8 ++ olcCodeJam2023Entry/util.h | 5 + 15 files changed, 172 insertions(+), 9 deletions(-) create mode 100644 olcCodeJam2023Entry/assets/bit_restorer.png create mode 100644 olcCodeJam2023Entry/assets/corrupter.png create mode 100644 olcCodeJam2023Entry/assets/left_shifter.png create mode 100644 olcCodeJam2023Entry/assets/memory_collection_point.png create mode 100644 olcCodeJam2023Entry/assets/memory_swapper.png create mode 100644 olcCodeJam2023Entry/assets/right_shifter.png create mode 100644 olcCodeJam2023Entry/util.cpp create mode 100644 olcCodeJam2023Entry/util.h diff --git a/olcCodeJam2023Entry/Constant.h b/olcCodeJam2023Entry/Constant.h index 50a5dd3..70a14db 100644 --- a/olcCodeJam2023Entry/Constant.h +++ b/olcCodeJam2023Entry/Constant.h @@ -1,6 +1,8 @@ #pragma once #include "olcPixelGameEngine.h" +#define PI 3.14159 + class CONSTANT{ public: static vf2d BAR_SQUARE_SIZE; diff --git a/olcCodeJam2023Entry/Image.h b/olcCodeJam2023Entry/Image.h index dda8e4d..44fceae 100644 --- a/olcCodeJam2023Entry/Image.h +++ b/olcCodeJam2023Entry/Image.h @@ -7,6 +7,8 @@ enum Image{ OUTLINE, MINIMAP_OUTLINE, VIRUS_IMG1, - SELECTION_CIRCLE + SELECTION_CIRCLE, + MATRIX, + MEMORY_COLLECTION_POINT, }; diff --git a/olcCodeJam2023Entry/Info.txt b/olcCodeJam2023Entry/Info.txt index 38676ee..d2d99e9 100644 --- a/olcCodeJam2023Entry/Info.txt +++ b/olcCodeJam2023Entry/Info.txt @@ -4,8 +4,7 @@ Bit Repair Memory Swapper Corrupter (Randomly destroys bits) -Pipes -Attach collectors to them +"Memory Collection Point" Attach collectors to them (Unit attaches to pipe) Memory Structure (Allocators) RAM Bank (Creates new Memory Structures) has its own rate of creation based on Procedure amount. diff --git a/olcCodeJam2023Entry/VirusAttack.cpp b/olcCodeJam2023Entry/VirusAttack.cpp index 5ef6d31..774c9ae 100644 --- a/olcCodeJam2023Entry/VirusAttack.cpp +++ b/olcCodeJam2023Entry/VirusAttack.cpp @@ -3,6 +3,7 @@ #define OLC_PGEX_TRANSFORMEDVIEW #include "olcUTIL_Geometry2D.h" #include "TileManager.h" +#include "util.h" #include "VirusAttack.h" @@ -22,10 +23,12 @@ void VirusAttack::InitializeImages(){ LoadImage(OUTLINE,"assets/outline.png"); LoadImage(VIRUS_IMG1,"assets/unit.png"); LoadImage(SELECTION_CIRCLE,"assets/selection_circle.png"); - + LoadImage(MEMORY_COLLECTION_POINT,"assets/memory_collection_point.png"); } bool VirusAttack::OnUserCreate(){ + SetPixelMode(Pixel::MASK); + game.Initialise(GetScreenSize()); InitializeImages(); @@ -33,6 +36,10 @@ bool VirusAttack::OnUserCreate(){ IMAGES[MINIMAP_OUTLINE]=std::make_unique(); IMAGES[MINIMAP_OUTLINE]->Create(64,64); + IMAGES[MATRIX]=std::make_unique(); + IMAGES[MATRIX]->Create(64,64,false,false); + IMAGES[MATRIX]->Sprite()->SetSampleMode(Sprite::PERIODIC); + units.push_back(std::make_unique(vf2d{32,32},*IMAGES[VIRUS_IMG1],true)); for(int i=0;i<10;i++){ if(rand()%2==0){ @@ -41,6 +48,12 @@ bool VirusAttack::OnUserCreate(){ units.push_back(std::make_unique(vf2d{float(rand()%ScreenWidth()),float(rand()%ScreenHeight())},*IMAGES[VIRUS_IMG1],false)); } } + + for(int i=0;i<5;i++){ + collectionPoints.push_back(std::make_unique(this,vf2d{32.f+48*i,32.f},0,*IMAGES[MEMORY_COLLECTION_POINT],MemoryType(i))); + collectionPoints.push_back(std::make_unique(this,vf2d{32.f,32.f+48*i},-PI/2,*IMAGES[MEMORY_COLLECTION_POINT],MemoryType(i))); + } + return true; } @@ -136,11 +149,7 @@ void VirusAttack::DrawMinimap(){ vi2d worldPixelSize=CONSTANT::WORLD_SIZE*CONSTANT::TILE_SIZE; vf2d viewingTilesPct=vf2d{float(ScreenWidth()),float(ScreenHeight())}/CONSTANT::TILE_SIZE/CONSTANT::WORLD_SIZE; SetDrawTarget(IMAGES[MINIMAP_OUTLINE]->Sprite()); - for(int y=0;y<64;y++){ - for(int x=0;x<64;x++){ - Draw(x,y,BLANK); - } - } + Clear(BLANK); DrawRect((game.GetWorldOffset()/worldPixelSize*64),viewingTilesPct*64/game.GetWorldScale()); for(auto&u:units){ FillRect(u->GetGhostPos()/worldPixelSize*64,vf2d{2,2}*u->GetUnitSize()/24,u->IsFriendly()?GREEN:RED); @@ -184,7 +193,59 @@ void VirusAttack::HandleMinimapClick(){ } } +void VirusAttack::UpdateMatrixTexture(float fElapsedTime){ + if(matrixTimer==0){ + activeLetters.emplace_back(vf2d{float(rand()%64),float(64)},util::random(-40)-20,matrixLetters[rand()%matrixLetters.size()]); + matrixTimer=util::random(0.125); + } + if(updatePixelsTimer==0){ + SetDrawTarget(IMAGES[MATRIX]->Sprite()); + Sprite*img=IMAGES[MATRIX]->Sprite(); + for(int y=63;y>=0;y--){ + for(int x=63;x>=0;x--){ + Pixel col=img->GetPixel(x,y); + if(col.r>0){ + if(x>0){ + Pixel leftCol=img->GetPixel(x-1,y); + if(leftCol.rwidth-1){ + Pixel rightCol=img->GetPixel(x+1,y); + if(rightCol.rGetPixel(1,y)); + } + SetDrawTarget(nullptr); + updatePixelsTimer=0.1; + } + if(activeLetters.size()>0){ + SetDrawTarget(IMAGES[MATRIX]->Sprite()); + for(Letter&letter:activeLetters){ + letter.pos.y+=letter.spd*fElapsedTime; + DrawString(letter.pos,std::string(1,letter.c)); + } + SetDrawTarget(nullptr); + IMAGES[MATRIX]->Decal()->Update(); + } + matrixTimer=std::max(0.f,matrixTimer-fElapsedTime); + updatePixelsTimer=std::max(0.f,updatePixelsTimer-fElapsedTime); + std::erase_if(activeLetters,[](Letter&letter){return letter.pos.y<-32;}); +} + bool VirusAttack::OnUserUpdate(float fElapsedTime){ + UpdateMatrixTexture(fElapsedTime); HandleDraggingSelection(); HandleRightClickMove(); HandlePanAndZoom(fElapsedTime); @@ -223,6 +284,34 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){ for(auto&u:units){ u->Draw(game,IMAGES); } + + for(auto&collectionPoint:collectionPoints){ + collectionPoint->Update(this,*IMAGES[MATRIX]); + geom2d::rectcpRect=geom2d::rect({collectionPoint->pos-collectionPoint->img.Sprite()->Size()/2,collectionPoint->img.Sprite()->Size()}); + geom2d::rectviewRegion=geom2d::rect({game.GetWorldTL(),game.GetWorldVisibleArea()}); + if(geom2d::overlaps(cpRect,viewRegion)){ + Pixel col; + switch(collectionPoint->type){ + case HEALTH:{ + col=CONSTANT::HEALTH_COLOR; + }break; + case RANGE:{ + col=CONSTANT::RANGE_COLOR; + }break; + case ATKSPD:{ + col=CONSTANT::ATKSPD_COLOR; + }break; + case MOVESPD:{ + col=CONSTANT::MOVESPD_COLOR; + }break; + case PROCEDURE:{ + col=CONSTANT::PROCEDURE_COLOR; + }break; + } + game.DrawRotatedDecal(collectionPoint->pos,collectionPoint->img.Decal(),collectionPoint->rot,collectionPoint->img.Sprite()->Size()/2,{1,1},col); + } + } + for(auto&u:units){ u->DrawHud(game,IMAGES); } @@ -240,9 +329,35 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){ DrawMinimap(); + DrawDecal({0,0},IMAGES[MATRIX]->Decal(),{1,1},{128,0,128}); + return true; } +VirusAttack::CollectionPoint::CollectionPoint(PixelGameEngine*pge,vf2d pos,float rot,Renderable&collectionPointImg,MemoryType type) + :pos(pos),rot(rot),type(type),originalCollectionPointImg(collectionPointImg.Sprite()),randomOffset({util::random(128),util::random(128)}){ + img.Create(collectionPointImg.Sprite()->width,collectionPointImg.Sprite()->height); + pge->SetDrawTarget(img.Sprite()); + pge->Clear(BLANK); + pge->DrawSprite({0,0},collectionPointImg.Sprite()); + pge->SetDrawTarget(nullptr); + img.Decal()->Update(); +} + +void VirusAttack::CollectionPoint::Update(PixelGameEngine*pge,Renderable&matrixImg){ + pge->SetDrawTarget(img.Sprite()); + for(int y=0;yheight;y++){ + for(int x=0;xwidth;x++){ + Pixel col=originalCollectionPointImg->GetPixel(x,y); + if(col==WHITE){ + pge->Draw(x,y,matrixImg.Sprite()->GetPixel(int(x+randomOffset.x),int(y+randomOffset.y))); + } + } + } + img.Decal()->Update(); + pge->SetDrawTarget(nullptr); +} + int main() { VirusAttack app; diff --git a/olcCodeJam2023Entry/VirusAttack.h b/olcCodeJam2023Entry/VirusAttack.h index eaba096..22fe37f 100644 --- a/olcCodeJam2023Entry/VirusAttack.h +++ b/olcCodeJam2023Entry/VirusAttack.h @@ -5,15 +5,38 @@ #include "Constant.h" #include "Image.h" +struct Letter{ + vf2d pos; + float spd; + char c; +}; + class VirusAttack : public olc::PixelGameEngine { + class CollectionPoint{ + public: + vf2d pos; + Renderable img; + Sprite*originalCollectionPointImg; + MemoryType type; + vf2d randomOffset; + float rot; + CollectionPoint(PixelGameEngine*pge,vf2d pos,float rot,Renderable&collectionPointImg,MemoryType type); + void Update(PixelGameEngine*pge,Renderable&matrixImg); + }; private: std::vector>units; + std::vector>collectionPoints; std::map>IMAGES; TileTransformedView game; + float matrixTimer=0; + float updatePixelsTimer=0; + const std::arraymatrixLetters={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',}; + std::vectoractiveLetters; + vf2d startingDragPos=CONSTANT::UNSELECTED; void HandleDraggingSelection(); void DrawSelectionRectangle(); @@ -25,6 +48,7 @@ private: void DrawMinimap(); void HandleMinimapClick(); void InitializeImages(); + void UpdateMatrixTexture(float fElapsedTime); public: VirusAttack(); diff --git a/olcCodeJam2023Entry/assets/bit_restorer.png b/olcCodeJam2023Entry/assets/bit_restorer.png new file mode 100644 index 0000000000000000000000000000000000000000..13bc0b0b05bac941b97da3662d099de43b4855bb GIT binary patch literal 9548 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 literal 0 HcmV?d00001 diff --git a/olcCodeJam2023Entry/assets/corrupter.png b/olcCodeJam2023Entry/assets/corrupter.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0a65886742e1e1137da7096e62ad9bbf71d867 GIT binary patch literal 11063 zcmeHscT`i`)^F%YN9odw1qn5@(0dUC=^X<}AhZC9fD~y8NR=itDj5qEW-~I1ojAZXU*POpK=Wour#$H)3v>&LD5-|_~002@oRYe`l zmG0_Gh>!W5c9%K=0B8?9^^DLu5O-E*S0o(a0AoczafY$NJP>dIz+-eG**J!?FgbV1 zScy+A2_hcOUKwcd)R$nm$GW3hbk{(tLeB%97@U;Mebzz`cz?0!>$vNC6szuhtJO?L zb9qLqAhY%}-_IJ~ljAYznKPfu?fsG-oIXEPo^0SCI-HtgdRWAD391yIyd8X4 zymRim^&>aYf$WTFJQh`SW-)$4a65%ziMb^0X4}pFzMGbp7q!Czx2o#*$$h;xH|{iC z9Ddw3IT|~LR`>4=d2hXFY|y&BMP3Lc46pb|Zr67^QRef4gtG6^u6y48*2@O;Ho5U> z{e_Nb`qUcBq;L0hY-P+O`B@*rXK-nm0RoRl|s1G$BrNuk9JD)!3etgfmFDFTf_=Qo9yN;!+knM3I}qL6Z_+H?d18Bmqbo9|47dDc#^?T2 z@{(Aro7t~P2JskP&i6A(zTSj-@jf1ysFKrX36BEV-xB>Q8bd9g^VIduuy&Yq5S?|X z_$wpp`_hHGI$dg8d+gx!*I-R+3CMJ)+;!M38%�aF`dhdkP!Vi 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 z zvltb8!mOvHxSFw&e3((RyqL3cdVIQ^)OA7Ek22WzU5vPRJ9lv@Wze(K^Gx8&CC*-I z(!I3s;YI)e>ls2pL0e5h;m;EQ%>Vu=KG9ODEwYSlmbz{1)YKBHE*;vbJRzZC>eOM6 zGApP}9`o1i5hsH<@A5_l*f%#vwG{=1y)Pjv31B_Knq8UASz_n9;JaH9vOQhRvbiC( zF^MIg{Yme=J+`)Rw`!ZUl}Hu$K|Q-4KR!R9>X+dg%WWi*?cb!ly&J-Ics5bKkzKoX?L^JjOGKugkcayB$ZM1|a@6LE##9X<~{zG!jM| zj|>F$W)ZU?S$1)JP;&z@q>I5l;gQ;+&cXC|nmFHh)gVj)Kf^A|6G=S5<-N ztn`VsfsE6(4>HRBY33QmRqLD9V@_#+ z3!7BM@439&*xMoY1?W5!wk z^v}^*Q}Zu)C)6J-VEEwkfH?CB@bdFHI`aM90)b5L&JXOjSZ0{_fQk6chs` zDhP!`gsiQBLLf|WfUL!>fmVW65TKx#psFNl!Q%F38LOFNwAT1P#X+V0r-I1Vy@|{xzhBaD?fiAy<3~h=>dEi--w{ zi-JI60%E@d|AlA(b46il@d{OdpZ5<+t`Y;rgoB|La#g7qfM2kfXut}tFbEpys)s~6 zNU>i*uwGgIHLQtgC@2ICQG}pj7*KveAuzufSWrYyKmZI90Sk!$`Gvv!f73@o5%4Gf zKkcjbVU_%ybX5cjGyjucqTfBG3v>DX^!w2P@vE6wS%0+!7-Ic91Qf&#_B&k|tlvY{ zwh$*97-s$WqhSA(BmReC09iu>1g!)_fL0(OVIT;TN1zx~R0s&Q5*H8?0$IaAp#KXU zg@mKsA+9hv8w`&at}q4qi!0VUf28W}FV_C@#@!Znl?M!EKz=dcZ^{J3!9pN*zW;uB zg8V|lf*_C;5H4mV4g^_YoDdg=i2{XS{G!$%aZDG8S^vAc{~O_5RfOoD;YspcEr@?6 zQG)H=lg4=|AQ|Kwg1h}A7%F6oPw40pGp2Be*dBCAG-b{ z2L2=Ef2!*ry8a^u{v+jos_TD^E~0(zU(p+6Zd0D%2gO;JuywY}|C!+q0-bf0~1TUdReFo}^5=Zw=XG;_~< zs!g>LSJRry>qO)aHhW1nT3Dr!ka)?e=t9XuNJhpR;La~*`|K7a`wJFUd~D4Y$9g6^ z-s5V4cX0<3y-zlur0qUUS!@W{_+tB>56nd63plyMGeBBhRP>7FZs;JTmLzUT5qBRs zS=lmJ#9UkeIvqMLWh-aKazr?K)NRpvlsMl*yCKiz-pb5Kn} zTJmh$hLdQaVDdGSrrl#nUAb*`RZ{5keU ztup_$pr9Z^{J=cx>=LQiPR``K0RlZ*8joAu^(K}Ck5H%^esl5E9|5A$ETYosPd;!d zRT8S_UI(bCsL%z;-J$yARX=Os&Wv;7j~~W5g;cdAyYm~7*Am`vDFJbxHcmMh z`z?bJOIo?ILtiR+x;x4>z^QqSI&2`xaf7w+V8vp1jaj4-Pf#8rJUpCVMrLZ792dKX z&r~&PV2;6WXc_b^AtAw|Ve*5G0~4ri&@L5+RruN?p`hZiPF!ssnjTt9)B7=s?~Fh` zJ49R2{G)*X E1L1E?ZvX%Q literal 0 HcmV?d00001 diff --git a/olcCodeJam2023Entry/assets/left_shifter.png b/olcCodeJam2023Entry/assets/left_shifter.png new file mode 100644 index 0000000000000000000000000000000000000000..538867062a2399c4c8466c566a5bf8ad8e72c34d GIT binary patch literal 9205 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 Y6^3drL&Jm2kP!z+i_43Zh#2_%A2~5I=Kufz literal 0 HcmV?d00001 diff --git a/olcCodeJam2023Entry/assets/right_shifter.png b/olcCodeJam2023Entry/assets/right_shifter.png new file mode 100644 index 0000000000000000000000000000000000000000..b3bd542575953afd534419cc3b58b5df329d831d GIT binary patch literal 9224 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 literal 0 HcmV?d00001 diff --git a/olcCodeJam2023Entry/olcCodeJam2023Entry.vcxproj b/olcCodeJam2023Entry/olcCodeJam2023Entry.vcxproj index 76f7398..6fa7f16 100644 --- a/olcCodeJam2023Entry/olcCodeJam2023Entry.vcxproj +++ b/olcCodeJam2023Entry/olcCodeJam2023Entry.vcxproj @@ -145,12 +145,14 @@ + + diff --git a/olcCodeJam2023Entry/olcCodeJam2023Entry.vcxproj.filters b/olcCodeJam2023Entry/olcCodeJam2023Entry.vcxproj.filters index 261b99a..d1f74a4 100644 --- a/olcCodeJam2023Entry/olcCodeJam2023Entry.vcxproj.filters +++ b/olcCodeJam2023Entry/olcCodeJam2023Entry.vcxproj.filters @@ -63,6 +63,9 @@ Header Files + + Header Files + @@ -77,6 +80,9 @@ Source Files + + Source Files + diff --git a/olcCodeJam2023Entry/util.cpp b/olcCodeJam2023Entry/util.cpp new file mode 100644 index 0000000..f4f2b89 --- /dev/null +++ b/olcCodeJam2023Entry/util.cpp @@ -0,0 +1,8 @@ +#include "util.h" +#include "olcPixelGameEngine.h" + +namespace util{ + float random(float range){ + return float(rand())/RAND_MAX*range; + } +} \ No newline at end of file diff --git a/olcCodeJam2023Entry/util.h b/olcCodeJam2023Entry/util.h new file mode 100644 index 0000000..f5ae447 --- /dev/null +++ b/olcCodeJam2023Entry/util.h @@ -0,0 +1,5 @@ +#pragma once + +namespace util{ + float random(float range); +} \ No newline at end of file