HomeWildfire Games

Clean mirage internals.

Description

Clean mirage internals.

Use a map that stores the functions instead of them being part of the Mirage component.
Means that a lot doesn't need to be inited now (refs. #5979).

Ticket: #5985
Differential revision: D3694
Comments by: @wraitii

Event Timeline

ERROR: Cannot serialise JS objects of type 'function': (unnamed)
terminate called after throwing an instance of 'PSERROR_Serialize_InvalidScriptValue'
  what():  Serialize_InvalidScriptValue

Thread 1 "main" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51	../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x00007ffff2bab921 in __GI_abort () at abort.c:79
#2  0x00007ffff37bd957 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffff37c3ae6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffff37c3b21 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffff37c3d54 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x0000555555624280 in CBinarySerializerScriptImpl::HandleScriptVal (this=this@entry=0x5555871adcc0, val=..., 
    val@entry=...) at ../../../source/simulation2/serialization/BinarySerializer.cpp:365
#7  0x0000555555624db2 in CBinarySerializerScriptImpl::HandleScriptVal (this=this@entry=0x5555871adcc0, val=..., 
    val@entry=...) at ../../../source/simulation2/serialization/BinarySerializer.cpp:330
#8  0x000055555562531e in CBinarySerializerScriptImpl::HandleScriptVal (this=this@entry=0x5555871adcc0, val=..., 
    val@entry=...) at ../../../source/simulation2/serialization/BinarySerializer.cpp:183
#9  0x0000555555624db2 in CBinarySerializerScriptImpl::HandleScriptVal (this=0x5555871adcc0, val=...)
    at ../../../source/simulation2/serialization/BinarySerializer.cpp:330
#10 0x000055555574d664 in CComponentTypeScript::Serialize (this=0x5555879072c0, serialize=...)
    at ../../../source/simulation2/scripting/ScriptComponent.cpp:58
#11 0x0000555555642016 in CComponentManager::ComputeStateHash (this=<optimised out>, outHash="", 
    quick=quick@entry=false) at ../../../source/simulation2/system/ComponentManagerSerialization.cpp:143
#12 0x000055555560c536 in CSimulation2::ComputeStateHash (this=<optimised out>, outHash="", quick=quick@entry=false)
    at ../../../source/simulation2/Simulation2.cpp:883
#13 0x00005555555cada6 in CNetClientTurnManager::NotifyFinishedUpdate (this=0x55555b572fa0, turn=3080)
    at ../../../source/network/NetClientTurnManager.cpp:80
#14 0x00005555556565b2 in CTurnManager::Update (this=<optimised out>, simFrameLength=<optimised out>, maxTurns=1)
    at ../../../source/simulation2/system/TurnManager.cpp:175
#15 0x00005555557b1c06 in CGame::Update (this=0x555557e61cb0, deltaRealTime=0.050575096160173416, 
    doInterpolate=<optimised out>) at ../../../source/ps/Game.cpp:402
#16 0x00005555555b1b81 in Frame () at ../../../source/main.cpp:426
#17 RunGameOrAtlas (argc=<optimised out>, argv=<optimised out>) at ../../../source/main.cpp:692
#18 0x000055555559ec77 in main (argc=1, argv=0x7fffffffdff8) at ../../../source/main.cpp:743

I guess this originates from here ;(

wraitii added inline comments.Mar 18 2021, 9:50 AM
/ps/trunk/binaries/data/mods/public/simulation/components/Mirage.js
128

This is the reason for the failure I think. Should definitely remain on the prototype.

As I (suddenly) feared, this also throws "Deserialization failed: Deserializer failed to get constructor object" errors, because the MiragedX are not available in the global scope.

I suggest reverting temporarily.