private void revealWaypointsAfterCamp(int campIndex, OverlandTileModel tileModel) { bool foundNext = false; int nextWaypoint = tileModel.waypoints.Count - 1; for (int dex = campIndex + 1; dex < tileModel.waypoints.Count; dex++) { // and stop at the next waypoint if (!foundNext) { OverlandWaypointModel wap = (OverlandWaypointModel)tileModel.waypoints[dex]; if (wap.waypointType == ewaypointType.waypointCamp) { nextWaypoint = dex; foundNext = true; } } } Debug.Log(string.Format("checking dex{0} next{1}", campIndex, nextWaypoint)); for (int dex = campIndex; dex <= nextWaypoint; dex++) { OverlandWaypointModel wap = (OverlandWaypointModel)tileModel.waypoints[dex]; wap.beyondNextCamp = false; } }
private void makeProgress(CrewModel theCrew, OverlandTileModel tileModel, ArrayList dice) { if (theCrew.halted == false) { theCrew.progress++; } Debug.Log("Make progress"); }
private void backtrack(CrewModel theCrew, OverlandTileModel tileModel) { // reduce progress made and increases time (time increase is baked into the rule above) theCrew.progress--; if (theCrew.progress < 0) { theCrew.progress = 0; } Debug.Log("Lose progress"); }
// public void processSeries(CrewModel theCrew, ArrayList dice, OverlandTileModel tileModel) { foreach (DieView die in dice) { // get an array of effects on the current side ArrayList results = die.model.iconsOnCurrentSide(); foreach (edieIcon icon in results) { processAction(theCrew, icon, tileModel, dice); } } int finalIndex = 0; int startIndex = tileModel.currentNode; bool movementHalted = false; // process progress total if (theCrew.progress > 0) { for (int index = 0; index <= theCrew.progress; index++) { if (!movementHalted) { OverlandWaypointModel wap = (OverlandWaypointModel)tileModel.waypoints[index + tileModel.currentNode]; //OverlandWaypointModel startNode = (OverlandWaypointModel)tileModel.waypoints[startIndex]; // verify we have the prerequisite for the next // if we LAND on a camp, we're done. if (wap.waypointType == ewaypointType.waypointCamp && index + tileModel.currentNode != startIndex) { movementHalted = true; // display further waypoints revealWaypointsAfterCamp(index + tileModel.currentNode, tileModel); } // if we LAND on an encounter, we're done. if (wap.waypointType == ewaypointType.waypointEncounter && index + tileModel.currentNode != startIndex) { movementHalted = true; } // if we LAND on an icon that we don't have in hand, we're done if (wap.waypointType == ewaypointType.waypointOptionalEncounter && index + tileModel.currentNode != startIndex) { //movementHalted = true; } // icon waypoint if (wap.waypointType == ewaypointType.waypointIcon && index + tileModel.currentNode != startIndex && wap.iconRequirement != ewaypointType.waypointBoots) { // check to see if we have one if (!hasRequiredIcon(dice, wap.iconRequirement)) { movementHalted = true; } } // if we LAND on the final, we're done finalIndex = index + tileModel.currentNode; // check the previous waypoint if (index + tileModel.currentNode - 1 >= 0) { OverlandWaypointModel bak = (OverlandWaypointModel)tileModel.waypoints[index + tileModel.currentNode - 1]; bak.passed = true; } wap.reached = true; } } } tileModel.currentNode = finalIndex; // reset crew progress theCrew.progress = 0; }
public void processAction(CrewModel theCrew, edieIcon theIcon, OverlandTileModel tileModel, ArrayList dice) { ArrayList currentEffects; // we pass in DICE because we may need to know what is on other faces later (like blades, etc) if (dieIconEffects.ContainsKey((int)theIcon)) { currentEffects = dieIconEffects[(int)theIcon]; foreach (string effect in currentEffects) { enforceTimeCosts(theCrew, effect); switch (effect) { case "none": break; case "increaseFitness": increaseFitness(theCrew); break; case "bonus": break; case "progress": makeProgress(theCrew, tileModel, dice); break; case "decreaseFatigue": decreaseFatigue(theCrew); break; case "disaster": disaster(theCrew); break; case "decreaseFitness": decreaseFitness(theCrew); break; case "consumeProvisions": consumeProvisions(theCrew); break; case "halt": halt(theCrew); break; case "backtrack": backtrack(theCrew, tileModel); break; case "timePasses": timePasses(theCrew); break; case "increaseFatigue": increaseFatigue(theCrew); break; default: Debug.Log("fall through."); break; } } } }