Warrior auto attack swing now has a frontal sweep angle. Release Build 8457.
This commit is contained in:
parent
02933fdc38
commit
ee382488f9
@ -771,7 +771,6 @@ const MonsterHurtList AiL::HurtEnemies(vf2d pos,float radius,int damage,bool upp
|
||||
return hitList;
|
||||
}
|
||||
|
||||
|
||||
const MonsterHurtList AiL::HurtEnemiesNotHit(vf2d pos,float radius,int damage,HitList&hitList,bool upperLevel,float z){
|
||||
MonsterHurtList affectedList;
|
||||
for(Monster&m:MONSTER_LIST){
|
||||
@ -784,6 +783,22 @@ const MonsterHurtList AiL::HurtEnemiesNotHit(vf2d pos,float radius,int damage,Hi
|
||||
return affectedList;
|
||||
}
|
||||
|
||||
const MonsterHurtList AiL::HurtEnemiesConeNotHit(vf2d pos,float radius,float angle,float sweepAngle,int damage,HitList&hitList,bool upperLevel,float z){
|
||||
MonsterHurtList affectedList;
|
||||
for(Monster&m:MONSTER_LIST){
|
||||
if(!hitList.count(&m)&&geom2d::overlaps(geom2d::circle(pos,radius),geom2d::circle(m.GetPos(),12*m.GetSizeMult()))){
|
||||
float angleToMonster=geom2d::line<float>{pos,m.GetPos()}.vector().polar().y;
|
||||
float angleDiff=util::angle_difference(angleToMonster,angle);
|
||||
if(abs(angleDiff)<=sweepAngle){
|
||||
HurtReturnValue returnVal=m.Hurt(damage,upperLevel,z);
|
||||
affectedList.push_back({&m,returnVal});
|
||||
hitList.insert(&m);
|
||||
}
|
||||
}
|
||||
}
|
||||
return affectedList;
|
||||
}
|
||||
|
||||
void AiL::PopulateRenderLists(){
|
||||
monstersBeforeLower.clear();
|
||||
monstersAfterLower.clear();
|
||||
|
@ -218,6 +218,10 @@ public:
|
||||
const MonsterHurtList HurtEnemies(vf2d pos,float radius,int damage,bool upperLevel,float z)const;
|
||||
//NOTE: This function will also add any enemies that were hit into the hit list!
|
||||
const MonsterHurtList HurtEnemiesNotHit(vf2d pos,float radius,int damage,HitList&hitList,bool upperLevel,float z);
|
||||
// angle: The central angle where the arc will extend from.
|
||||
// sweepAngle: The amount of radians to extend in both directions from the central angle.
|
||||
// NOTE: This function will also add any enemies that were hit into the hit list!
|
||||
const MonsterHurtList HurtEnemiesConeNotHit(vf2d pos,float radius,float angle,float sweepAngle,int damage,HitList&hitList,bool upperLevel,float z);
|
||||
vf2d GetWorldMousePos();
|
||||
bool LeftHeld();
|
||||
bool RightHeld();
|
||||
|
@ -37,6 +37,7 @@ All rights reserved.
|
||||
#pragma endregion
|
||||
#include "Effect.h"
|
||||
#include "AdventuresInLestoria.h"
|
||||
#include "util.h"
|
||||
|
||||
INCLUDE_game
|
||||
|
||||
@ -45,7 +46,7 @@ SwordSlash::SwordSlash(float lifetime, std::string imgFile, vf2d size, float fad
|
||||
|
||||
bool SwordSlash::Update(float fElapsedTime){
|
||||
if(lifetime>0){
|
||||
game->HurtEnemiesNotHit(game->GetPlayer()->GetPos(),game->GetPlayer()->GetAttackRangeMult()*12.f,game->GetPlayer()->GetAttack(),hitList,game->GetPlayer()->OnUpperLevel(),game->GetPlayer()->GetZ());
|
||||
game->HurtEnemiesConeNotHit(game->GetPlayer()->GetPos(),game->GetPlayer()->GetAttackRangeMult()*12.f,rotation,util::degToRad("Warrior.Auto Attack.SwordSlashSweepAngle"_F),game->GetPlayer()->GetAttack(),hitList,game->GetPlayer()->OnUpperLevel(),game->GetPlayer()->GetZ());
|
||||
}
|
||||
pos=game->GetPlayer()->GetPos();
|
||||
|
||||
|
@ -39,7 +39,7 @@ All rights reserved.
|
||||
#define VERSION_MAJOR 1
|
||||
#define VERSION_MINOR 0
|
||||
#define VERSION_PATCH 0
|
||||
#define VERSION_BUILD 8451
|
||||
#define VERSION_BUILD 8457
|
||||
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
|
@ -22,6 +22,8 @@ Warrior
|
||||
|
||||
SwordAnimationSwingTime = 0.2s
|
||||
SwordSlashLingerTime = 0.125s
|
||||
#Sweep angle of the sword slash (in both directions)
|
||||
SwordSlashSweepAngle = 45°
|
||||
}
|
||||
Right Click Ability
|
||||
{
|
||||
|
@ -939,6 +939,7 @@ namespace olc
|
||||
virtual olc::rcode DestroyDevice() = 0;
|
||||
virtual void DisplayFrame() = 0;
|
||||
virtual void PrepareDrawing() = 0;
|
||||
virtual void SetVSync(const bool vSyncEnabled) = 0;
|
||||
virtual void PrepareRender(int width,int height) = 0;
|
||||
virtual void SetDecalMode(const olc::DecalMode& mode) = 0;
|
||||
virtual void DrawLayerQuad(const olc::vf2d& offset, const olc::vf2d& scale, const olc::Pixel tint) = 0;
|
||||
@ -5074,6 +5075,7 @@ namespace olc
|
||||
virtual olc::rcode DestroyDevice() { return olc::rcode::OK; }
|
||||
virtual void DisplayFrame() {}
|
||||
virtual void PrepareDrawing() {}
|
||||
virtual void SetVSync(const bool vSyncEnabled) {}
|
||||
virtual void PrepareRender(int width,int height) {};
|
||||
virtual void SetDecalMode(const olc::DecalMode& mode) {}
|
||||
virtual void DrawLayerQuad(const olc::vf2d& offset, const olc::vf2d& scale, const olc::Pixel tint) {}
|
||||
@ -5370,6 +5372,26 @@ namespace olc
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
|
||||
void SetVSync(const bool vSyncEnabled){
|
||||
#if defined(OLC_PLATFORM_WINAPI)
|
||||
if (locSwapInterval) locSwapInterval(vSyncEnabled?1:0);
|
||||
bSync = vSyncEnabled;
|
||||
#endif
|
||||
#if defined(OLC_PLATFORM_X11)
|
||||
locSwapInterval(olc_Display, *olc_Window, vSyncEnabled?1:0);
|
||||
#endif
|
||||
#if defined(OLC_PLATFORM_EMSCRIPTEN)
|
||||
locSwapInterval(olc_Display, vSyncEnabled?1:0);
|
||||
#endif
|
||||
#if defined(OLC_PLATFORM_GLUT)
|
||||
#if defined(__APPLE__)
|
||||
GLint sync = vSyncEnabled?1:0;
|
||||
CGLContextObj ctx = CGLGetCurrentContext();
|
||||
if (ctx) CGLSetParameter(ctx, kCGLCPSwapInterval, &sync);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void SetDecalMode(const olc::DecalMode& mode)
|
||||
{
|
||||
if (mode != nDecalMode)
|
||||
@ -5967,6 +5989,26 @@ namespace olc
|
||||
#endif
|
||||
}
|
||||
|
||||
void SetVSync(const bool vSyncEnabled){
|
||||
#if defined(OLC_PLATFORM_WINAPI)
|
||||
if (locSwapInterval) locSwapInterval(vSyncEnabled?1:0);
|
||||
bSync = vSyncEnabled;
|
||||
#endif
|
||||
#if defined(OLC_PLATFORM_X11)
|
||||
locSwapInterval(olc_Display, *olc_Window, vSyncEnabled?1:0);
|
||||
#endif
|
||||
#if defined(OLC_PLATFORM_EMSCRIPTEN)
|
||||
locSwapInterval(olc_Display, vSyncEnabled?1:0);
|
||||
#endif
|
||||
#if defined(OLC_PLATFORM_GLUT)
|
||||
#if defined(__APPLE__)
|
||||
GLint sync = vSyncEnabled?1:0;
|
||||
CGLContextObj ctx = CGLGetCurrentContext();
|
||||
if (ctx) CGLSetParameter(ctx, kCGLCPSwapInterval, &sync);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void PrepareRender(int width,int height)override{
|
||||
GLint sizeUniformLoc = locGetUniformLocation(m_nQuadShader, "size");
|
||||
locUniform2f(sizeUniformLoc,width,height);
|
||||
|
@ -150,4 +150,18 @@ std::u32string util::WrapText(PixelGameEngine*pge,std::u32string str,int width,F
|
||||
|
||||
long double operator""_Pixels(long double unitDist){
|
||||
return unitDist/100*24.;
|
||||
}
|
||||
|
||||
float util::angle_difference(float angle_1, float angle_2)
|
||||
{
|
||||
angle_1 = fmod(angle_1, 2 * PI);
|
||||
angle_2 = fmod(angle_2, 2 * PI);
|
||||
float angle_diff = angle_1 - angle_2;
|
||||
|
||||
if (angle_diff > PI)
|
||||
angle_diff -= 2 * PI;
|
||||
else if (angle_diff < -PI)
|
||||
angle_diff += 2 * PI;
|
||||
|
||||
return -angle_diff;
|
||||
}
|
@ -57,6 +57,7 @@ namespace olc::util{
|
||||
std::string timerStr(float time);
|
||||
std::string WrapText(PixelGameEngine*pge,std::string str,int width,bool proportional,vd2d scale);
|
||||
std::u32string WrapText(PixelGameEngine*pge,std::u32string str,int width,Font&font,vd2d scale);
|
||||
float angle_difference(float angle_1, float angle_2);
|
||||
}
|
||||
|
||||
template<class TL, class TR>
|
||||
@ -74,4 +75,4 @@ constexpr auto circ_add(
|
||||
}
|
||||
|
||||
//Converts unit distances to pixels. (Every 100 units = 24 pixels)
|
||||
long double operator""_Pixels(long double unitDist);
|
||||
long double operator""_Pixels(long double unitDist);
|
||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user