public static void UpdateMotes(this InnerShineItem ISI, InnerShineRecord ISR, Pawn pawn, bool debug = false) { if (ISR.spawned.NullOrEmpty()) { return; } for (int i = ISR.spawned.Count - 1; i >= 0; i--) { Thing curT = ISR.spawned[i]; if (curT.DestroyedOrNull()) { ISR.spawned.RemoveAt(i); continue; } if (!ISI.HasCompatibleActivity(pawn)) { curT.Destroy(); ISR.spawned.RemoveAt(i); continue; } if (curT is Mote mote) { mote.exactPosition = pawn.DrawPos + pawn.GetLinkOffset(ISI.linkType) + ISI.GetDrawOffset(pawn); //if (debug) Log.Warning(ISR.label + $" => mote.exactPosition: {mote.exactPosition} mote.DrawPos:{mote.DrawPos}"); } } }
public static bool ShouldSpawnMote(this InnerShineItem ISI, InnerShineRecord ISR, Pawn p) { if (!ISI.HasCompatibleActivity(p)) { return(false); } if (ISI.HasMoteNumLimit()) { return(!ISR.AlreadyReachedMax(ISI.spawningRules.spawnedMax)); } return(true); }