Add in extra debug access option when reading configuration properties. Implement Wizard Auto attack and teleport configuration options.

pull/28/head
sigonasr2 2 years ago
parent a86362c801
commit cacf169668
  1. 32
      Crawler/Crawler.cpp
  2. 1
      Crawler/Crawler.vcxproj
  3. 3
      Crawler/Crawler.vcxproj.filters
  4. 4
      Crawler/Player.cpp
  5. 2
      Crawler/Player.h
  6. 2
      Crawler/Version.h
  7. 35
      Crawler/Wizard.cpp
  8. 1
      Crawler/assets/config/classes/Warrior.txt
  9. 30
      Crawler/assets/config/classes/Wizard.txt
  10. 3
      Crawler/assets/config/configuration.txt
  11. 3
      Crawler/config.h
  12. 6
      Crawler/olcUTIL_DataFile.h

@ -56,6 +56,7 @@ Crawler::Crawler()
std::cout<<cl<<std::endl;
utils::datafile::Read(DATA,CONFIG_PATH + "class_directory"_S + cl + ".txt");
}
utils::datafile::DEBUG_ACCESS_OPTIONS="debug_access_options"_I;
}
bool Crawler::OnUserCreate(){
@ -1162,33 +1163,64 @@ int main()
}
datafilestringdata operator ""_s(const char*key,std::size_t len){
if(utils::datafile::DEBUG_ACCESS_OPTIONS){
std::cout<<"Reading "<<std::string(key,len)<<std::endl;
}
return {DATA,std::string(key,len)};
}
datafileintdata operator ""_i(const char*key,std::size_t len){
if(utils::datafile::DEBUG_ACCESS_OPTIONS){
std::cout<<"Reading "<<std::string(key,len)<<std::endl;
}
return {DATA,std::string(key,len)};
}
datafilefloatdata operator ""_f(const char*key,std::size_t len){
if(utils::datafile::DEBUG_ACCESS_OPTIONS){
std::cout<<"Reading "<<std::string(key,len)<<std::endl;
}
return {DATA,std::string(key,len)};
}
datafiledoubledata operator ""_d(const char*key,std::size_t len){
if(utils::datafile::DEBUG_ACCESS_OPTIONS){
std::cout<<"Reading "<<std::string(key,len)<<std::endl;
}
return {DATA,std::string(key,len)};
}
Pixel operator ""_Pixel(const char*key,std::size_t len){
if(utils::datafile::DEBUG_ACCESS_OPTIONS){
std::cout<<"Reading "<<std::string(key,len)<<std::endl;
}
return {uint8_t(DATA.GetProperty(std::string(key,len)).GetInt(0)),uint8_t(DATA.GetProperty(std::string(key,len)).GetInt(1)),uint8_t(DATA.GetProperty(std::string(key,len)).GetInt(2)),uint8_t(DATA.GetProperty(std::string(key,len)).GetInt(3))};
}
std::string operator ""_S(const char*key,std::size_t len){
if(utils::datafile::DEBUG_ACCESS_OPTIONS){
std::cout<<"Reading "<<std::string(key,len)<<std::endl;
}
return DATA.GetProperty(std::string(key,len)).GetString();
}
int operator ""_I(const char*key,std::size_t len){
if(utils::datafile::DEBUG_ACCESS_OPTIONS){
std::cout<<"Reading "<<std::string(key,len)<<std::endl;
}
return DATA.GetProperty(std::string(key,len)).GetInt();
}
float operator ""_F(const char*key,std::size_t len){
if(utils::datafile::DEBUG_ACCESS_OPTIONS){
std::cout<<"Reading "<<std::string(key,len)<<std::endl;
}
return DATA.GetProperty(std::string(key,len)).GetReal();
}
double operator ""_D(const char*key,std::size_t len){
if(utils::datafile::DEBUG_ACCESS_OPTIONS){
std::cout<<std::string(key,len)<<std::endl;
}
return DATA.GetProperty(std::string(key,len)).GetReal();
}

@ -178,6 +178,7 @@
<ClInclude Include="Bullet.h" />
<ClInclude Include="BulletTypes.h" />
<ClInclude Include="Class.h" />
<ClInclude Include="config.h" />
<ClInclude Include="Crawler.h" />
<ClInclude Include="DamageNumber.h" />
<ClInclude Include="DEFINES.h" />

