Cast bar display implementation
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
		
							parent
							
								
									8d117c42e3
								
							
						
					
					
						commit
						7ec58742de
					
				
							
								
								
									
										
											BIN
										
									
								
								Crawler/Crawler
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Crawler/Crawler
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -699,6 +699,20 @@ void Crawler::RenderHud(){ | ||||
| 		} | ||||
| 		offset-=6; | ||||
| 	} | ||||
| 
 | ||||
| 	if(GetPlayer()->GetCastInfo().castTimer>0){ | ||||
| 		FillRectDecal(vf2d{ScreenWidth()/2-92.f,ScreenHeight()-90.f},{184,20},BLACK); | ||||
| 		FillRectDecal(vf2d{ScreenWidth()/2-90.f,ScreenHeight()-88.f},{180,16},DARK_GREY); | ||||
| 		float timer=GetPlayer()->GetCastInfo().castTimer; | ||||
| 		float totalTime=GetPlayer()->GetCastInfo().castTotalTime; | ||||
| 		std::string castText=GetPlayer()->GetCastInfo().name; | ||||
| 		GradientFillRectDecal(vf2d{ScreenWidth()/2-90.f,ScreenHeight()-88.f},{(timer/totalTime)*180,16},{247,125,37},{247,125,37},{247,184,37},{247,184,37}); | ||||
| 		std::stringstream castTimeDisplay;  | ||||
| 		castTimeDisplay<<std::fixed<<std::setprecision(1)<<timer; | ||||
| 		DrawShadowStringPropDecal(vf2d{ScreenWidth()/2+90.f,ScreenHeight()-88.f}-vf2d{float(GetTextSizeProp(castTimeDisplay.str()).x),0},castTimeDisplay.str(),WHITE,BLACK); | ||||
| 		DrawShadowStringPropDecal(vf2d{ScreenWidth()/2.f-GetTextSizeProp(castText).x*2/2,ScreenHeight()-64.f},castText,WHITE,BLACK,{2,3},2.f); | ||||
| 	} | ||||
| 
 | ||||
