public void ImpactEffects(Vector3 pos, Map map, ThingDef explosionMoteDef, float ExplosionMoteSize, Color?color, SoundDef sound, FleckDef ImpactMoteDef, float ImpactMoteSize, FleckDef ImpactGlowMoteDef, float ImpactGlowMoteSize, Thing hitThing = null, Thing projectile = null, int OverrideSolidTime = -1) { Rand.PushState(); FleckDef impactMoteDef = ImpactMoteDef ?? this.ImpactMoteDef; float rotationRate = Rand.Range(-30f, 30f); float VelocityAngel = (float)Rand.Range(0, 360); float VelocitySpeed = Rand.Range(0.48f, 0.72f); Rand.PopState(); if (ImpactGlowMoteDef != null) { try { AdeptusFleckMaker.ThrowGlow(pos, map, ImpactGlowMoteSize, ImpactGlowMoteDef); /* * mote.instanceColor.r = color.Value.r * 0.25f; * mote.instanceColor.g = color.Value.g * 0.25f; * mote.instanceColor.b = color.Value.b * 0.25f; */ } catch (System.Exception) { // Log.Message("Waaah "+ projectile + " ImpactGlowMoteDef broke Vs " + hitThing); } } if (explosionMoteDef != null) { try { Vector3 loc = pos; loc.y = explosionMoteDef.Altitude; MoteThrown moteThrown; moteThrown = (MoteThrown)ThingMaker.MakeThing(explosionMoteDef, null); moteThrown.Scale = ExplosionMoteSize; Rand.PushState(); moteThrown.rotationRate = Rand.Range(-30f, 30f); Rand.PopState(); moteThrown.exactPosition = loc; moteThrown.instanceColor = color.Value; moteThrown.SetVelocity(VelocityAngel, VelocitySpeed); if (OverrideSolidTime > -1) { moteThrown.solidTimeOverride = OverrideSolidTime; } GenSpawn.Spawn(moteThrown, loc.ToIntVec3(), map, WipeMode.Vanish); } catch (System.Exception) { // Log.Message("Waaah " + projectile + " explosionMoteDef broke Vs " + hitThing); } } if (ImpactMoteDef != null) { try { Vector3 loc = pos; if (hitThing != null && hitThing is Pawn pawn) { impactMoteDef = DefDatabase <FleckDef> .GetNamedSilentFail("AdeptusMechanicus_Mote_Blood_Puff"); if (sound != null) { sound.PlayOneShot(new TargetInfo(loc.ToIntVec3(), map, false)); } AdeptusFleckMaker.Thrown(loc, map, impactMoteDef, ImpactMoteSize, pawn.RaceProps.BloodDef?.graphic.color, null, Rand.Range(-30f, 30f), OverrideSolidTime > -1 ? (float?)OverrideSolidTime : null, VelocityAngel, VelocitySpeed); } else { Color c = Color.white; if (color.HasValue) { c.r = color.Value.r * 0.25f; c.g = color.Value.g * 0.25f; c.b = color.Value.b * 0.25f; } AdeptusFleckMaker.Thrown(loc, map, impactMoteDef, ImpactGlowMoteSize, c, null, Rand.Range(-30f, 30f), OverrideSolidTime > -1 ? (float?)OverrideSolidTime : null, VelocityAngel, VelocitySpeed); } } catch (System.Exception) { // Log.Message("Waaah " + projectile + " ImpactMoteDef broke Vs "+hitThing); } } }