public override void Initialise(MHParseNode p, MHEngine engine) { base.Initialise(p, engine); MHParseNode pMovements = p.GetNamedArg(ASN1Codes.C_MOVEMENT_TABLE); if (pMovements != null) { for (int i = 0; i < pMovements.GetArgCount(); i++) { MHMovement pMove = new MHMovement(); m_MovementTable.Append(pMove); pMove.Initialise(pMovements.GetArgN(i), engine); } } MHParseNode pTokenGrp = p.GetNamedArg(ASN1Codes.C_TOKEN_GROUP_ITEMS); if (pTokenGrp != null) { for (int i = 0; i < pTokenGrp.GetArgCount(); i++) { MHTokenGroupItem pToken = new MHTokenGroupItem(); m_TokenGrpItems.Append(pToken); pToken.Initialise(pTokenGrp.GetArgN(i), engine); } } MHParseNode pNoToken = p.GetNamedArg(ASN1Codes.C_NO_TOKEN_ACTION_SLOTS); if (pNoToken != null) { for (int i = 0; i < pNoToken.GetArgCount(); i++) { MHParseNode pAct = pNoToken.GetArgN(i); MHActionSequence pActions = new MHActionSequence(); m_NoTokenActionSlots.Append(pActions); // The action slot entry may be NULL. if (pAct.NodeType != MHParseNode.PNNull) { pActions.Initialise(pAct, engine); } } } }
public override void CallActionSlot(int n, MHEngine engine) { if (m_nTokenPosition == 0) { // No slot has the token. if (n > 0 && n <= m_NoTokenActionSlots.Size) { engine.AddActions(m_NoTokenActionSlots.GetAt(n - 1)); } } else { if (m_nTokenPosition > 0 && m_nTokenPosition <= m_TokenGrpItems.Size) { MHTokenGroupItem pGroup = m_TokenGrpItems.GetAt(m_nTokenPosition - 1); if (n > 0 && n <= pGroup.ActionSlots.Size) { engine.AddActions(pGroup.ActionSlots.GetAt(n - 1)); } } } }