| 	DrawDecal({2,2},GFX_Heart.Decal()); | ||||
| 	DrawDecal({2,20},GFX_Mana.Decal()); | ||||
| 	std::string text=player->GetHealth()>0?std::to_string(player->GetHealth()):"X"; | ||||
|  | ||||
| @ -163,6 +163,7 @@ void Player::Update(float fElapsedTime){ | ||||
| 	notEnoughManaDisplay.second=std::max(0.f,notEnoughManaDisplay.second-fElapsedTime); | ||||
| 	notificationDisplay.second=std::max(0.f,notificationDisplay.second-fElapsedTime); | ||||
| 	manaTickTimer-=fElapsedTime; | ||||
| 	castInfo.castTimer=std::max(0.f,castInfo.castTimer-fElapsedTime); | ||||
| 	while(manaTickTimer<=0){ | ||||
| 		manaTickTimer+=0.2; | ||||
| 		mana=std::min(maxmana,mana+1); | ||||
| @ -481,6 +482,14 @@ std::vector<Buff>Player::GetBuffs(BuffType buff){ | ||||
| 	return filteredBuffs; | ||||
| } | ||||
| 
 | ||||
| void Player::CastSpell(std::string name,float castTotalTime){ | ||||
| 	castInfo={name,castTotalTime,castTotalTime}; | ||||
| } | ||||
| 
 | ||||
| CastInfo&Player::GetCastInfo(){ | ||||
| 	return castInfo; | ||||
| } | ||||
| 
 | ||||
| bool Player::CanPathfindTo(vf2d pos,vf2d targetPos,float range){ | ||||
| 	std::vector<vf2d>pathing=game->pathfinder.Solve_AStar(pos,targetPos,8,upperLevel); | ||||
| 	return pathing.size()>0&&pathing.size()<8;//We'll say 7 tiles or less is close enough to 650 range. Have a little bit of wiggle room.
 | ||||
|  | ||||
| @ -8,6 +8,13 @@ | ||||
| #include "Buff.h" | ||||
| #include "Pathfinding.h" | ||||
| 
 | ||||
| 
 | ||||
| struct CastInfo{ | ||||
| 	std::string name; | ||||
| 	float castTimer; | ||||
| 	float castTotalTime; | ||||
| }; | ||||
| 
 | ||||
| struct Player{ | ||||
| 	friend class Crawler; | ||||
| 	friend class sig::Animation; | ||||
| @ -34,6 +41,7 @@ struct Player{ | ||||
| 	void Update(float fElapsedTime); | ||||
| 	void AddAnimation(AnimationState state); | ||||
| 	std::vector<Buff>buffList; | ||||
| 	CastInfo castInfo={"",0}; | ||||
| protected: | ||||
| 	const float ATTACK_COOLDOWN=0.35f; | ||||
| 	const float MAGIC_ATTACK_COOLDOWN=0.85f; | ||||
| @ -60,6 +68,7 @@ protected: | ||||
| 	float attack_range=1.5f; | ||||
| 	Key facingDirection; | ||||
| 	float swordSwingTimer=0; | ||||
| 	void CastSpell(std::string name,float castTotalTime); | ||||
| public: | ||||
| 	Player(); | ||||
| 	//So this is rather fascinating and only exists because we have the ability to change classes which means we need to initialize a class
 | ||||
| @ -121,6 +130,8 @@ public: | ||||
| 	virtual AnimationState&GetIdleEAnimation()=0; | ||||
| 	virtual AnimationState&GetIdleSAnimation()=0; | ||||
| 	virtual AnimationState&GetIdleWAnimation()=0; | ||||
| 
 | ||||
| 	CastInfo&GetCastInfo(); | ||||
| }; | ||||
| 
 | ||||
| struct Warrior:Player{ | ||||
|  | ||||
| @ -73,7 +73,7 @@ bool Wizard::AutoAttack(){ | ||||
| 	return true; | ||||
| } | ||||
| void Wizard::InitializeClassAbilities(){ | ||||
|     #pragma region Wizard Right-click Ability (???) | ||||
|     #pragma region Wizard Right-click Ability (Teleport) | ||||
|         Wizard::rightClickAbility.action= | ||||
|             [&](){ | ||||
|                 float pointMouseDirection=atan2(game->GetWorldMousePos().y-GetPos().y,game->GetWorldMousePos().x-GetPos().x); | ||||
| @ -101,7 +101,7 @@ void Wizard::InitializeClassAbilities(){ | ||||
|                 } | ||||
|             }; | ||||
|     #pragma endregion | ||||
|     #pragma region Wizard Ability 1 (???) | ||||
|     #pragma region Wizard Ability 1 (Fire Bolt) | ||||
|         Wizard::ability1.action= | ||||
|             [&](){ | ||||
|                 float angleToCursor=atan2(game->GetWorldMousePos().y-GetPos().y,game->GetWorldMousePos().x-GetPos().x); | ||||
| @ -109,7 +109,7 @@ void Wizard::InitializeClassAbilities(){ | ||||
|                 return true; | ||||
|             }; | ||||
|     #pragma endregion | ||||
|     #pragma region Wizard Ability 2 (???) | ||||
|     #pragma region Wizard Ability 2 (Lightning Bolt) | ||||
|         Wizard::ability2.action= | ||||
|             [&](){ | ||||
|                 float angleToCursor=atan2(game->GetWorldMousePos().y-GetPos().y,game->GetWorldMousePos().x-GetPos().x); | ||||
| @ -117,10 +117,11 @@ void Wizard::InitializeClassAbilities(){ | ||||
|                 return true; | ||||
|             }; | ||||
|     #pragma endregion | ||||
|     #pragma region Wizard Ability 3 (???) | ||||
|     #pragma region Wizard Ability 3 (Meteor) | ||||
|         Wizard::ability3.action= | ||||
|             [&](){ | ||||
|                 SetState(State::CASTING); | ||||
|                 CastSpell("Meteor",1.5); | ||||
|                 game->AddEffect(std::make_unique<Meteor>(GetPos(),3,AnimationState::METEOR,OnUpperLevel(),vf2d{1,1},2)); | ||||
|                 return true; | ||||
|             }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user