C# library for loading, saving and modifying games for Fancade
The packages can be installed via NuGet:
.nupkg files and release notes are located in the Releases tab
usingBitcoderCZ.Fancade;usingBitcoderCZ.Fancade.Raw;// Load gameGamegame;using(FileStreamfs=File.OpenRead("game.fcg")){game=Game.LoadCompressed(fs);}// Add a levelPrefablevel=Prefab.CreateLevel(RawGame.CurrentNumbStockPrefabs,"Level 1");level.Blocks.SetBlock(newint3(0,0,0),1);game.Prefabs.AddPrefab(level);// Save gameusing(FileStreamfs=File.OpenWrite("game.fcg")){game.SaveCompressed(fs);}usingBitcoderCZ.Fancade;usingBitcoderCZ.Fancade.Editing;usingBitcoderCZ.Fancade.Editing.Scripting;usingBitcoderCZ.Fancade.Editing.Scripting.Builders;usingBitcoderCZ.Fancade.Editing.Scripting.Placers;usingBitcoderCZ.Fancade.Editing.Scripting.Utils;usingMathUtils.Vectors;usingstaticBitcoderCZ.Fancade.Editing.Scripting.CodeWriter.Expressions;// calculate Fibonacci Sequencevarbuilder=newGameFileBlockBuilder(null,"Level 1",PrefabType.Level);varplacer=newGroundCodePlacer(builder);// TowerCodePlacer produces more compact, but less readable codevarwriter=newCodeWriter(placer,newTerminalConnector(builder.Connect));Variablea=newVariable("a",SignalType.Float);Variableb=newVariable("b",SignalType.Float);Variablec=newVariable("c",SignalType.Float);Variableiter=newVariable("iter",SignalType.Float);floatmaxIter=10;using(writer.StatementBlock()){writer.If(LessThan(Variable(iter),Number(maxIter)), writer =>{writer.PlaySensor(writer =>{writer.SetVariable(a,Number(0f));writer.SetVariable(b,Number(1f));writer.Inspect(Variable(a));writer.Inspect(Variable(b));});writer.SetVariable(c,AddNumbers(Variable(a),Variable(b)));InspectResult();writer.SetVariable(a,Variable(b));writer.SetVariable(b,Variable(c));writer.IncrementNumber(Variable(iter));},null);}writer.Flush();// required if using goto or scoped CodePlacerusing(FileStreamfs=File.OpenWrite("game.fcg")){builder.Build(int3.Zero).SaveCompressed(fs);}voidInspectResult(){writer.Inspect(Variable(c));}