Effect particles realigned and particles that are behind the center move to the back.

pull/28/head
sigonasr2 2 years ago
parent eb5bb15918
commit 88df322042
  1. 21
      Crawler/Crawler.cpp
  2. 2
      Crawler/Crawler.h
  3. 6
      Crawler/Crawler.vcxproj
  4. 18
      Crawler/Crawler.vcxproj.filters
  5. 2
      Crawler/DEFINES.h
  6. 10
      Crawler/Meteor.cpp
  7. 4
      Crawler/Player.cpp
  8. 2
      Crawler/Player.h
  9. 2
      Crawler/Version.h

@ -341,7 +341,7 @@ void Crawler::UpdateEffects(float fElapsedTime){
Effect*e=(*it).get(); Effect*e=(*it).get();
if(!e->Update(fElapsedTime)){ if(!e->Update(fElapsedTime)){
it=backgroundEffects.erase(it); it=backgroundEffects.erase(it);
if(it==backgroundEffects.end()){ if(it==backgroundEffects.end()){//In case we added effects to the vector and the vector has shifted in memory, we prematurely end.
break; break;
} }
} }
@ -350,11 +350,20 @@ void Crawler::UpdateEffects(float fElapsedTime){
Effect*e=(*it).get(); Effect*e=(*it).get();
if(!e->Update(fElapsedTime)){ if(!e->Update(fElapsedTime)){
it=foregroundEffects.erase(it); it=foregroundEffects.erase(it);
if(it==foregroundEffects.end()){ if(it==foregroundEffects.end()){//In case we added effects to the vector and the vector has shifted in memory, we prematurely end.
break; break;
} }
} }
} }
for(auto it=foregroundEffectsToBeInserted.begin();it!=foregroundEffectsToBeInserted.end();++it){
foregroundEffects.push_back(std::move(*it));
}
for(auto it=backgroundEffectsToBeInserted.begin();it!=backgroundEffectsToBeInserted.end();++it){
backgroundEffects.push_back(std::move(*it));
}
foregroundEffectsToBeInserted.clear();
backgroundEffectsToBeInserted.clear();
} }
void Crawler::UpdateBullets(float fElapsedTime){ void Crawler::UpdateBullets(float fElapsedTime){
for(auto it=BULLET_LIST.begin();it!=BULLET_LIST.end();++it){ for(auto it=BULLET_LIST.begin();it!=BULLET_LIST.end();++it){
@ -742,15 +751,15 @@ void Crawler::RenderHud(){
} }
void Crawler::AddEffect(std::unique_ptr<Effect>foreground,std::unique_ptr<Effect> background){ void Crawler::AddEffect(std::unique_ptr<Effect>foreground,std::unique_ptr<Effect> background){
foregroundEffects.push_back(std::move(foreground)); AddEffect(std::move(background),true);
backgroundEffects.push_back(std::move(background)); AddEffect(std::move(foreground));
} }
void Crawler::AddEffect(std::unique_ptr<Effect> foreground,bool back){ void Crawler::AddEffect(std::unique_ptr<Effect> foreground,bool back){
if(back){ if(back){
backgroundEffects.push_back(std::move(foreground)); backgroundEffectsToBeInserted.push_back(std::move(foreground));
} else { } else {
foregroundEffects.push_back(std::move(foreground)); foregroundEffectsToBeInserted.push_back(std::move(foreground));
} }
} }

@ -36,7 +36,7 @@ public:
static Key KEY_ABILITY3; static Key KEY_ABILITY3;
static Key KEY_ABILITY4; static Key KEY_ABILITY4;
private: private:
std::vector<std::unique_ptr<Effect>>foregroundEffects,backgroundEffects; std::vector<std::unique_ptr<Effect>>foregroundEffects,backgroundEffects,foregroundEffectsToBeInserted,backgroundEffectsToBeInserted;
std::map<MapName,Map>MAP_DATA; std::map<MapName,Map>MAP_DATA;
std::map<std::string,TilesetData>MAP_TILESETS; std::map<std::string,TilesetData>MAP_TILESETS;
vf2d worldShake={}; vf2d worldShake={};

@ -204,7 +204,6 @@
<ClCompile Include="Ability.cpp" /> <ClCompile Include="Ability.cpp" />
<ClCompile Include="Animation.cpp" /> <ClCompile Include="Animation.cpp" />
<ClCompile Include="Bullet.cpp" /> <ClCompile Include="Bullet.cpp" />
<ClCompile Include="Class.cpp" />
<ClCompile Include="Crawler.cpp" /> <ClCompile Include="Crawler.cpp" />
<ClCompile Include="DamageNumber.cpp" /> <ClCompile Include="DamageNumber.cpp" />
<ClCompile Include="Effect.cpp" /> <ClCompile Include="Effect.cpp" />
@ -220,8 +219,13 @@
<ClCompile Include="Player.cpp" /> <ClCompile Include="Player.cpp" />
<ClCompile Include="Monster.cpp" /> <ClCompile Include="Monster.cpp" />
<ClCompile Include="MonsterData.cpp" /> <ClCompile Include="MonsterData.cpp" />
<ClCompile Include="Ranger.cpp" />
<ClCompile Include="Thief.cpp" />
<ClCompile Include="Trapper.cpp" />
<ClCompile Include="Warrior.cpp" /> <ClCompile Include="Warrior.cpp" />
<ClCompile Include="utils.cpp" /> <ClCompile Include="utils.cpp" />
<ClCompile Include="Witch.cpp" />
<ClCompile Include="Wizard.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="cpp.hint" /> <None Include="cpp.hint" />

@ -140,9 +140,6 @@
<ClCompile Include="Ability.cpp"> <ClCompile Include="Ability.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Class.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Map.cpp"> <ClCompile Include="Map.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
@ -176,6 +173,21 @@
<ClCompile Include="Meteor.cpp"> <ClCompile Include="Meteor.cpp">
<Filter>Source Files\Effects</Filter> <Filter>Source Files\Effects</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Wizard.cpp">
<Filter>Source Files\Player Classes</Filter>
</ClCompile>
<ClCompile Include="Witch.cpp">
<Filter>Source Files\Player Classes</Filter>
</ClCompile>
<ClCompile Include="Trapper.cpp">
<Filter>Source Files\Player Classes</Filter>
</ClCompile>
<ClCompile Include="Thief.cpp">
<Filter>Source Files\Player Classes</Filter>
</ClCompile>
<ClCompile Include="Ranger.cpp">
<Filter>Source Files\Player Classes</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="cpp.hint" /> <None Include="cpp.hint" />

@ -16,7 +16,7 @@
#define SETUP_CLASS(class) \ #define SETUP_CLASS(class) \
class::class(){InitializeClassAbilities();} \ class::class(){InitializeClassAbilities();} \
class::class(Player*player) \ class::class(Player*player) \
:Player::Player(player){} \ :Player::Player(player){InitializeClassAbilities();} \
Class class::GetClass(){return cl;} \ Class class::GetClass(){return cl;} \
std::string class::GetClassName(){return name;} \ std::string class::GetClassName(){return name;} \
Ability&class::GetRightClickAbility(){return rightClickAbility;}; \ Ability&class::GetRightClickAbility(){return rightClickAbility;}; \

@ -14,11 +14,13 @@ bool Meteor::Update(float fElapsedTime){
if(lifetime<=0&&!shakeField){ if(lifetime<=0&&!shakeField){
shakeField=true; shakeField=true;
game->SetupWorldShake(2); game->SetupWorldShake(2);
for(int i=0;i<360;i++){ for(int i=0;i<650;i++){
float randomAngle=2*PI; float randomAngle=util::random(2*PI);
float randomRange=192*size.x*(1-util::random(0.25))*(1-util::random(0.25)); float randomRange=100*size.x*(1-util::random(0.25))*(1-util::random(0.25));
float randomColorTintG=256-(util::random(128)+util::random(128));
float randomColorTint=util::random(128); float randomColorTint=util::random(128);
game->AddEffect(std::make_unique<Effect>(pos+vf2d{cos(randomAngle),sin(randomAngle)}*randomRange,0,AnimationState::DOT_PARTICLE,OnUpperLevel(),vf2d{util::random(2),util::random(3)},util::random(3)+1,vf2d{util::random(4)-2,-util::random(4)},Pixel{255,uint8_t(randomColorTint),uint8_t(randomColorTint),uint8_t(util::random(128)+128)},0,0,true)); vf2d effectPos=pos+vf2d{cos(randomAngle),sin(randomAngle)}*randomRange-vf2d{0,GetFrame().GetSourceRect().size.y/2.f};
game->AddEffect(std::make_unique<Effect>(effectPos,0,AnimationState::DOT_PARTICLE,OnUpperLevel(),vf2d{util::random(2)+1,util::random(3)+1},util::random(3)+1,vf2d{util::random(10)-5,-util::random(20)-5},Pixel{255,uint8_t(randomColorTintG),uint8_t(randomColorTint),uint8_t(util::random(128)+128)},0,0,true),effectPos.y<(pos-vf2d{0,GetFrame().GetSourceRect().size.y/2.f}).y);
} }
} }
return Effect::Update(fElapsedTime); return Effect::Update(fElapsedTime);

@ -20,8 +20,8 @@ Player::Player()
:state(State::NORMAL),lastReleasedMovementKey(DOWN),facingDirection(DOWN){} :state(State::NORMAL),lastReleasedMovementKey(DOWN),facingDirection(DOWN){}
Player::Player(Player*player) Player::Player(Player*player)
:pos(player->GetPos()),vel(player->GetVelocity()),iframe_time(player->iframe_time),lastReleasedMovementKey(player->GetLastReleasedMovementKey()), :pos(player->GetPos()),vel(player->GetVelocity()),iframe_time(player->iframe_time),lastReleasedMovementKey(DOWN),
facingDirection(GetFacingDirection()){} facingDirection(DOWN),state(State::NORMAL){}
bool Player::SetX(float x){ bool Player::SetX(float x){
vf2d newPos={x,pos.y}; vf2d newPos={x,pos.y};

@ -67,7 +67,7 @@ protected:
bool upperLevel=false; bool upperLevel=false;
vf2d vel={0,0}; vf2d vel={0,0};
float attack_range=1.5f; float attack_range=1.5f;
Key facingDirection; Key facingDirection=DOWN;
float swordSwingTimer=0; float swordSwingTimer=0;
void CastSpell(Ability&ability); void CastSpell(Ability&ability);
Ability*castPrepAbility; Ability*castPrepAbility;

@ -2,7 +2,7 @@
#define VERSION_MAJOR 0 #define VERSION_MAJOR 0
#define VERSION_MINOR 2 #define VERSION_MINOR 2
#define VERSION_PATCH 0 #define VERSION_PATCH 0
#define VERSION_BUILD 662 #define VERSION_BUILD 686
#define stringify(a) stringify_(a) #define stringify(a) stringify_(a)
#define stringify_(a) #a #define stringify_(a) #a

Loading…
Cancel
Save