public void ModelFacade_MoveToSublocation() { LocationModel workingLM = gs.GetLM(); Assert.AreEqual(1, workingLM.GetSubLocation().GetSublocationID(), "Should be at sublocation 1"); Assert.IsTrue(mf.ChangeSubLocation(gs, 2), "Should be able to goto sublocation 2"); Assert.AreEqual(2, workingLM.GetSubLocation().GetSublocationID(), "Should be at sublocation 2"); Assert.IsFalse(mf.ChangeSubLocation(gs, 3), "Should not be able to goto sublocation 3"); Assert.AreEqual(2, workingLM.GetSubLocation().GetSublocationID(), "Should still be at sublocation 2"); Assert.IsTrue(mf.ChangeLocation(gs, 20), "Moving to 20 should be successful"); Assert.IsNull(workingLM.GetSubLocation(), "Sublocation should be null"); Assert.IsTrue(mf.ChangeSubLocation(gs, 1), "Should be able to goto sublocation 1"); Assert.AreEqual(1, workingLM.GetSubLocation().GetSublocationID(), "Should be at sublocation 1"); Assert.IsTrue(mf.ChangeSubLocation(gs, 2), "Should be able to goto sublocation 2"); Assert.AreEqual(2, workingLM.GetSubLocation().GetSublocationID(), "Should be at sublocation 2"); Assert.IsFalse(mf.ChangeSubLocation(gs, 10), "Should not be able to goto sublocation 10"); }
/// <summary> /// Change sublocation to sublocation provided /// </summary> /// <param name="sublocationID">ID of the sublocation to move to</param> /// <returns>If the move was sucessful</returns> public bool ChangeSubLocation(int sublocationID) { if (mf.CanAffordMove(gs, ModelFacade.SUBLOCATION_MOVE_COST)) { mf.ReduceResourcesByMoveCost(gs, ModelFacade.SUBLOCATION_MOVE_COST); // Thread 1 - Change sublocation var task1 = Task.Factory.StartNew(() => { mf.ChangeSubLocation(gs, sublocationID); dc.UpdatePlayerStatus(gs.Clone() as GameState); }); // Main Thread - Animate movement gameView.AnimateFrames(null); Task.WaitAll(task1); delayEndAnimation(); return(true); } else { if (gameView.DrawYesNoOption("You do not have sufficient resources. Do you wish to risk it all?")) { int risk = rnd.Next(1, 101); if (risk <= 25) { // Thread 1 - Change sublocation var task1 = Task.Factory.StartNew(() => { mf.ChangeSubLocation(gs, sublocationID); dc.UpdatePlayerStatus(gs.Clone() as GameState); }); // Main Thread - Animate movement gameView.AnimateFrames(null); Task.WaitAll(task1); delayEndAnimation(); return(true); } mf.ReduceResourcesByMoveCost(gs, ModelFacade.SUBLOCATION_MOVE_COST); return(false); } return(false); } }