Hi there,
You don’t have to make your properties public to able to expose them to blueprints. You can encapsulate your data in c++ and still expose them to blueprints by using the meta specifier AllowPrivateAccess on these private variables.
private:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta=(AllowPrivateAccess = true))
bool EnemyDirection;
The above code will compile without any issues.