Implemented WorldThingSpawned hook. Also changed Console.Printf to automatically add \n. Also fixed vararg calls with names.

This commit is contained in:
ZZYZX 2017-01-30 09:10:33 +02:00
parent 0598c18ad8
commit 83f868a049
6 changed files with 19 additions and 4 deletions

View File

@ -627,6 +627,9 @@ public:
virtual void BeginPlay(); // Called immediately after the actor is created
void CallBeginPlay();
// [ZZ] custom postbeginplay (calls E_WorldThingSpawned)
void CallPostBeginPlay() override;
void LevelSpawned(); // Called after BeginPlay if this actor was spawned by the world
void HandleSpawnFlags(); // Translates SpawnFlags into in-game flags.

View File

@ -1338,7 +1338,7 @@ DEFINE_ACTION_FUNCTION(_Console, Printf)
{
PARAM_PROLOGUE;
FString s = FStringFormat(param, defaultparam, numparam, ret, numret);
Printf("%s", s);
Printf("%s\n", s);
return 0;
}

View File

@ -71,7 +71,7 @@ public:
virtual void Tick ();
void CallTick();
virtual void PostBeginPlay (); // Called just before the first tick
void CallPostBeginPlay();
virtual void CallPostBeginPlay(); // different in actor.
virtual void PostSerialize();
size_t PropagateMark();

View File

@ -4,6 +4,7 @@
#include "g_levellocals.h"
#include "gi.h"
#include "v_text.h"
#include "actor.h"
DStaticEventHandler* E_FirstEventHandler = nullptr;
@ -232,6 +233,9 @@ void E_WorldUnloadedUnsafe()
void E_WorldThingSpawned(AActor* actor)
{
// don't call anything if actor was destroyed on PostBeginPlay/BeginPlay/whatever.
if (actor->ObjectFlags & OF_EuthanizeMe)
return;
for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next)
handler->WorldThingSpawned(actor);
}

View File

@ -71,6 +71,7 @@
#include "virtual.h"
#include "g_levellocals.h"
#include "a_morph.h"
#include "events.h"
// MACROS ------------------------------------------------------------------
@ -4970,6 +4971,12 @@ void AActor::PostBeginPlay ()
flags7 |= MF7_HANDLENODELAY;
}
void AActor::CallPostBeginPlay()
{
Super::CallPostBeginPlay();
E_WorldThingSpawned(this);
}
void AActor::MarkPrecacheSounds() const
{
SeeSound.MarkUsed();

View File

@ -8206,9 +8206,10 @@ FxExpression *FxVMFunctionCall::Resolve(FCompileContext& ctx)
if (x)
{
if (x->ValueType == TypeName ||
x->ValueType == TypeSound)
x->ValueType == TypeSound ||
x->ValueType == TypeSpriteID) // spriteID can be a string too.
{
x = new FxStringCast(ArgList[i]);
x = new FxStringCast(x);
x = x->Resolve(ctx);
}
}