public StrikeResult Strike(Position position, out Boat boat) { StrikeResult result = grid.FireAt(position, out boat); switch (result) { case StrikeResult.IGNORED_ALREADY_MISSED: case StrikeResult.IGNORED_ALREADY_HIT: break; case StrikeResult.MISS: SetMarker(position, Marker.Miss); break; case StrikeResult.HIT_NOT_SUNK: SetMarker(position, Marker.Hit); break; case StrikeResult.HIT_AND_SUNK: SetMarker(position, Marker.Hit); PlaceBoat(boat, true); break; default: throw new System.NotImplementedException(); } if (boatControllers [0] != null) { for (int i = 0; i < grid.boats.Length; i++) { boatControllers [i].UpdateDamage(); } } return(result); }
void AnnounceStrike(Whose whose, Boat boat, Position position, StrikeResult result) { if (OnStrikeOccurred != null) { OnStrikeOccurred(whose, boat, position, result); } }
public StrikeResult Strike(Whose whose, Position position) { StrikeResult result = _Strike(whose, position); // gav4.LogEvent (CATEGORY, "Strike", null, 0); // gav4.LogEvent (CATEGORY, "Strike-" + whose.ToString () + "-" + result.ToString (), null, 1); Whose nextTurn = CheckAllBoatsSunk(whose); StartCoroutine(SetTurn(nextTurn)); return(result); }
public StrikeResult _Strike(Whose whose, Position position) { Boat boat; StrikeResult result = GetGridController(whose).Strike(position, out boat); if (!Application.isEditor) { Debug.Log("***Strike(" + position + ") -> " + result); } AnnounceStrike(whose, boat, position, result); return(result); }
void SetStrikeData(Whose whose, Boat boat, StrikeResult result) { StrikeData newStrikeData = new StrikeData(whose, boat, result); this.strikeData = newStrikeData; UpdateText(); SceneMaster.instance.Async(delegate { if (this.strikeData == newStrikeData) { this.strikeData = null; UpdateText(); } }, GetTimeout(result)); }
float GetTimeout(StrikeResult result) { switch (result) { case StrikeResult.MISS: return(2f); case StrikeResult.IGNORED_ALREADY_MISSED: case StrikeResult.IGNORED_ALREADY_HIT: return(0f); case StrikeResult.HIT_NOT_SUNK: case StrikeResult.HIT_AND_SUNK: return(5f); default: throw new System.NotImplementedException(); } }
Boat[] MakeRandomizedBoats(Whose whose) { boats = new Boat[fleet.Length]; for (int i = 0; i < fleet.Length; i++) { bool conflict = true; while (conflict) { Boat boat = Boat.RandomBoat(whose, i); conflict = false; for (int j = 0; j < boat.positions.Length && !conflict; j++) { Position pos = boat.positions [j]; Boat otherBoat; StrikeResult result = FireAt(pos, out otherBoat, testOnly: true); switch (result) { case StrikeResult.MISS: case StrikeResult.IGNORED_ALREADY_MISSED: continue; case StrikeResult.IGNORED_ALREADY_HIT: case StrikeResult.HIT_NOT_SUNK: case StrikeResult.HIT_AND_SUNK: conflict = true; break; default: throw new System.NotImplementedException(); } } if (!conflict) { boats [i] = boat; } } } return(boats); }
void Highlight(bool highlight) { BattleController.instance.AimAt(Whose.Theirs, highlight ? positionMarkerController.position : null); #if UNITY_EDITOR if (!tileHasBeenFiredUpon && Input.GetKey(KeyCode.X) && BattleController.instance.IsGridReady()) { StrikeResult result = BattleController.instance._Strike(Whose.Theirs, positionMarkerController.position); switch (result) { case StrikeResult.IGNORED_ALREADY_MISSED: case StrikeResult.IGNORED_ALREADY_HIT: case StrikeResult.MISS: case StrikeResult.HIT_NOT_SUNK: case StrikeResult.HIT_AND_SUNK: tileHasBeenFiredUpon = true; break; default: throw new System.NotImplementedException(); } } #endif }
public StrikeResult FireAt(Position position, out Boat boat, bool testOnly = false) { for (int i = 0; i < boats.Length; i++) { if (boats [i] == null) { continue; } StrikeResult result = boats [i].FireAt(position, testOnly); if (result == StrikeResult.IGNORED_ALREADY_HIT) { boat = boats [i]; return(result); } else if (result == StrikeResult.MISS) { continue; } else { Assert.IsTrue(result == StrikeResult.HIT_AND_SUNK || result == StrikeResult.HIT_NOT_SUNK); boat = boats [i]; return(result); } } if (misses [position.x, position.y] > 0) { boat = null; return(StrikeResult.IGNORED_ALREADY_MISSED); } if (!testOnly) { misses [position.x, position.y]++; } boat = null; return(StrikeResult.MISS); }
void NoteStrikeResult(Whose whose, Boat boat, Position position, StrikeResult result) { if (whose == Whose.Theirs) { return; } lock (_lock) { switch (result) { case StrikeResult.MISS: _identifiedMiss.Add(position); break; case StrikeResult.HIT_NOT_SUNK: _unidentifiedHits.Add(position); break; case StrikeResult.HIT_AND_SUNK: for (int i = 0; i < boat.positions.Length; i++) { Position pos = boat.GetPosition(i); if (!pos.Equals(position)) { Assert.IsTrue(_unidentifiedHits.Remove(pos)); } _identifiedHits.Add(pos); } break; case StrikeResult.IGNORED_ALREADY_MISSED: case StrikeResult.IGNORED_ALREADY_HIT: default: throw new System.NotImplementedException(); } // Debug.Log (TextGrid ()); } }
public StrikeData(Whose whose, Boat boat, StrikeResult result) { this.whose = whose; this.boat = boat; this.result = result; }
void UpdateStrikeOccurred(Whose whose, Boat boat, Position position, StrikeResult result) { SetStrikeData(whose, boat, result); }