public int getNbMindsConnectedToSurrogate() { int ret = 0; foreach (var m in storedMinds) { CompSurrogateOwner cso = m.ATCompSurrogateOwner; if (cso != null && cso.isThereSX()) { ret++; } } return(ret); }
public void stopMindActivities(Pawn mind, bool serverShutdown = false) { stopRemotelyControlledTurret(mind); CompSurrogateOwner cso = mind.ATCompSurrogateOwner; if (cso != null && cso.isThereSX()) { cso.disconnectControlledSurrogate(null); } if (!serverShutdown && assistingMinds.Contains(mind)) { assistingMinds.Remove(mind); } }
public void showFloatMenuMindsStored(Action <Pawn> onClick, bool hideSurrogate = false, bool hideTurretController = false, bool showOnlyConnectedDevices = false, bool resolveSurrogates = false, List <FloatMenuOption> supOpts = null, bool hideAssistingMinds = false, bool showOnlyAssistingMinds = false) { List <FloatMenuOption> opts = new List <FloatMenuOption>(); FloatMenu floatMenuMap; if (supOpts != null) { opts = opts.Concat(supOpts).ToList(); } //Listing des SkyCloud Cores foreach (var m in storedMinds) { //Log.Message("Suspended => " +m.LabelCap+" "+ m.Suspended); CompSurrogateOwner cso = m.ATCompSurrogateOwner; bool isSurrogateController = cso != null && cso.isThereSX(); bool turretController = controlledTurrets.ContainsKey(m); bool isAssistingMind = assistingMinds.Contains(m); //Si mind dans un mental break if (inMentalBreak.ContainsKey(m)) { continue; } //Si mind en cours de replication on le masque if (replicatingMinds.Contains(m)) { continue; } //Si migration en cours sur un mind on le jerte de la liste des minds consultables if (cso != null && cso.migrationEndingGT != -1) { continue; } if ((hideAssistingMinds && isAssistingMind) || showOnlyAssistingMinds && !isAssistingMind) { continue; } if (hideTurretController && turretController) { continue; } if (hideSurrogate && isSurrogateController) { continue; } string name = m.LabelShortCap; if (isSurrogateController) { //On affiche le nom du colon numérisé car il est permuté avec le surrogate if (!cso.isThereSX()) { name = m.LabelShortCap; } else { if (cso.SX != null) { name = cso.SX.LabelShortCap; } else { name = m.LabelShortCap; } } } if (showOnlyConnectedDevices) { if (!isSurrogateController && !turretController) { continue; } } opts.Add(new FloatMenuOption(name, delegate { Pawn sel = m; if (resolveSurrogates && isSurrogateController) { if (cso.isThereSX()) { if (cso.isThereSX()) { if (cso.SX != null) { sel = cso.SX; } else { sel = m; } } else { sel = m; } } else { sel = m; } } onClick(sel); }, MenuOptionPriority.Default, null, null, 0f, null, null)); } opts.SortBy((x) => x.Label); if (opts.Count == 0) { return; } floatMenuMap = new FloatMenu(opts, "ATPP_SkyCloudFloatMenuMindsStoredSelect".Translate()); Find.WindowStack.Add(floatMenuMap); }
public override IEnumerable <Gizmo> CompGetGizmosExtra() { Building build = (Building)parent; //Si aucun mind stocké if (storedMinds.Count() == 0 || !build.TryGetComp <CompPowerTrader>().PowerOn || !Booted()) { yield break; } yield return(new Command_Action { icon = Tex.processInfo, defaultLabel = "ATPP_ProcessInfo".Translate(), defaultDesc = "ATPP_ProcessInfoDesc".Translate(), action = delegate() { showFloatMenuMindsStored(delegate(Pawn p) { Find.WindowStack.Add(new Dialog_InfoCard(p)); }, false, false, false, true); } }); yield return(new Command_Action { icon = Tex.processRemove, defaultLabel = "ATPP_ProcessRemove".Translate(), defaultDesc = "ATPP_ProcessRemoveDesc".Translate(), action = delegate() { showFloatMenuMindsStored(delegate(Pawn p) { Find.WindowStack.Add(new Dialog_Msg("ATPP_ProcessRemove".Translate(), "ATPP_ProcessRemoveDescConfirm".Translate(p.LabelShortCap, getName()), delegate { stopMindActivities(p); RemoveMind(p); p.Kill(null, null); Messages.Message("ATPP_ProcessRemoveOK".Translate(p.LabelShortCap), parent, MessageTypeDefOf.PositiveEvent); Utils.playVocal("soundDefSkyCloudMindDeletionCompleted"); }, false)); }, false, false, false, false); } }); yield return(new Command_Action { icon = Tex.processDuplicate, defaultLabel = "ATPP_ProcessDuplicate".Translate(), defaultDesc = "ATPP_ProcessDuplicateDesc".Translate(), action = delegate() { showFloatMenuMindsStored(delegate(Pawn p) { CompSurrogateOwner cso = p.ATCompSurrogateOwner; if (cso == null) { return; } int GT = Find.TickManager.TicksGame; cso.replicationStartGT = GT; cso.replicationEndingGT = GT + (Settings.mindReplicationHours * 2500); replicatingMinds.Add(p); stopMindActivities(p); Messages.Message("ATPP_ProcessDuplicateOK".Translate(p.LabelShortCap), parent, MessageTypeDefOf.PositiveEvent); }, false, false, false, false); } }); yield return(new Command_Action { icon = Tex.processAssist, defaultLabel = "ATPP_ProcessAssist".Translate(), defaultDesc = "ATPP_ProcessAssistDesc".Translate(), action = delegate() { List <FloatMenuOption> opts = new List <FloatMenuOption>(); //Affichage des minds affectés à l'assistement opts.Add(new FloatMenuOption("ATPP_ProcessAssistAssignedMinds".Translate(), delegate { List <FloatMenuOption> optsAdd = null; //Check s'il y a lieu d'jaouter l'option (il y a au moin 1+ minds assigné à supprimer if (assistingMinds.Count > 0) { optsAdd = new List <FloatMenuOption>(); optsAdd.Add(new FloatMenuOption("-" + ("ATPP_ProcessAssistUnassignAll".Translate()), delegate { int nb = 0; foreach (var m in storedMinds) { if (assistingMinds.Contains(m)) { assistingMinds.Remove(m); nb++; } } if (nb > 0) { Messages.Message("ATPP_ProcessMassUnassist".Translate(nb), parent, MessageTypeDefOf.PositiveEvent); } }, MenuOptionPriority.Default, null, null, 0f, null, null)); } showFloatMenuMindsStored(delegate(Pawn p) { assistingMinds.Remove(p); Messages.Message("ATPP_ProcessUnassistOK".Translate(p.LabelShortCap), parent, MessageTypeDefOf.PositiveEvent); }, false, false, false, false, optsAdd, false, true); }, MenuOptionPriority.Default, null, null, 0f, null, null)); //Affichage des minds non affectés à l'assistement opts.Add(new FloatMenuOption("ATPP_ProcessAssistUnassignedMinds".Translate(), delegate { List <FloatMenuOption> optsAdd = null; //Check s'il y a lieu d'jaouter l'option (il y a des minds et des minds non ajoutés) if (storedMinds.Count > 0 && getNbUnassistingMinds() > 0) { optsAdd = new List <FloatMenuOption>(); optsAdd.Add(new FloatMenuOption("-" + ("ATPP_ProcessAssistAssignAll".Translate()), delegate { int nb = 0; foreach (var m in storedMinds) { if (!assistingMinds.Contains(m)) { stopMindActivities(m); assistingMinds.Add(m); nb++; } } if (nb > 0) { Messages.Message("ATPP_ProcessMassAssist".Translate(nb), parent, MessageTypeDefOf.PositiveEvent); } }, MenuOptionPriority.Default, null, null, 0f, null, null)); } showFloatMenuMindsStored(delegate(Pawn p) { stopMindActivities(p); assistingMinds.Add(p); Messages.Message("ATPP_ProcessAssistOK".Translate(p.LabelShortCap), parent, MessageTypeDefOf.PositiveEvent); }, false, false, false, false, optsAdd, true); }, MenuOptionPriority.Default, null, null, 0f, null, null)); FloatMenu floatMenuMap = new FloatMenu(opts); Find.WindowStack.Add(floatMenuMap); } }); yield return(new Command_Action { icon = Tex.processMigrate, defaultLabel = "ATPP_ProcessMigrate".Translate(), defaultDesc = "ATPP_ProcessMigrateDesc".Translate(), action = delegate() { showFloatMenuMindsStored(delegate(Pawn p) { Utils.ShowFloatMenuSkyCloudCores(delegate(Building core) { CompSurrogateOwner cso = p.ATCompSurrogateOwner; stopMindActivities(p); cso.startMigration(core); }, (Building)parent); }, false, false, false, false); } }); yield return(new Command_Action { icon = Tex.processSkillUp, defaultLabel = "ATPP_Skills".Translate(), defaultDesc = "ATPP_SkillsDesc".Translate(), action = delegate() { showFloatMenuMindsStored(delegate(Pawn p) { Find.WindowStack.Add(new Dialog_SkillUp(p, true)); }, false, false, false, true); } }); yield return(new Command_Action { icon = Tex.AndroidToControlTarget, defaultLabel = "ATPP_AndroidToControlTarget".Translate(), defaultDesc = "ATPP_AndroidToControlTargetDesc".Translate(), action = delegate() { showFloatMenuMindsStored(delegate(Pawn p) { //Listing map de destination List <FloatMenuOption> opts = new List <FloatMenuOption>(); string lib = ""; foreach (var m in Find.Maps) { if (m == Find.CurrentMap) { lib = "ATPP_ThisCurrentMap".Translate(m.Parent.Label); } else { lib = m.Parent.Label; } opts.Add(new FloatMenuOption(lib, delegate { Current.Game.CurrentMap = m; Designator_AndroidToControl x = new Designator_AndroidToControl(p, true); Find.DesignatorManager.Select(x); }, MenuOptionPriority.Default, null, null, 0f, null, null)); } if (opts.Count != 0) { if (opts.Count == 1) { Designator_AndroidToControl x = new Designator_AndroidToControl(p, true); Find.DesignatorManager.Select(x); } else { FloatMenu floatMenuMap = new FloatMenu(opts); Find.WindowStack.Add(floatMenuMap); } } }, true, true, false, false, null, true); } }); if (Utils.isThereNotControlledSurrogateInCaravan()) { //Si drones SX no controllés dans une caravane yield return(new Command_Action { icon = Tex.AndroidToControlTargetRecovery, defaultLabel = "ATPP_AndroidToControlTargetRecoverCaravan".Translate(), defaultDesc = "ATPP_AndroidToControlTargetRecoverCaravanDesc".Translate(), action = delegate() { showFloatMenuMindsStored(delegate(Pawn p) { Utils.ShowFloatMenuNotCOntrolledSurrogateInCaravan(p, delegate(Pawn sSX) { CompSurrogateOwner cso = p.ATCompSurrogateOwner; if (cso == null) { return; } if (!Utils.GCATPP.isConnectedToSkyMind(sSX)) { //Tentative connection au skymind if (!Utils.GCATPP.connectUser(sSX)) { return; } } cso.setControlledSurrogate(sSX); }); }, true, true, false, false, null, true); } }); } if (getNbMindsConnectedToSurrogate() != 0 || controlledTurrets.Count() != 0) { yield return(new Command_Action { icon = Tex.AndroidToControlTargetDisconnect, defaultLabel = "ATPP_AndroidToControlTargetDisconnect".Translate(), defaultDesc = "ATPP_AndroidToControlTargetDisconnectDesc".Translate(), action = delegate() { List <FloatMenuOption> opts = new List <FloatMenuOption>(); opts.Add(new FloatMenuOption("ATPP_ProcessDisconnectAllSurrogates".Translate(), delegate { disconnectAllSurrogates(); disconnectAllRemotelyControlledTurrets(); Utils.playVocal("soundDefSkyCloudAllMindDisconnected"); }, MenuOptionPriority.Default, null, null, 0f, null, null)); showFloatMenuMindsStored(delegate(Pawn p) { CompSurrogateOwner cso = p.ATCompSurrogateOwner; if (cso != null && cso.isThereSX()) { cso.disconnectControlledSurrogate(null); } stopRemotelyControlledTurret(p); }, false, false, true, false, opts); } }); } yield break; }