public static RTSUnitData ParseData(Dictionary <string, ReflectedScript> controllers, FileInfo infoFile, int index) { // Check File Existence if (infoFile == null || !infoFile.Exists) { return(null); } // Read The Entire File string mStr; using (FileStream fs = File.OpenRead(infoFile.FullName)) { StreamReader s = new StreamReader(fs); mStr = s.ReadToEnd(); } // Set Environment Variables ZXParser.SetEnvironment("FILEROOTDIR", infoFile.Directory.FullName); ZXParser.SetEnvironment("DICTSCRIPTS", controllers); // Read Data RTSUnitData data = new RTSUnitData(index); ZXParser.ParseInto(mStr, data); data.InfoFile = PathHelper.GetRelativePath(infoFile.FullName); return(data); }
private void LoadTeamVisuals(GameState state, int ti) { RTSTeam team = state.teams[ti]; // Create Unit Graphics var ums = ti == teamIndex ? FriendlyUnitModels : NonFriendlyUnitModels; for (int i = 0; i < team.Race.ActiveUnits.Length; i++) { int ui = team.Race.ActiveUnits[i].Index; RTSUnitData uData = team.Race.Units[ui]; RTSUnitModel uModel = RTSUnitDataParser.ParseModel(this, new FileInfo(uData.InfoFile), team.Race); uModel.Hook(this, state, ti, team.Race.ActiveUnits[i].Index); uModel.ColorScheme = team.ColorScheme; ums.Add(uModel); } // Create Building Graphics var bms = ti == teamIndex ? FriendlyBuildingModels : NonFriendlyBuildingModels; for (int i = 0; i < team.Race.ActiveBuildings.Length; i++) { RTSBuildingModel bModel = RTSBuildingDataParser.ParseModel(this, new FileInfo(team.Race.ActiveBuildings[i].InfoFile), team.Race); bModel.Hook(this, state, ti, teamIndex, team.Race.ActiveBuildings[i].Index); bModel.ColorScheme = team.ColorScheme; bms.Add(bModel); } }
private void UnitLoader(object _fi) { FileInfo fi = _fi as FileInfo; GameState state = new GameState(); state.teams[0] = new RTSTeam(0, RTSInputType.None); state.UpdateActiveTeams(); RTSUnitData _unitData = RTSUnitDataParser.ParseData(GameEngine.Scripts, fi, 0); state.teams[0].Race.Units[0] = _unitData; state.teams[0].Race.UpdateActiveUnits(); RTSUnitModel _unitModel = RTSUnitDataParser.ParseModel(renderer, fi, state.teams[0].Race); _unitModel.Hook(renderer, state, 0, 0); RTSUnit _unit = new RTSUnit(state.teams[0], state.teams[0].Race.Units[0], Vector2.Zero); _unit.Height = 0; _unitModel.OnUnitSpawn(_unit); // Create The Full Animation Loop _unit.AnimationController = new BlankAnimController(0, (_unitModel.AnimationTexture.Height / 3) - 1, 30f); // Make Sure To Only Modify At A Specific Point lock (drawLock) { // Check Previous Dispose if (unit != null) { DisposeUnit(); } // Now Set Data unitData = _unitData; unit = _unit; unitModel = _unitModel; } }
private void DisposeUnit() { unit = null; unitData = null; unitModel = null; }