public void EndStore(int WorkerID, ResourceTypeIDs ResourceTypeID) { Building building; Stack stack; Worker worker; LogEnter(); worker = AssertExists(() => workerModule.GetWorker(WorkerID), $"WorkerID={WorkerID}"); building = AssertExists(() => buildingModule.GetBuilding(worker.PlanetID, worker.X, worker.Y), $"X={worker.X}, Y={worker.Y}"); Log(LogLevels.Information, $"Get stack (BuildingID={building.BuildingID}, ResourceTypeID={ResourceTypeID})"); stack = Try(() => stackModule.GetStack(building.BuildingID, ResourceTypeID)).OrThrow <PIOInternalErrorException>("Failed to get stack"); Log(LogLevels.Information, $"Adding resource (ResourceTypeID={ResourceTypeID}, Quantity={carriedQuantity})"); if (stack == null) { Try(() => stackModule.InsertStack(building.BuildingID, ResourceTypeID, carriedQuantity)).OrThrow <PIOInternalErrorException>("Failed to insert stack"); } else { stack.Quantity += carriedQuantity; Try(() => stackModule.UpdateStack(stack.StackID, stack.Quantity)).OrThrow <PIOInternalErrorException>("Failed to update stack"); } }
public int GetStackQuantity(int BuildingID, ResourceTypeIDs ResourceTypeID) { if (ThrowException) { throw new PIODataException("UnitTestException", null, 1, "UnitTest", "UnitTest"); } return(3); }
public Stack FindStack(int PlanetID, ResourceTypeIDs ResourceTypeID) { if (throwException) { throw new PIODataException("UnitTestException", null, 1, "UnitTest", "UnitTest"); } return(items.FirstOrDefault(item => item.ResourceTypeID == ResourceTypeID)); }
public Stack GetStack(int BuildingID, ResourceTypeIDs ResourceTypeID) { if (throwException) { throw new PIODataException("UnitTestException", null, 1, "UnitTest", "UnitTest"); } return(items.FirstOrDefault(item => (item.BuildingID == BuildingID) && (item.ResourceTypeID == ResourceTypeID))); }
public Stack GetStack(int BuildingID, ResourceTypeIDs ResourceTypeID) { ISelect query; LogEnter(); Log(LogLevels.Information, $"Querying Stack table (BuildingID={BuildingID}, ResourceTypeID={ResourceTypeID})"); query = new Select(StackTable.StackID, StackTable.BuildingID, StackTable.ResourceTypeID, StackTable.Quantity).From(PIODB.StackTable).Where(new AndFilter(StackTable.BuildingID.IsEqualTo(BuildingID), StackTable.ResourceTypeID.IsEqualTo(ResourceTypeID))); return(TrySelectFirst <StackTable, Stack>(query).OrThrow <PIODataException>("Failed to query")); }
public Task BeginTake(int WorkerID, ResourceTypeIDs ResourceTypeID) { Task task = new Models.Task() { WorkerID = WorkerID, ResourceTypeID = ResourceTypeID }; TaskCreated(this, new Task[] { task }); return(task); }
public ResourceType GetResourceType(ResourceTypeIDs ResourceTypeID) { ISelect query; LogEnter(); Log(LogLevels.Information, $"Querying ResourceType table (ResourceTypeID={ResourceTypeID})"); query = new Select(ResourceTypeTable.ResourceTypeID, ResourceTypeTable.PhraseKey).From(PIODB.ResourceTypeTable).Where(ResourceTypeTable.ResourceTypeID.IsEqualTo(ResourceTypeID)); return(TrySelectFirst <ResourceTypeTable, ResourceType>(query).OrThrow <PIODataException>("Failed to query")); }
public void EndTake(int WorkerID, ResourceTypeIDs ResourceTypeID) { Worker worker; LogEnter(); worker = AssertExists(() => workerModule.GetWorker(WorkerID), $"WorkerID={WorkerID}"); Log(LogLevels.Information, $"Updating worker (WorkerID={WorkerID})"); Try(() => workerModule.UpdateWorker(WorkerID, ResourceTypeID)).OrThrow <PIOInternalErrorException>("Failed to update worker"); }
public Stack GetStack(int BuildingID, ResourceTypeIDs ResourceTypeID) { if (ThrowException) { throw new PIODataException("UnitTestException", null, 1, "UnitTest", "UnitTest"); } return(new Stack() { StackID = 1, ResourceTypeID = ResourceTypeID }); }
public ResourceType GetResourceType(ResourceTypeIDs ResourceTypeID) { if (ThrowException) { throw new PIODataException("UnitTestException", null, 1, "UnitTest", "UnitTest"); } return(new ResourceType() { ResourceTypeID = ResourceTypeID }); }
public Stack InsertStack(int BuildingID, ResourceTypeIDs ResourceTypeID, int Quantity) { Stack item; item = new Stack() { StackID = items.Count, BuildingID = BuildingID, ResourceTypeID = ResourceTypeID, Quantity = Quantity }; items.Add(item); return(item); }
public Stack FindStack(int PlanetID, ResourceTypeIDs ResourceTypeID) { ISelect query; LogEnter(); Log(LogLevels.Information, $"Querying Stack table (PlanetID={PlanetID}, ResourceTypeID={ResourceTypeID}), Quantity>0"); query = new Select(StackTable.StackID, StackTable.BuildingID, StackTable.ResourceTypeID, StackTable.Quantity) .From( PIODB.StackTable.Join(PIODB.BuildingTable.On(StackTable.BuildingID, BuildingTable.BuildingID)) ) .Where(new AndFilter(BuildingTable.PlanetID.IsEqualTo(PlanetID), StackTable.ResourceTypeID.IsEqualTo(ResourceTypeID), StackTable.Quantity.IsGreaterThan(0))); return(TrySelectFirst <StackTable, Stack>(query).OrThrow <PIODataException>("Failed to query")); }
public Task BeginTake(int WorkerID, ResourceTypeIDs ResourceTypeID) { if (ThrowException) { throw new PIODataException("UnitTestException", null, 1, "UnitTest", "UnitTest"); } Task task = new Task() { WorkerID = WorkerID, ETA = DateTime.Now, ResourceTypeID = ResourceTypeID }; TaskCreated?.Invoke(this, new Task[] { task }); return(task); }
public Stack InsertStack(int BuildingID, ResourceTypeIDs ResourceTypeID, int Quantity) { IInsert query; Stack item; object result; LogEnter(); Log(LogLevels.Information, $"Inserting into Stack table (BuildingID={BuildingID}, ResourceTypeID={ResourceTypeID}, Quantity={Quantity})"); item = new Stack() { BuildingID = BuildingID, ResourceTypeID = ResourceTypeID, Quantity = Quantity }; query = new Insert().Into(PIODB.StackTable).Set(StackTable.BuildingID, item.BuildingID).Set(StackTable.ResourceTypeID, item.ResourceTypeID).Set(StackTable.Quantity, item.Quantity); result = Try(query).OrThrow <PIODataException>("Failed to insert"); item.StackID = Convert.ToInt32(result); return(item); }
public Ingredient CreateIngredient(BuildingTypeIDs BuildingTypeID, ResourceTypeIDs ResourceTypeID, int Quantity) { IInsert query; Ingredient item; object result; LogEnter(); item = new Ingredient() { BuildingTypeID = BuildingTypeID, ResourceTypeID = ResourceTypeID, Quantity = Quantity, }; Log(LogLevels.Information, $"Inserting into Ingredient table (BuildingTypeID={BuildingTypeID},ResourceTypeID={ResourceTypeID}, Quantity={Quantity})"); query = new Insert().Into(PIODB.IngredientTable).Set(IngredientTable.BuildingTypeID, item.BuildingTypeID).Set(IngredientTable.ResourceTypeID, item.ResourceTypeID).Set(IngredientTable.Quantity, item.Quantity); result = Try(query).OrThrow <PIODataException>("Failed to insert"); item.IngredientID = Convert.ToInt32(result); return(item); }
public ResourceType CreateResourceType(ResourceTypeIDs ResourceTypeID, string PhraseKey) { IInsert query; ResourceType item; object result; LogEnter(); item = new ResourceType() { ResourceTypeID = ResourceTypeID, PhraseKey = PhraseKey, }; Log(LogLevels.Information, $"Inserting into ResourceType table (ResourceTypeID={ResourceTypeID}, PhraseKey={PhraseKey})"); query = new Insert().Into(PIODB.ResourceTypeTable).Set(ResourceTypeTable.ResourceTypeID, item.ResourceTypeID).Set(ResourceTypeTable.PhraseKey, item.PhraseKey); result = Try(query).OrThrow <PIODataException>("Failed to insert"); //item.ResourceTypeID = Convert.ToInt32(result); return(item); }
public Product CreateProduct(BuildingTypeIDs BuildingTypeID, ResourceTypeIDs ResourceTypeID, int Quantity, int Duration) { IInsert query; Product item; object result; LogEnter(); item = new Product() { BuildingTypeID = BuildingTypeID, ResourceTypeID = ResourceTypeID, Quantity = Quantity, Duration = Duration }; Log(LogLevels.Information, $"Inserting into Product table (BuildingTypeID={BuildingTypeID},ResourceTypeID={ResourceTypeID}, Quantity={Quantity}, Duration={Duration})"); query = new Insert().Into(PIODB.ProductTable).Set(ProductTable.BuildingTypeID, item.BuildingTypeID).Set(ProductTable.ResourceTypeID, item.ResourceTypeID).Set(ProductTable.Quantity, item.Quantity).Set(ProductTable.Duration, item.Duration); result = Try(query).OrThrow <PIODataException>("Failed to insert"); item.ProductID = Convert.ToInt32(result); return(item); }
public Task BeginTake(int WorkerID, ResourceTypeIDs ResourceTypeID) { Building building; Worker worker; Stack stack; Task task; LogEnter(); worker = AssertWorkerIsIdle(WorkerID); Log(LogLevels.Information, $"Check if worker is not carrying item (WorkerID={worker.WorkerID})"); if (worker.ResourceTypeID != null) { Throw <PIOInvalidOperationException>(LogLevels.Warning, $"Worker is already carrying item (WorkerID={worker.WorkerID}, ResourceTypeID={worker.ResourceTypeID})"); } building = AssertExists(() => buildingModule.GetBuilding(worker.PlanetID, worker.X, worker.Y), $"X={worker.X}, Y={worker.Y}"); Log(LogLevels.Information, $"Check stack quantity (BuildingID={building.BuildingID}, ResourceTypeID={ResourceTypeID})"); stack = Try(() => stackModule.GetStack(building.BuildingID, ResourceTypeID)).OrThrow <PIOInternalErrorException>("Failed to get stack"); if ((stack == null) || (stack.Quantity < carriedQuantity)) { Throw <PIONoResourcesException>(LogLevels.Warning, $"Not enough resources (BuildingID={building.BuildingID}, ResourceTypeID={ResourceTypeID})"); } Log(LogLevels.Information, $"Consuming resource (BuildingID={building.BuildingID}, ResourceTypeID={ResourceTypeID}, Quantity={carriedQuantity})"); stack.Quantity -= carriedQuantity; Try(() => stackModule.UpdateStack(stack.StackID, stack.Quantity)).OrThrow <PIOInternalErrorException>("Failed to update stack"); Log(LogLevels.Information, $"Creating task (WorkerID={WorkerID})"); task = Try(() => taskModule.CreateTask(TaskTypeIDs.Take, WorkerID, worker.X, worker.Y, null, ResourceTypeID, null, DateTime.Now.AddSeconds(5))).OrThrow <PIOInternalErrorException>("Failed to create task"); OnTasksCreated(task); return(task); }
public Material CreateMaterial(BuildingTypeIDs BuildingTypeID, ResourceTypeIDs ResourceTypeID, int Quantity) { throw new NotImplementedException(); }
public Task <Models.Task> CarryToAsync(int WorkerID, int TargetBuildingID, ResourceTypeIDs ResourceTypeID) { throw new NotImplementedException(); }
public Models.Task Take(int WorkerID, ResourceTypeIDs ResourceTypeID) { throw new NotImplementedException(); }
public Product CreateProduct(BuildingTypeIDs BuildingTypeID, ResourceTypeIDs ResourceTypeID, int Quantity, int Duration) { throw new NotImplementedException(); }
public void EndTake(int WorkerID, ResourceTypeIDs ResourceTypeID) { }
public Task <Models.Task> TakeAsync(int WorkerID, ResourceTypeIDs ResourceTypeID) { throw new NotImplementedException(); }
public void EndStore(int WorkerID, ResourceTypeIDs ResourceTypeID) { }
public ResourceType CreateResourceType(ResourceTypeIDs ResourceTypeID, string Name) { throw new NotImplementedException(); }
public void EndStore(int WorkerID, ResourceTypeIDs ResourceTypeID) { throw new NotImplementedException(); }
public Models.Task CarryTo(int WorkerID, int TargetFactoryID, ResourceTypeIDs ResourceTypeID) { throw new NotImplementedException(); }
public Ingredient CreateIngredient(BuildingTypeIDs BuildingTypeID, ResourceTypeIDs ResourceTypeID, int Quantity) { throw new NotImplementedException(); }
public Stack InsertStack(int BuildingID, ResourceTypeIDs ResourceTypeID, int Quantity) { throw new NotImplementedException(); }