Hi,
I have a setup where I have a ABaseCharacter which has several abilities, like talking to NPC, target enemies and so on. Yesterday I decided to make my MeleeCombatSystem more modular to reuse it in other projects.
Basically I did something like that:
ABaseCharacter::ABaseCharacter()
{
}
void ABaseCharacter::startMelee()
{
// do stuff do stuff do stuff
doSomethingWithTimerInMeleeCombat();
}
void ABaseCharacter::doSomethingWithTimerInMeleeCombat()
{
GetWorldTimerManager()-> // and so on
}
This works well, no issues. When I decided to make it more “modular” I changed my code to following
ABaseCharacter.h
// forward declaration
class AMeleeCombatSystem;
class AMeleeCombatSystem : ABaseCharacter
{
AMeleeCombatSystem* meleeSystem;
}
ABaseCharacter.cpp
#include “Combat/MeleeCombatSystem.h”
ABaseCharacter::ABaseCharacter()
{
AMeleeCombatSystem *meleeSystem = Cast<AMeleeCombatSystem>(AMeleeCombatSystem::StaticClass()->GetDefaultObject();
}
void ABaseCharacter::startMelee()
{
if(meleeSystem)
{
meleeSystem->doSomethingWithTimerInMeleeCombat();
}
}
/*** Inherit from baseCharacter in header file ***/
AMeleeCombatSystem : ABaseCharacter
In AMeleeCombatSystem.cpp
void AMeleeCombatSystem::doSomethingWithTimerInMeleeCombat()
{
// do stuff do stuff do stuff
GetWorldTimerManager()-> // CRASHED
}
I believe the issue is that this MeleeCombatSystem is not really in the UWorld* and just invoked by using AMeleeCombatSystem *meleeSystem = Cast(AMeleeCombatSystem::StaticClass()->GetDefaultObject();
So I tried to change it to the following
void AMeleeCombatSystem::doSomethingWithTimerInMeleeCombat()
{
// do stuff do stuff do stuff
ABaseCharacter::GetWorldTimerManager()-> // CRASHED also
}
Did someone ran into similar problems or am I looking in the wrong direction?
I am looking for a way to use GetWorldTimerManager() for this class which is not placed in the UWorld.
Thanks in advance