public IEnumerator <int> GetEnumerator() { Type wizardNodeType = typeof(WizardNode); FieldInfo mainNodeField = wizardNodeType.GetField("mainWizard", BindingFlags.NonPublic | BindingFlags.Instance); FieldInfo firstImageWizardField = wizardNodeType.GetField("firstImageWizard", BindingFlags.NonPublic | BindingFlags.Instance); FieldInfo secondImageWizardField = wizardNodeType.GetField("secondImageWizard", BindingFlags.NonPublic | BindingFlags.Instance); FieldInfo idWizardNodeField = wizardNodeType.GetField("id", BindingFlags.NonPublic | BindingFlags.Instance); Type wizardType = typeof(Wizard); FieldInfo idWizardField = wizardType.GetField("id", BindingFlags.NonPublic | BindingFlags.Instance); for (int i = 0; i < (this.nodeList.Count / 2); i++) { WizardNode current = nodeList[i]; int idCurrentNode = (int)idWizardNodeField.GetValue(current); IWizard mainWizardCurrent = (IWizard)mainNodeField.GetValue(current); int idParentWizard = (int)idWizardField.GetValue(mainWizardCurrent); WizardNode firstImageWizardCurrent = (WizardNode)firstImageWizardField.GetValue(current); int firstChildWizard = (int)idWizardNodeField.GetValue(firstImageWizardCurrent); WizardNode secondImageWizardCurrent = (WizardNode)secondImageWizardField.GetValue(current); int secondChildWizard = (int)idWizardNodeField.GetValue(secondImageWizardCurrent); if (i == 0) { yield return(idParentWizard); } yield return(firstChildWizard); yield return(secondChildWizard); } }
private void SetSecondWizardNodeLeaf(WizardNode nodeRoot, WizardNode nodeLeaf) { Type wizardNodeType = typeof(WizardNode); FieldInfo wizardNodeField = wizardNodeType.GetField("secondImageWizard", BindingFlags.NonPublic | BindingFlags.Instance); wizardNodeField.SetValue(nodeRoot, nodeLeaf); }
private WizardNode CreatWizardNode(IWizard wizard) { Type wizardNodeType = typeof(WizardNode); ConstructorInfo nodeCostructor = wizardNodeType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(IWizard) }, null); WizardNode wizardNode = (WizardNode)nodeCostructor.Invoke(new object[] { wizard }); FieldInfo idWizardNodeField = wizardNodeType.GetField("id", BindingFlags.NonPublic | BindingFlags.Instance); idWizardNodeField.SetValue(wizardNode, count); this.nodeList.Add(wizardNode); return(wizardNode); }
private void SetWizardLeaf(WizardNode node) { IWizard wizard1 = MakeWizardWithID(node); WizardNode wizardNodeFirstLeaf = CreatWizardNode(wizard1); SetFirstWizardNodeLeaf(node, wizardNodeFirstLeaf); IWizard wizard2 = MakeWizardWithID(node); WizardNode wizardNodeSecondLeaf = CreatWizardNode(wizard2); SetSecondWizardNodeLeaf(node, wizardNodeSecondLeaf); }
private IWizard MakeWizardWithID(WizardNode rootNode) { IWizard wizard = new BasicWizard(); Type wizardType = typeof(Wizard); FieldInfo idField = wizardType.GetField("id", BindingFlags.NonPublic | BindingFlags.Instance); idField.SetValue(wizard, ++count); Type wizardNodeType = typeof(WizardNode); IWizard rootWizard = (IWizard)wizardNodeType.GetField("mainWizard", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(rootNode); FieldInfo magicPowerField = wizardType.GetField("magicPower", BindingFlags.NonPublic | BindingFlags.Instance); magicPowerField.SetValue(wizard, (int)magicPowerField.GetValue(rootWizard) / 2); return(wizard); }
public WizardTree(IWizard root) { this.nodeList = new List <WizardNode>(); this.root = CreatWizardNode(root); }