@ -123,6 +123,9 @@
<ClInclude Include="olcUTIL_DataFile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="config.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Player.cpp">

@ -601,8 +601,8 @@ CastInfo&Player::GetCastInfo(){
}
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.
std::vector<vf2d>pathing=game->pathfinder.Solve_AStar(pos,targetPos,range,upperLevel);
return pathing.size()>0&&pathing.size()<range;//We'll say 7 tiles or less is close enough to 650 range. Have a little bit of wiggle room.
}
void Player::PrepareCast(Ability&ability){

@ -55,7 +55,7 @@ private:
void Initialize();
protected:
const float ATTACK_COOLDOWN="Warrior.Auto Attack.Cooldown"_F;
const float MAGIC_ATTACK_COOLDOWN=0.85f;
const float MAGIC_ATTACK_COOLDOWN="Wizard.Auto Attack.Cooldown"_F;
const float ARROW_ATTACK_COOLDOWN=0.6f;
void SetSwordSwingTimer(float val);
void SetState(State newState);

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

@ -6,6 +6,7 @@
#include "Crawler.h"
#include "BulletTypes.h"
#include "config.h"
#include "utils.h"
INCLUDE_MONSTER_LIST
INCLUDE_BULLET_LIST
@ -66,7 +67,7 @@ void Wizard::OnUpdate(float fElapsedTime){
bool Wizard::AutoAttack(){
attack_cooldown_timer=MAGIC_ATTACK_COOLDOWN;
float angleToCursor=atan2(game->GetWorldMousePos().y-GetPos().y,game->GetWorldMousePos().x-GetPos().x);
BULLET_LIST.push_back(std::make_unique<EnergyBolt>(EnergyBolt(GetPos(),{cos(angleToCursor)*200,sin(angleToCursor)*200},12,GetAttack(),upperLevel,true,WHITE)));
BULLET_LIST.push_back(std::make_unique<EnergyBolt>(EnergyBolt(GetPos(),{cos(angleToCursor)*"Wizard.Auto Attack.Speed"_F,sin(angleToCursor)*"Wizard.Auto Attack.Speed"_F},"Wizard.Auto Attack.Radius"_F/100*12,GetAttack(),upperLevel,true,WHITE)));
return true;
}
void Wizard::InitializeClassAbilities(){
@ -76,21 +77,37 @@ void Wizard::InitializeClassAbilities(){
if(p->GetState()==State::CASTING)return false;
float pointMouseDirection=atan2(game->GetWorldMousePos().y-p->GetPos().y,game->GetWorldMousePos().x-p->GetPos().x);
vf2d pointTowardsMouse={cos(pointMouseDirection),sin(pointMouseDirection)};
float dist=std::clamp(geom2d::line<float>{p->GetPos(),game->GetWorldMousePos()}.length(),0.f,6.5f*24);
if(dist<12)return false;
float dist=std::clamp(geom2d::line<float>{p->GetPos(),game->GetWorldMousePos()}.length(),0.f,"Wizard.Right Click Ability.TeleportRange"_F/100*24);
if(dist<"Wizard.Right Click Ability.TilesMin"_I*12)return false;
vf2d teleportPoint=p->GetPos()+pointTowardsMouse*dist;
while(dist>0&&game->HasTileCollision(game->GetCurrentLevel(),teleportPoint)&&p->CanPathfindTo(p->GetPos(),teleportPoint)){
while(dist>0&&game->HasTileCollision(game->GetCurrentLevel(),teleportPoint)&&p->CanPathfindTo(p->GetPos(),teleportPoint,"Wizard.Right Click Ability.TilesMax"_I)){
dist-=24;
teleportPoint=p->GetPos()+pointTowardsMouse*dist;
}
if(dist>0&&p->CanPathfindTo(p->GetPos(),teleportPoint)){
if(dist>0&&p->CanPathfindTo(p->GetPos(),teleportPoint,"Wizard.Right Click Ability.TilesMax"_I)){
p->SetState(State::TELEPORT);
p->teleportAnimationTimer=0.35;
p->teleportAnimationTimer="Wizard.Right Click Ability.AnimationTime"_F;
p->teleportTarget=teleportPoint;
p->teleportStartPosition=p->GetPos();
p->iframe_time=0.35;
for(int i=0;i<16;i++){
game->AddEffect(std::make_unique<Effect>(p->GetPos()+vf2d{(rand()%160-80)/10.f,(rand()%160-80)/10.f},float(rand()%300)/1000,AnimationState::DOT_PARTICLE,p->upperLevel,0.3,0.2,vf2d{float(rand()%1000-500)/100,float(rand()%1000-500)/100},BLACK));
p->iframe_time="Wizard.Right Click Ability.IframeTime"_F;
for(int i=0;i<"Wizard.Right Click Ability.ParticleCount"_I;i++){
game->AddEffect(
std::make_unique<Effect>(
p->GetPos()+
vf2d{(util::random("Wizard.Right Click Ability.ParticleRange"_F/100*2)-
"Wizard.Right Click Ability.ParticleRange"_F/100)*12
,(util::random("Wizard.Right Click Ability.ParticleRange"_F/100*2)-
"Wizard.Right Click Ability.ParticleRange"_F/100)*12},
util::random("Wizard.Right Click Ability.ParticleLifetimeMax"_F)+
"Wizard.Right Click Ability.ParticleLifetimeMin"_F,
AnimationState::DOT_PARTICLE,p->upperLevel,
"Wizard.Right Click Ability.ParticleSize"_F,
"Wizard.Right Click Ability.ParticleFadetime"_F,
vf2d{util::random("Wizard.Right Click Ability.ParticleSpeedMax"_F*2)+
"Wizard.Right Click Ability.ParticleSpeedMin"_F,
util::random("Wizard.Right Click Ability.ParticleSpeedMax"_F*2)+
"Wizard.Right Click Ability.ParticleSpeedMin"_F},
"Wizard.Right Click Ability.ParticleColor"_Pixel));
}
return true;
} else {

@ -1,6 +1,7 @@
Warrior
{
ClassName = Warrior
Auto Attack
{
DamageMult = 1

@ -2,6 +2,14 @@ Wizard
{
ClassName = Wizard
Auto Attack
{
DamageMult = 1
Radius = 100
Speed = 200
Cooldown = 0.85
}
Right Click Ability
{
Name = Teleport
@ -15,6 +23,28 @@ Wizard
Precast Time = 0
Casting Range = 0
Casting Size = 0
TeleportRange = 650
AnimationTime = 0.35
IframeTime = 0.35
# The minimum tile range required for a teleport.
TilesMin = 1
# The maximum tile range a teleport is allowed to go.
TilesMax = 8
# Number of teleport particles to spawn.
ParticleCount = 16
ParticleRange = 33.33
ParticleLifetimeMin = 0
ParticleLifetimeMax = 0.3
ParticleSize = 0.3
ParticleFadetime = 0.2
ParticleSpeedMin = -5
ParticleSpeedMax = 5
ParticleColor = 0, 0, 0, 255
}
Ability 1
{

@ -14,3 +14,6 @@ class_directory = classes/
# Class list to be loaded into the game.
class_list = Warrior, Thief, Ranger, Trapper, Wizard, Witch
# Whether or not to show individual data accesses from config data structure.
debug_access_options = 0

@ -1,3 +1,4 @@
#pragma once
#include "olcUTIL_DataFile.h"
using namespace olc;
@ -18,3 +19,5 @@ int operator ""_I(const char*key,std::size_t len);
float operator ""_F(const char*key,std::size_t len);
//Read a double key from the config.
double operator ""_D(const char*key,std::size_t len);
Pixel operator ""_Pixel(const char*key,std::size_t len);

@ -62,12 +62,15 @@ David Barr, aka javidx9, <EFBFBD>OneLoneCoder 2019, 2020, 2021, 2022
#include <stack>
#include <sstream>
int operator ""_I(const char*key,std::size_t len);
namespace olc::utils
{
class datafile
{
public:
inline datafile() = default;
inline static bool DEBUG_ACCESS_OPTIONS=false;
public:
// Sets the String Value of a Property (for a given index)
@ -86,9 +89,10 @@ namespace olc::utils
std::cout<<"WARNING! Accesing out-of-bounds list item "<<nItem<<" of "<<lastAccessedProperty<<"!"<<std::endl;
return "";
}
else
else {
return m_vContent[nItem];
}
}
// Retrieves the Real Value of a Property (for a given index) or 0.0
inline const double GetReal(const size_t nItem = 0) const

Loading…
Cancel
Save