/// <summary> /// Factories the specified act. /// </summary> /// <param name="act">The act.</param> /// <param name="listOfParams">The list of params.</param> /// <returns>Missle object</returns> internal static Missle Factory(FactoryAct act, params object[] listOfParams) { try { Missle result; switch (act) { case FactoryAct.Create: result = new Missle((int)listOfParams[0], (int)listOfParams[1], (eTowerType)listOfParams[2], (Color)listOfParams[3], (Color)listOfParams[4], (eModificatorName)listOfParams[5], new PointF(Convert.ToSingle(listOfParams[6]), Convert.ToSingle(listOfParams[7])) /*, (int)listOfParams[8]*//*Progress*/); break; case FactoryAct.Load: BinaryReader reader = (BinaryReader)listOfParams[0]; // ReSharper disable RedundantArgumentName result = new Missle(aimID: reader.ReadInt32(), damadge: reader.ReadInt32(), missleType: (eTowerType)reader.ReadInt32(), misslePenColor: Color.FromArgb(reader.ReadByte(), reader.ReadByte(), reader.ReadByte()), missleBrushColor: Color.FromArgb(reader.ReadByte(), reader.ReadByte(), reader.ReadByte()), modificator: (eModificatorName)reader.ReadInt32(), position: new PointF(reader.ReadSingle(), reader.ReadSingle()), progress: reader.ReadInt32()); // ReSharper restore RedundantArgumentName break; default: throw new ArgumentOutOfRangeException("act"); } return result; } catch (Exception exc) { //TODO add NLog logging throw; } }
/// <summary> /// Factories the specified act. /// </summary> /// <param name="act">The act.</param> /// <param name="Params">The params.</param> /// <param name="arrayPos">The array pos.</param> /// <param name="confHash">The conf hash.</param> /// <param name="scaling">The scaling.</param> /// <param name="loadStream">The load stream.</param> /// <returns></returns> internal static Tower Factory(FactoryAct act, TowerParam Params, Point arrayPos, string confHash, float scaling = 1F, BinaryReader loadStream = null) { try { Tower result = new Tower(Params, arrayPos, confHash, scaling); switch (act) { case FactoryAct.Create: break; case FactoryAct.Load: result.Load(loadStream); break; default: throw new ArgumentOutOfRangeException("act"); } return result; } catch (Exception exc) { //TODO add NLog throw; } }
/// <summary> /// Factories the game objects /// </summary> /// <param name="filename">The filename of game configuration or save file</param> /// <param name="act">What factory should to do: Create or Load</param> /// <param name="graphicObject">IGraphic object </param> /// <returns>Game object or null if error</returns> public static Game Factory(string filename, FactoryAct act, IGraphic graphicObject) { Game result; try { switch (act) { case FactoryAct.Create: result = new Game(filename, graphicObject); break; case FactoryAct.Load: using (BinaryReader loadGameInfo = new BinaryReader(new FileStream(Environment.CurrentDirectory + "\\Data\\SavedGames\\" + filename + ".tdsg", FileMode.Open, FileAccess.Read))) { result = new Game(loadGameInfo.ReadString(), graphicObject); result.Load(loadGameInfo); } break; default: throw new ArgumentOutOfRangeException("act"); } } catch (Exception exc) { MessageBox.Show("Game files damadged: " + exc.Message + "\n" + exc.StackTrace, "Fatal error"); throw; } return result; }