@@ -61,54 +61,67 @@ private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstructi
6161 {
6262 List < CodeInstruction > newInstructions = ListPool < CodeInstruction > . Pool . Get ( instructions ) ;
6363
64- int offset = 1 ;
65- int index = newInstructions . FindIndex ( i => i . opcode == OpCodes . Stloc_3 ) + offset ;
64+ int offset = 2 ;
65+ int index = newInstructions . FindIndex ( i => i . opcode == OpCodes . Ldloc_S && i . operand is LocalBuilder { LocalIndex : 5 } ) + offset ;
6666
67- Label returnLabel = generator . DefineLabel ( ) ;
67+ Log . Warn ( $ "INDEX OF EXPLODING GRENADE: { index } ") ;
68+ Label continueLabel = generator . DefineLabel ( ) ;
6869
6970 LocalBuilder ev = generator . DeclareLocal ( typeof ( ExplodingGrenadeEventArgs ) ) ;
7071
71- newInstructions . InsertRange (
72- index ,
73- new CodeInstruction [ ]
74- {
75- // attacker;
76- new ( OpCodes . Ldarg_0 ) ,
72+ newInstructions . InsertRange ( index , new CodeInstruction [ ]
73+ {
74+ // attacker;
75+ new ( OpCodes . Ldarg_0 ) ,
76+
77+ // position
78+ new ( OpCodes . Ldarg_1 ) ,
7779
78- // position
79- new ( OpCodes . Ldarg_1 ) ,
80+ // grenade
81+ new ( OpCodes . Ldarg_2 ) ,
8082
81- // grenade
82- new ( OpCodes . Ldarg_2 ) ,
83+ // Collider[]
84+ new ( OpCodes . Ldloc_S , 5 ) ,
8385
84- // Collider[]
85- new ( OpCodes . Ldloc_3 ) ,
86+ // explosionType
87+ new ( OpCodes . Ldarg_3 ) ,
8688
87- // explosionType
88- new ( OpCodes . Ldarg_3 ) ,
89+ // ExplodingGrenadeEventArgs ev = new(Footprint, position, grenade, colliders, ExplosionType);
90+ new ( OpCodes . Newobj , DeclaredConstructor ( typeof ( ExplodingGrenadeEventArgs ) , new [ ] { typeof ( Footprint ) , typeof ( Vector3 ) , typeof ( ExplosionGrenade ) , typeof ( Collider [ ] ) , typeof ( ExplosionType ) } ) ) ,
91+ new ( OpCodes . Dup ) ,
92+ new ( OpCodes . Dup ) ,
93+ new ( OpCodes . Stloc , ev . LocalIndex ) ,
8994
90- // ExplodingGrenadeEventArgs ev = new(player, position, grenade, colliders, ExplosionType);
91- new ( OpCodes . Newobj , DeclaredConstructor ( typeof ( ExplodingGrenadeEventArgs ) , new [ ] { typeof ( Footprint ) , typeof ( Vector3 ) , typeof ( ExplosionGrenade ) , typeof ( Collider [ ] ) , typeof ( ExplosionType ) } ) ) ,
92- new ( OpCodes . Dup ) ,
93- new ( OpCodes . Dup ) ,
94- new ( OpCodes . Stloc , ev . LocalIndex ) ,
95+ // Map.OnExplodingGrenade(ev);
96+ new ( OpCodes . Call , Method ( typeof ( Handlers . Map ) , nameof ( Handlers . Map . OnExplodingGrenade ) ) ) ,
9597
96- // Map.OnExplodingGrenade(ev);
97- new ( OpCodes . Call , Method ( typeof ( Handlers . Map ) , nameof ( Handlers . Map . OnExplodingGrenade ) ) ) ,
98+ // if (!ev.IsAllowed)
99+ // return;
100+ new ( OpCodes . Callvirt , PropertyGetter ( typeof ( ExplodingGrenadeEventArgs ) , nameof ( ExplodingGrenadeEventArgs . IsAllowed ) ) ) ,
101+ new ( OpCodes . Brtrue_S , continueLabel ) ,
98102
99- // if (!ev.IsAllowed)
100- // return;
101- new ( OpCodes . Callvirt , PropertyGetter ( typeof ( ExplodingGrenadeEventArgs ) , nameof ( ExplodingGrenadeEventArgs . IsAllowed ) ) ) ,
102- new ( OpCodes . Brfalse , returnLabel ) ,
103+ // HashSetPool<uint>.Shared.Return(hashSet);
104+ new ( OpCodes . Ldsfld , Field ( typeof ( NorthwoodLib . Pools . HashSetPool < uint > ) , nameof ( NorthwoodLib . Pools . HashSetPool < uint > . Shared ) ) ) ,
105+ new ( OpCodes . Ldloc_2 ) ,
106+ new ( OpCodes . Callvirt , Method ( typeof ( NorthwoodLib . Pools . HashSetPool < uint > ) , nameof ( NorthwoodLib . Pools . HashSetPool < uint > . Return ) ) ) ,
103107
104- // colliders = TrimColliders(ev, colliders)
105- new ( OpCodes . Ldloc , ev . LocalIndex ) ,
106- new ( OpCodes . Ldloc_3 ) ,
107- new ( OpCodes . Call , Method ( typeof ( ExplodingFragGrenade ) , nameof ( TrimColliders ) ) ) ,
108- new ( OpCodes . Stloc_3 ) ,
109- } ) ;
108+ // HashSetPool<uint>.Shared.Return(hashSet2);
109+ new ( OpCodes . Ldsfld , Field ( typeof ( NorthwoodLib . Pools . HashSetPool < uint > ) , nameof ( NorthwoodLib . Pools . HashSetPool < uint > . Shared ) ) ) ,
110+ new ( OpCodes . Ldloc_3 ) ,
111+ new ( OpCodes . Callvirt , Method ( typeof ( NorthwoodLib . Pools . HashSetPool < uint > ) , nameof ( NorthwoodLib . Pools . HashSetPool < uint > . Return ) ) ) ,
110112
111- newInstructions [ newInstructions . Count - 1 ] . labels . Add ( returnLabel ) ;
113+ // return;
114+ new ( OpCodes . Ret ) ,
115+
116+ // colliders = TrimColliders(ev, colliders)
117+ new CodeInstruction ( OpCodes . Ldloc , ev . LocalIndex ) . WithLabels ( continueLabel ) ,
118+ new ( OpCodes . Ldloc_S , 5 ) ,
119+ new ( OpCodes . Call , Method ( typeof ( ExplodingFragGrenade ) , nameof ( TrimColliders ) ) ) ,
120+ new ( OpCodes . Stloc_S , 5 ) ,
121+ } ) ;
122+
123+ for ( int z = 0 ; z < newInstructions . Count ; z ++ )
124+ Log . Info ( $ "[{ z } ]{ newInstructions [ z ] . opcode } : { newInstructions [ z ] . operand } ({ newInstructions [ z ] . labels . Count } )") ;
112125
113126 for ( int z = 0 ; z < newInstructions . Count ; z ++ )
114127 yield return newInstructions [ z ] ;
0 commit comments