public void InvokeArithmeticExpression() { var f = ExpressionCompiler.CompileExpression <CountExpression>("1 + q + p / 200"); var result = f(350, 1, 0.3, 0.6); Assert.AreEqual(3, result); }
public void InvokeConditionalExpression() { var f = ExpressionCompiler.CompileExpression <QualityExpression>("(r1 > 0.9)? 2 : (r2 > 0.2)? 1 : 0"); var result = f(350, 1, 0.3, 0.6); Assert.AreEqual(1, result); }
public void InvokeIntExpression() { var f = ExpressionCompiler.CompileExpression <PriceExpression>("100"); var result = f(1, 350); Assert.AreEqual(100, result); }
protected virtual int?GetOutputPrice(OutputItem outputItem, Object dropInItem) { var priceExpression = outputItem?.Price ?? Output.Price; var calculatePrice = ExpressionCompiler.CompileExpression <PriceExpression>(priceExpression); return(calculatePrice?.Invoke(dropInItem.price, dropInItem.quality)); }
protected virtual int GetOutputCount(OutputItem outputItem, Object dropInItem) { var countExpression = outputItem?.Count ?? Output.Count; var calculateCount = ExpressionCompiler.CompileExpression <CountExpression>(countExpression); if (calculateCount == null) { return(1); } var random = GetRandom(); return(calculateCount(dropInItem.Price, dropInItem.quality, random.NextDouble(), random.NextDouble())); }
protected virtual int GetOutputQuality(OutputItem outputItem, Object dropInItem) { var qualityExpression = outputItem?.Quality ?? Output.Quality; var calculateQuality = ExpressionCompiler.CompileExpression <QualityExpression>(qualityExpression); if (calculateQuality == null) { return(0); } var random = GetRandom(); return(calculateQuality(dropInItem.Price, dropInItem.quality, random.NextDouble(), random.NextDouble())); }
private void PrecompileExpressions() { var compilingTask = Task.Run(() => { try { var machineOutputs = _machines.Select(m => m.Output).Concat(Config.MachineOverrides.Select(m => m.Output)); foreach (var machineOutput in machineOutputs) { if (machineOutput == null) { continue; } ExpressionCompiler.CompileExpression <CountExpression>(machineOutput.Count); ExpressionCompiler.CompileExpression <QualityExpression>(machineOutput.Quality); ExpressionCompiler.CompileExpression <PriceExpression>(machineOutput.Price); foreach (var outputItem in machineOutput.Items.Values) { if (outputItem == null) { continue; } ExpressionCompiler.CompileExpression <CountExpression>(outputItem.Count); ExpressionCompiler.CompileExpression <QualityExpression>(outputItem.Quality); ExpressionCompiler.CompileExpression <PriceExpression>(outputItem.Price); } } } catch (Exception e) { Log.Error($"Fail during precompiling expressions! Cause: {e}"); throw; } }); PlayerEvents.LoadedGame += (s, e) => compilingTask?.Wait(); }