public void evalInstruction(InstructionExpression instr) { if (instr is ValueExpression) { valueExp = (ValueExpression)instr; if (valueExp.type == ObjectType.intType) { variables.Add(valueExp.name, new ObjectExpression(valueExp.type, 0)); } else if (valueExp.type == ObjectType.booleanType) { variables.Add(valueExp.name, new ObjectExpression(valueExp.type, false)); } else if (valueExp.type == ObjectType.stringType) { variables.Add(valueExp.name, new ObjectExpression(valueExp.type, "")); } if (valueExp.value != null) { variables[valueExp.name] = new ObjectExpression(valueExp.type, evalSimpleExpression(valueExp.value).value); } return; } else if (instr is AssignExpression) { assignExp = (AssignExpression)instr; variables[assignExp.name] = evalSimpleExpression(assignExp.value); return; } else if (instr is OpenMsgDialogInstruction) { gScreen.msgBox.openBox(); return; } else if (instr is MsgDisplayInstruction) { msgExp = (MsgDisplayInstruction)instr; o1 = evalSimpleExpression(msgExp.msg); if (o1.type != ObjectType.stringType) { return; } gScreen.msgBox.setText((string)o1.value); return; } else if (instr is NextMsgDialogInstruction) { shouldEvalSeq = false; gScreen.msgBox.showNextButton(); return; } else if (instr is CloseMsgDialogInstruction) { shouldEvalSeq = false; gScreen.msgBox.showCloseButton(); return; } else if (instr is SwitchCharacterInstruction) { try { gScreen.msgBox.switchCharacter(IrisData.characters[((SwitchCharacterInstruction)instr).character.name]); } catch (Exception e) { return; } return; } else if (instr is RemoveCharacter) { gScreen.msgBox.removeCharacter(); return; } else if (instr is SetVariableInstruction) { setExp = (SetVariableInstruction)instr; /*if (!playerVariables.ContainsKey(setExp.variable.name)) { playerVariables.Add(setExp.variable.name, -1); } playerVariables[setExp.variable.name] = (int)(evalSimpleExpression(setExp.value).value);*/ IrisData.setPlayerVariable(setExp.variable.name, (int)(evalSimpleExpression(setExp.value).value)); return; } else if (instr is InputInstruction) { inputExp = (InputInstruction)instr; o1 = variables[inputExp.name]; shouldEvalSeq = false; if (o1.type == ObjectType.intType) { gScreen.iBox.openBox(InputBox.InputType.INT_INPUT); lastInstr = inputExp; } else if (o1.type == ObjectType.stringType) { gScreen.iBox.openBox(InputBox.InputType.STRING_INPUT); lastInstr = inputExp; } return; } else if (instr is MenuInstruction) { menuExp = (MenuInstruction)instr; shouldEvalSeq = false; gScreen.menBox.setChoices(((MenuInstruction)instr).choices); gScreen.menBox.openMenu(); lastInstr = menuExp; return; } else if (instr is PlayMediaInstruction) { playExp = (PlayMediaInstruction)instr; /*if (!IrisData.sounds.ContainsKey(playExp.name)) { return; }*/ //else if(IrisData. try { gScreen.playMedia(IrisData.sounds[playExp.name]); } catch (Exception e) { return; } return; } else if (instr is StopMediaInstruction) { gScreen.stopMedia(); return; } else if (instr is ShowImageInstruction) { showExp = (ShowImageInstruction)instr; if (showExp.image is VariableExpression) { img = IrisData.images[((VariableExpression)showExp.image).name]; } else { memberExp = (MemberAccessExpression)showExp.image; charac = IrisData.characters[memberExp.name]; img = charac.getImage(memberExp.field); } gScreen.showImage(img, showExp.position); return; } else if (instr is SetBackgroundInstruction) { bgdInstr = (SetBackgroundInstruction)instr; try { gScreen.setBackground(IrisData.backgrounds[bgdInstr.image.name]); } catch (Exception e) { return; } return; } else if (instr is CleanBackgroundInstruction) { gScreen.clearBackground(); return; } else if (instr is CleanForegroundInstruction) { gScreen.clearForeGround(); return; } else if (instr is GotoInstruction) { gotoExp = (GotoInstruction)instr; npcExp = gotoExp.npc; evalExpression(IrisData.npcs[npcExp.npc].labels[npcExp.label]); return; } }
public AssignExpression parseAssignExpression() { AssignExpression assignExp = new AssignExpression(); string varName, opName; SimpleExpression value; Token.TokenValue op; if (currentTokenEquals(Token.TokenValue.VALUE_IDENTIFIER)) { varName = currentToken.stringValue; assignExp.name = varName; nextToken(); switch (currentToken.type) { case Token.TokenValue.EQ: nextToken(); assignExp.value = parseSimpleExpression(); return assignExp; case Token.TokenValue.PLUSEQ: case Token.TokenValue.MINUSEQ: case Token.TokenValue.TIMESEQ: case Token.TokenValue.DIVEQ: op = currentToken.type; nextToken(); value = parseSimpleExpression(); opName = op.ToString(); assignExp.value = new BinaryOperatorExpression( (Token.TokenValue)Enum.Parse(typeof(Token.TokenValue), opName.Substring(0, opName.Length - 2)), new VariableExpression(assignExp.name), value ); return assignExp; case Token.TokenValue.PLUSPLUS: nextToken(); assignExp.value = new BinaryOperatorExpression( Token.TokenValue.PLUS, new VariableExpression(assignExp.name), new LiteralExpression(new Token(Token.TokenValue.INT, 1)) ); return assignExp; case Token.TokenValue.MINUSMINUS: nextToken(); assignExp.value = new BinaryOperatorExpression( Token.TokenValue.MINUS, new VariableExpression(assignExp.name), new LiteralExpression(new Token(Token.TokenValue.INT, 1)) ); return assignExp; case Token.TokenValue.TIMESTIMES: nextToken(); assignExp.value = new BinaryOperatorExpression( Token.TokenValue.TIMES, new VariableExpression(assignExp.name), new VariableExpression(assignExp.name) ); return assignExp; } } throw new SyntaxError(lineNumber, colNumber, Token.TokenValue.VALUE_IDENTIFIER); }