private static bool NewBaseImpactMote(this MoteSubEffect MSE, out MoteThrown moteThrown) { if (!MSE.HasImpactMote) { Tools.Warn("NewBaseImpactMote - Failed to find impact mote; giving up", MSE.debug); moteThrown = null; return(false); } moteThrown = (MoteThrown)ThingMaker.MakeThing(MSE.impactMote.moteDef); moteThrown.Scale = MSE.impactMote.scale.RandomInRange; moteThrown.rotationRate = MSE.impactMote.rotationRate.RandomInRange; Tools.Warn("NewBaseImpactMote - ok", MSE.debug); return(true); }
public static void ThrowImpactMote(this ShadowMote shadowMote) { if (!shadowMote.HasMSE || !shadowMote.MSE.HasImpactMote) { return; } Vector3 loc = shadowMote.exactPosition; Map map = shadowMote.Map; MoteSubEffect MSE = shadowMote.MSE; //Tools.Warn("ThrowImpactMote ; has MSE; has impactMote", MSE.debug); if (!loc.AllowedMoteSpawn(map)) { return; } //Tools.Warn("ThrowImpactMote ; AllowedMoteSpawn", MSE.debug); if (!MSE.NewBaseImpactMote(out MoteThrown moteThrown)) { Tools.Warn("ThrowImpactMote ; NewBaseImpactMote ko; giving up", MSE.debug); return; } moteThrown.exactPosition = loc; //Tools.Warn("ThrowImpactMote ; what", MSE.debug); moteThrown.exactPosition += new Vector3(Rand.Range(-0.02f, 0.02f), 0f, Rand.Range(-0.02f, 0.02f)); //Tools.Warn("ThrowImpactMote ; exactPosition ok", MSE.debug); moteThrown.SetVelocity( MSE.impactMote.angle.RandomInRange, MSE.impactMote.speed.RandomInRange ); //Tools.Warn("ThrowImpactMote ; SetVelocity ok", MSE.debug); GenSpawn.Spawn(moteThrown, loc.ToIntVec3(), map); Tools.Warn("ThrowImpactMote ; GenSpawn.Spawn ok", MSE.debug); }