private static Gizmo GetSquadTeleGizmo(Pawn pawn) { // Log.Warning("YES"); Command_TargetPlus command_Target = new Command_TargetPlus(); command_Target.defaultLabel = "ChronoTeleport".Translate(); TargetingParameters tp = new TargetingParameters(); tp.canTargetBuildings = false; tp.canTargetFires = false; tp.canTargetLocations = true; tp.canTargetPawns = false; tp.canTargetSelf = false; command_Target.disabled = pawn.stances.stunner.Stunned || !pawn.drafter.Drafted; command_Target.targetingParams = tp; command_Target.hotKey = KeyBindingDefOf.Misc4; command_Target.icon = ContentFinder <Texture2D> .Get("ra2/Things/Misc/ChTeleport", true); command_Target.aimIcon = ContentFinder <Texture2D> .Get("ra2/Things/Misc/ChTeleport", true); command_Target.action = delegate(LocalTargetInfo target) { IEnumerable <Pawn> enumerable = Find.Selector.SelectedObjects.Where(delegate(object x) { Pawn pawn3 = x as Pawn; return(pawn3 != null && pawn3.IsColonistPlayerControlled && pawn3.Drafted); }).Cast <Pawn>(); List <Pawn> tmpPawns = enumerable.ToList <Pawn>(); List <Pawn> tmpPawns2 = new List <Pawn>(); foreach (Pawn pawn2 in tmpPawns) { { Pawn casterPawn = pawn2; Map map = pawn2.Map; IEnumerable <Thing> thi = map.thingGrid.ThingsAt(target.Cell); foreach (Thing th in thi) { if (th is Building) { Messages.Message("ChronoNotToBuild".Translate(), MessageTypeDefOf.RejectInput); return; } } MoteMaker.ThrowExplosionCell(target.Cell, map, ThingDefOf.Mote_ExplosionFlash, new UnityEngine.Color(1, 1, 1)); // MoteMaker.ThrowExplosionCell(target.Cell, map, ThingDefOf.Mote_ExplosionFlash, new UnityEngine.Color(1,1,1)); // for (int asd = 0; asd < 60; asd++) MoteMaker.ThrowExplosionCell(casterPawn.Position, map, ThingDefOf.Mote_ExplosionFlash, new UnityEngine.Color(1f, 1, 1)); double dist = Math.Sqrt(Math.Pow(casterPawn.Position.x - target.Cell.x, 2) + Math.Pow(casterPawn.Position.z - target.Cell.z, 2)); if (dist < 20) { dist = 20; } pawn2.DeSpawn(DestroyMode.Vanish); GenSpawn.Spawn(casterPawn, target.Cell, map, WipeMode.Vanish); casterPawn.drafter.Drafted = true; tmpPawns2.Add(casterPawn); SoundStarter.PlayOneShot(DefDatabase <SoundDef> .GetNamed("ra2_Chrono_move", true), casterPawn); SoundStarter.PlayOneShotOnCamera(DefDatabase <SoundDef> .GetNamed("ra2_Chrono_movesay", true)); DamageInfo dinfo = new DamageInfo(DamageDefOf.Stun, (int)(dist * 0.1), -1, 1, null, null, casterPawn.equipment.Primary.def, DamageInfo.SourceCategory.ThingOrUnknown, casterPawn); casterPawn.TakeDamage(dinfo); } } foreach (Pawn pps in tmpPawns2) { Find.Selector.SelectedObjects.Add(pps); } }; return(command_Target); }
private static Gizmo GetSquadTeleGizmo(Pawn pawn) { // Log.Warning("YES"); var command_Target = new Command_TargetPlus { defaultLabel = "ChronoTeleport".Translate() }; var tp = new TargetingParameters { canTargetBuildings = false, canTargetFires = false, canTargetLocations = true, canTargetPawns = false, canTargetSelf = false }; command_Target.disabled = pawn.stances.stunner.Stunned || !pawn.drafter.Drafted; command_Target.targetingParams = tp; command_Target.hotKey = KeyBindingDefOf.Misc4; command_Target.icon = ContentFinder <Texture2D> .Get("ra2/Things/Misc/ChTeleport"); command_Target.aimIcon = ContentFinder <Texture2D> .Get("ra2/Things/Misc/ChTeleport"); command_Target.action = delegate(LocalTargetInfo target) { var enumerable = Find.Selector.SelectedObjects.Where(x => x is Pawn { IsColonistPlayerControlled: true, Drafted: true }).Cast <Pawn>(); var tmpPawns = enumerable.ToList(); var tmpPawns2 = new List <Pawn>(); foreach (var pawn2 in tmpPawns) { { var casterPawn = pawn2; var map = pawn2.Map; var thi = map.thingGrid.ThingsAt(target.Cell); foreach (var th in thi) { if (th is not Building) { continue; } Messages.Message("ChronoNotToBuild".Translate(), MessageTypeDefOf.RejectInput); return; } FleckMaker.ThrowExplosionCell(target.Cell, map, FleckDefOf.ExplosionFlash, new Color(1, 1, 1)); // MoteMaker.ThrowExplosionCell(target.Cell, map, ThingDefOf.Mote_ExplosionFlash, new UnityEngine.Color(1,1,1)); // for (int asd = 0; asd < 60; asd++) FleckMaker.ThrowExplosionCell(casterPawn.Position, map, FleckDefOf.ExplosionFlash, new Color(1f, 1, 1)); var dist = Math.Sqrt(Math.Pow(casterPawn.Position.x - target.Cell.x, 2) + Math.Pow(casterPawn.Position.z - target.Cell.z, 2)); if (dist < 20) { dist = 20; } pawn2.DeSpawn(); GenSpawn.Spawn(casterPawn, target.Cell, map); casterPawn.drafter.Drafted = true; tmpPawns2.Add(casterPawn); DefDatabase <SoundDef> .GetNamed("ra2_Chrono_move").PlayOneShot(casterPawn); DefDatabase <SoundDef> .GetNamed("ra2_Chrono_movesay").PlayOneShotOnCamera(); var dinfo = new DamageInfo(DamageDefOf.Stun, (int)(dist * 0.1), -1, 1, null, null, casterPawn.equipment.Primary.def, DamageInfo.SourceCategory.ThingOrUnknown, casterPawn); casterPawn.TakeDamage(dinfo); } } foreach (var pps in tmpPawns2) { Find.Selector.SelectedObjects.Add(pps); } };