private void GenerateCacheForMethod(MethodInfo method, DebugActionAttribute attribute) { if (attribute.IsAllowedInCurrentGameState) { string text = string.IsNullOrEmpty(attribute.name) ? GenText.SplitCamelCase(method.Name) : attribute.name; if (attribute.actionType == DebugActionType.ToolMap || attribute.actionType == DebugActionType.ToolMapForPawns || attribute.actionType == DebugActionType.ToolWorld) { text = "T: " + text; } string category = attribute.category; DebugActionOption debugActionOption = default(DebugActionOption); debugActionOption.label = text; debugActionOption.category = category; debugActionOption.actionType = attribute.actionType; DebugActionOption item = debugActionOption; if (attribute.actionType == DebugActionType.ToolMapForPawns) { item.pawnAction = (Delegate.CreateDelegate(typeof(Action <Pawn>), method) as Action <Pawn>); } else { item.action = (Delegate.CreateDelegate(typeof(Action), method) as Action); } debugActions.Add(item); } }
protected override void DoListingItems() { base.DoListingItems(); int highlightedIndex = HighlightedIndex; string b = null; for (int i = 0; i < debugActions.Count; i++) { DebugActionOption debugActionOption = debugActions[i]; bool highlight = highlightedIndex == i; if (debugActionOption.category != b) { DoGap(); DoLabel(debugActionOption.category); b = debugActionOption.category; } Log.openOnMessage = true; try { switch (debugActionOption.actionType) { case DebugActionType.Action: DebugAction_NewTmp(debugActionOption.label, debugActionOption.action, highlight); break; case DebugActionType.ToolMap: DebugToolMap_NewTmp(debugActionOption.label, debugActionOption.action, highlight); break; case DebugActionType.ToolMapForPawns: DebugToolMapForPawns_NewTmp(debugActionOption.label, debugActionOption.pawnAction, highlight); break; case DebugActionType.ToolWorld: DebugToolWorld_NewTmp(debugActionOption.label, debugActionOption.action, highlight); break; } } finally { Log.openOnMessage = false; } } }
private void DebugActionSelected(int index) { DebugActionOption element = debugActions[index]; switch (element.actionType) { case DebugActionType.Action: element.action(); break; case DebugActionType.ToolMap: DebugTools.curTool = new DebugTool(element.label, element.action); break; case DebugActionType.ToolMapForPawns: DebugTools.curTool = new DebugTool(element.label, delegate { if (UI.MouseCell().InBounds(Find.CurrentMap)) { foreach (Pawn item in (from t in Find.CurrentMap.thingGrid.ThingsAt(UI.MouseCell()) where t is Pawn select t).Cast <Pawn>().ToList()) { element.pawnAction(item); } } }); break; case DebugActionType.ToolWorld: if (WorldRendererUtility.WorldRenderedNow) { DebugTools.curTool = new DebugTool(element.label, element.action); } break; } }