コード例 #1
0
    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);
    }
コード例 #2
0
 void AnnounceStrike(Whose whose, Boat boat, Position position, StrikeResult result)
 {
     if (OnStrikeOccurred != null)
     {
         OnStrikeOccurred(whose, boat, position, result);
     }
 }
コード例 #3
0
    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);
    }
コード例 #4
0
    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);
    }
コード例 #5
0
    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));
    }
コード例 #6
0
    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();
        }
    }
コード例 #7
0
    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);
    }
コード例 #8
0
    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
    }
コード例 #9
0
 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);
 }
コード例 #10
0
    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 ());
        }
    }
コード例 #11
0
 public StrikeData(Whose whose, Boat boat, StrikeResult result)
 {
     this.whose  = whose;
     this.boat   = boat;
     this.result = result;
 }
コード例 #12
0
 void UpdateStrikeOccurred(Whose whose, Boat boat, Position position, StrikeResult result)
 {
     SetStrikeData(whose, boat, result);
 }