private bool ParseRegisterEntry(string name, idScriptParser parser) { string work = name.ToLower(); idWindowVariable var = GetVariableByName(work, false); if(var != null) { RegisterType regType; // check builtins first if(_builtInVariables.TryGetValue(work, out regType) == true) { _regList.AddRegister(work, regType, parser, this, var); return true; } } // not predefined so just read the next token and add it to the state idToken token; if((token = parser.ReadToken()) != null) { if(var != null) { var.Set(token.ToString()); return true; } switch(token.Type) { case TokenType.Number: if((token.SubType & TokenSubType.Integer) == TokenSubType.Integer) { var = new idWinInteger(work); var.Set(token.ToString()); } else if((token.SubType & TokenSubType.Float) == TokenSubType.Float) { var = new idWinFloat(work); var.Set(token.ToString()); } else { var = new idWinString(work); var.Set(token.ToString()); } _definedVariables.Add(var); break; default: var = new idWinString(work); var.Set(token.ToString()); _definedVariables.Add(var); break; } } return true; }
private static void Script_Transition(idWindow window, List <idWinGuiScript> source) { // transitions always affect rect or vec4 vars if (source.Count >= 4) { idWinRectangle rect = null; idWinVector4 vec4 = source[0].Variable as idWinVector4; // // added float variable idWinFloat val = null; // if (vec4 == null) { rect = source[0].Variable as idWinRectangle; // // added float variable if (rect == null) { val = source[0].Variable as idWinFloat; } // } idWinVector4 from = source[1].Variable as idWinVector4; idWinVector4 to = source[2].Variable as idWinVector4; idWinString timeStr = source[3].Variable as idWinString; // // added float variable if (((vec4 == null) && (rect == null) && (val == null)) && (from != null) && (to != null) && (timeStr != null)) { idConsole.Warning("Bad transition in gui {0} in window {1}", window.UserInterface.SourceFile, window.Name); } else { int time; int.TryParse(timeStr.ToString(), out time); float accel = 0.0f; float decel = 0.0f; if (source.Count > 4) { idWinString accelStr = source[4].Variable as idWinString; idWinString decelStr = source[5].Variable as idWinString; float.TryParse(accelStr.ToString(), out accel); float.TryParse(decelStr.ToString(), out decel); } if (vec4 != null) { vec4.Evaluate = false; window.AddTransition(vec4, from, to, time, accel, decel); } else if (val != null) { val.Evaluate = false; window.AddTransition(val, from, to, time, accel, decel); } else { rect.Evaluate = false; window.AddTransition(rect, from, to, time, accel, decel); } window.StartTransition(); } } }
public bool Parse(idScriptParser parser, bool rebuild) { if(this.Disposed == true) { throw new ObjectDisposedException(this.GetType().Name); } if(rebuild == true) { CleanUp(); } _timeLineEvents.Clear(); _namedEvents.Clear(); _transitions.Clear(); idToken token2; idToken token = parser.ExpectTokenType(TokenType.Name, 0); DrawWindow drawWindow; SetInitialState(token.ToString()); parser.ExpectTokenString("{"); token = parser.ExpectAnyToken(); bool ret = true; while(token.ToString() != "}") { string tokenLower = token.ToString().ToLower(); // track what was parsed so we can maintain it for the guieditor parser.SetMarker(); if((tokenLower == "windowdef") || (tokenLower == "animationdef")) { if(tokenLower == "animationdef") { _visible.Set(false); _rect.Set(new idRectangle(0, 0, 0, 0)); } token = parser.ExpectTokenType(TokenType.Name, 0); token2 = token; parser.UnreadToken(token); drawWindow = FindChildByName(token2.ToString()); if((drawWindow != null) && (drawWindow.Window != null)) { SaveExpressionParseState(); drawWindow.Window.Parse(parser, rebuild); RestoreExpressionParseState(); } else { idWindow window = new idWindow(_gui, _context); SaveExpressionParseState(); window.Parse(parser, rebuild); RestoreExpressionParseState(); window.Parent = this; drawWindow = new DrawWindow(); if(window.IsSimple == true) { drawWindow.Simple = new idSimpleWindow(window); _drawWindows.Add(drawWindow); } else { AddChild(window); SetFocus(window, false); drawWindow.Window = window; _drawWindows.Add(drawWindow); } } } else if(tokenLower == "editdef") { SaveExpressionParseState(); idEditWindow window = new idEditWindow(_context, _gui); window.Parse(parser, rebuild); RestoreExpressionParseState(); AddChild(window); window.Parent = this; drawWindow = new DrawWindow(); drawWindow.Simple = null; drawWindow.Window = window; _drawWindows.Add(drawWindow); } else if(tokenLower == "choicedef") { SaveExpressionParseState(); idChoiceWindow window = new idChoiceWindow(_context, _gui); window.Parse(parser, rebuild); RestoreExpressionParseState(); AddChild(window); window.Parent = this; drawWindow = new DrawWindow(); drawWindow.Simple = null; drawWindow.Window = window; _drawWindows.Add(drawWindow); } else if(tokenLower == "sliderdef") { SaveExpressionParseState(); idSliderWindow window = new idSliderWindow(_context, _gui); window.Parse(parser, rebuild); RestoreExpressionParseState(); AddChild(window); window.Parent = this; drawWindow = new DrawWindow(); drawWindow.Simple = null; drawWindow.Window = window; _drawWindows.Add(drawWindow); } else if(tokenLower == "markerdef") { idConsole.Warning("TODO: markerDef"); /*idMarkerWindow *win = new idMarkerWindow(dc, gui); SaveExpressionParseState(); win->Parse(src, rebuild); RestoreExpressionParseState(); AddChild(win); win->SetParent(this); dwt.simp = NULL; dwt.win = win; drawWindows.Append(dwt);*/ } else if(tokenLower == "binddef") { SaveExpressionParseState(); idBindWindow window = new idBindWindow(_context, _gui); window.Parse(parser, rebuild); RestoreExpressionParseState(); AddChild(window); window.Parent = this; drawWindow = new DrawWindow(); drawWindow.Simple = null; drawWindow.Window = window; _drawWindows.Add(drawWindow); } else if(tokenLower == "listdef") { SaveExpressionParseState(); idListWindow window = new idListWindow(_context, _gui); window.Parse(parser, rebuild); RestoreExpressionParseState(); AddChild(window); window.Parent = this; drawWindow = new DrawWindow(); drawWindow.Simple = null; drawWindow.Window = window; _drawWindows.Add(drawWindow); } else if(tokenLower == "fielddef") { idConsole.Warning("TODO: fieldDef"); /*idFieldWindow *win = new idFieldWindow(dc, gui); SaveExpressionParseState(); win->Parse(src, rebuild); RestoreExpressionParseState(); AddChild(win); win->SetParent(this); dwt.simp = NULL; dwt.win = win; drawWindows.Append(dwt);*/ } else if(tokenLower == "renderdef") { SaveExpressionParseState(); idRenderWindow window = new idRenderWindow(_context, _gui); window.Parse(parser, rebuild); RestoreExpressionParseState(); AddChild(window); window.Parent = this; drawWindow = new DrawWindow(); drawWindow.Simple = null; drawWindow.Window = window; _drawWindows.Add(drawWindow); } else if(tokenLower == "gamessddef") { idConsole.Warning("TODO: gameSSDDef"); /*idGameSSDWindow *win = new idGameSSDWindow(dc, gui); SaveExpressionParseState(); win->Parse(src, rebuild); RestoreExpressionParseState(); AddChild(win); win->SetParent(this); dwt.simp = NULL; dwt.win = win; drawWindows.Append(dwt);*/ } else if(tokenLower == "gamebearshootdef") { idConsole.Warning("TODO: gameBearShootDef"); /*idGameBearShootWindow *win = new idGameBearShootWindow(dc, gui); SaveExpressionParseState(); win->Parse(src, rebuild); RestoreExpressionParseState(); AddChild(win); win->SetParent(this); dwt.simp = NULL; dwt.win = win; drawWindows.Append(dwt);*/ } else if(tokenLower == "gamebustoutdef") { idConsole.Warning("TODO: gameBustOutDef"); /*idGameBustOutWindow *win = new idGameBustOutWindow(dc, gui); SaveExpressionParseState(); win->Parse(src, rebuild); RestoreExpressionParseState(); AddChild(win); win->SetParent(this); dwt.simp = NULL; dwt.win = win; drawWindows.Append(dwt);*/ } // // added new onEvent else if(tokenLower == "onnamedevent") { // read the event name if((token = parser.ReadToken()) == null) { parser.Error("Expected event name"); return false; } idNamedEvent ev = new idNamedEvent(token.ToString()); parser.SetMarker(); if(ParseScript(parser, ev.Event) == false) { ret = false; break; } _namedEvents.Add(ev); } else if(tokenLower == "ontime") { idTimeLineEvent ev = new idTimeLineEvent(); if((token = parser.ReadToken()) == null) { parser.Error("Unexpected end of file"); return false; } int tmp; int.TryParse(token.ToString(), out tmp); ev.Time = tmp; // reset the mark since we dont want it to include the time parser.SetMarker(); if(ParseScript(parser, ev.Event) == false) { ret = false; break; } // this is a timeline event ev.Pending = true; _timeLineEvents.Add(ev); } else if(tokenLower == "definefloat") { token = parser.ReadToken(); tokenLower = token.ToString().ToLower(); idWinFloat var = new idWinFloat(tokenLower); _definedVariables.Add(var); // add the float to the editors wrapper dict // Set the marker after the float name parser.SetMarker(); // Read in the float _regList.AddRegister(tokenLower, RegisterType.Float, parser, this, var); } else if(tokenLower == "definevec4") { token = parser.ReadToken(); tokenLower = token.ToString().ToLower(); idWinVector4 var = new idWinVector4(tokenLower); // set the marker so we can determine what was parsed // set the marker after the vec4 name parser.SetMarker(); // FIXME: how about we add the var to the desktop instead of this window so it won't get deleted // when this window is destoyed which even happens during parsing with simple windows ? //definedVars.Append(var); _gui.Desktop._definedVariables.Add(var); _gui.Desktop._regList.AddRegister(tokenLower, RegisterType.Vector4, parser, _gui.Desktop, var); } else if(tokenLower == "float") { token = parser.ReadToken(); tokenLower = token.ToString(); idWinFloat var = new idWinFloat(tokenLower); _definedVariables.Add(var); // add the float to the editors wrapper dict // set the marker to after the float name parser.SetMarker(); // Parse the float _regList.AddRegister(tokenLower, RegisterType.Float, parser, this, var); } else if(ParseScriptEntry(token, parser) == true) { } else if(ParseInternalVariable(token.ToString(), parser) == true) { } else { ParseRegisterEntry(token.ToString(), parser); } if((token = parser.ReadToken()) == null) { parser.Error("Unexpected end of file"); ret = false; break; } } if(ret == true) { EvaluateRegisters(-1, true); } SetupFromState(); PostParse(); return ret; }