diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..36a8d2be --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,85 @@ +{ + "files.associations": { + "ostream": "cpp", + "iostream": "cpp", + "array": "cpp", + "atomic": "cpp", + "strstream": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "charconv": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "list": "cpp", + "map": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "numbers": "cpp", + "semaphore": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp", + "variant": "cpp", + "__bit_reference": "cpp", + "__config": "cpp", + "__debug": "cpp", + "__errc": "cpp", + "__hash_table": "cpp", + "__locale": "cpp", + "__mutex_base": "cpp", + "__node_handle": "cpp", + "__split_buffer": "cpp", + "__threading_support": "cpp", + "__verbose_abort": "cpp", + "ios": "cpp", + "locale": "cpp", + "queue": "cpp", + "stack": "cpp", + "span": "cpp" + } +} \ No newline at end of file diff --git a/Crawler/Bullet.h b/Crawler/Bullet.h index 6964307e..3cd94e5e 100644 --- a/Crawler/Bullet.h +++ b/Crawler/Bullet.h @@ -3,6 +3,7 @@ #include "Animation.h" #include "olcUTIL_Animate2D.h" #include "Monster.h" +#include "DEFINES.h" struct Bullet{ friend class Crawler; diff --git a/Crawler/Class.cpp b/Crawler/Class.cpp index a705eebb..3d2744a9 100644 --- a/Crawler/Class.cpp +++ b/Crawler/Class.cpp @@ -290,7 +290,7 @@ bool Wizard::AutoAttack(){ bool Wizard::Ability1(){ ACCESS_PLAYER float angleToCursor=atan2(game->GetWorldMousePos().y-p.pos.y,game->GetWorldMousePos().x-p.pos.x); - PLAYER_BULLET_LIST.push_back(std::make_unique(FireBolt(p.pos,{cos(angleToCursor)*200,sin(angleToCursor)*200},12,p.GetAttack(),true,{240,120,60}))); + PLAYER_BULLET_LIST.push_back(std::make_unique(FireBolt(p.pos,{cos(angleToCursor)*275,sin(angleToCursor)*275},12,p.GetAttack(),true,{240,120,60}))); return true; } diff --git a/Crawler/Crawler b/Crawler/Crawler new file mode 100755 index 00000000..dcc8bd1d Binary files /dev/null and b/Crawler/Crawler differ diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index 6738516d..6108c1a2 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -10,6 +10,7 @@ #include "TSXParser.h" #include "Map.h" #include "DEFINES.h" +#include "utils.h" INCLUDE_CLASS_DATA @@ -576,8 +577,14 @@ void Crawler::UpdateCamera(float fElapsedTime){ lastWorldShakeAdjust=std::max(0.f,lastWorldShakeAdjust-fElapsedTime); if(worldShakeTime-fElapsedTime>0){ if(lastWorldShakeAdjust==0){ - lastWorldShakeAdjust=float(rand()%int(WORLD_SHAKE_ADJUST_MAX_TIME*1000))/1000+0.05; - worldShakeVel={float(rand()%1000)/1000*100-50,float(rand()%1000)/1000*100-50}; + lastWorldShakeAdjust=util::random(0.04)+0.01; + worldShakeVel={util::random(200)+100,util::random(200)+100}; + if(rand()%2==0){ + worldShakeVel.x*=-1; + } + if(rand()%2==0){ + worldShakeVel.y*=-1; + } } worldShake+=worldShakeVel*fElapsedTime; } else { @@ -827,6 +834,9 @@ void Crawler::RenderHud(){ FillRectDecal(vf2d{11,ScreenHeight()-21.f}-vf2d{0,float(offset)},{62,4},DARK_GREY); GradientFillRectDecal(vf2d{10,ScreenHeight()-22.f}-vf2d{0,float(offset)},{(a.cooldown/a.COOLDOWN_TIME)*64,6},a.barColor1,a.barColor1,a.barColor2,a.barColor2); DrawRotatedShadowStringPropDecal(vf2d{8,ScreenHeight()-20.f}+vf2d{1,1}-vf2d{0,float(offset)},capitalize(a.name),-PI/64,{0,0},WHITE,BLACK,{0.4,0.4},0.5); + std::stringstream cooldownTimeDisplay; + cooldownTimeDisplay<AddEffect(Effect(monster.GetPos(),util::random(0.5),AnimationState::DOT_PARTICLE,util::random(2),util::random(0.4),{util::random(300)-150,util::random(300)-150},{255,uint8_t(util::random(190)+60),60})); } + game->SetupWorldShake(0.25); for(Monster&m:MONSTER_LIST){ if(geom2d::line(monster.GetPos(),m.GetPos()).length()<=2.5*24){ m.Hurt(3*damage); diff --git a/Crawler/TMXParser.h b/Crawler/TMXParser.h index 109cdfbc..3ee1c53b 100644 --- a/Crawler/TMXParser.h +++ b/Crawler/TMXParser.h @@ -1,5 +1,6 @@ #pragma once #include "olcPixelGameEngine.h" +#include "olcUTIL_Geometry2D.h" #include using namespace olc; @@ -40,6 +41,7 @@ struct Map{ std::vector TilesetData; std::vector LayerData; std::vector SpawnerData; + std::map>> ZoneData; std::string FormatLayerData(std::ostream& os, std::vectortiles); std::string FormatSpawnerData(std::ostream& os, std::vectortiles); friend std::ostream& operator << (std::ostream& os, Map& rhs); @@ -57,7 +59,6 @@ class TMXParser{ public: TMXParser(std::string file); }; - #ifdef TMX_PARSER_SETUP #undef TMX_PARSER_SETUP const std::string XMLTag::FormatTagData(std::maptiles){ @@ -201,7 +202,7 @@ class TMXParser{ if (newTag.tag=="layer") { LayerTag l = {newTag}; parsedMapInfo.LayerData.push_back(l); - } else + }else if (newTag.tag=="object"&&newTag.data["type"]=="SpawnGroup") { if(buildingSpawner){ parsedMapInfo.SpawnerData.push_back(obj); @@ -213,6 +214,17 @@ class TMXParser{ if (newTag.tag=="object"&&newTag.data["type"]=="PlayerSpawnLocation") { parsedMapInfo.MapData.playerSpawnLocation={newTag.GetInteger("x")-newTag.GetInteger("width")/2,newTag.GetInteger("y")-newTag.GetInteger("height")/2}; } else + if (newTag.tag=="object"&&newTag.data.find("type")!=newTag.data.end()){ + //This is an object with a type that doesn't fit into other categories, we can add it to ZoneData. + if(parsedMapInfo.ZoneData.find(newTag.data["type"])!=parsedMapInfo.ZoneData.end()){ + std::vector>&zones=parsedMapInfo.ZoneData[newTag.data["type"]]; + zones.push_back({{newTag.GetInteger("x"),newTag.GetInteger("y")},{newTag.GetInteger("width"),newTag.GetInteger("height")}}); + } else { + std::vector>zones; + zones.push_back({{newTag.GetInteger("x"),newTag.GetInteger("y")},{newTag.GetInteger("width"),newTag.GetInteger("height")}}); + parsedMapInfo.ZoneData[newTag.data["type"]]=zones; + } + } if (newTag.tag=="property"&&buildingSpawner) { if(newTag.data["propertytype"]=="MonsterName"){ obj.properties.push_back(newTag); diff --git a/Crawler/pixelGameEngine.o b/Crawler/pixelGameEngine.o new file mode 100644 index 00000000..d273f0ca Binary files /dev/null and b/Crawler/pixelGameEngine.o differ