public FireResults Fire(string player_id, int x, int y) { Player player = _dm.Ps.GetPlayer(convertId(player_id), true); Room room = _dm.Rs.GetRoom(player.roomid); Player player2 = _dm.Rs.GetPlayer2(player, room); string s = player.login; string s1 = player2.login; //List<sbyte> xc = new List<sbyte>(); //List<sbyte> yc = new List<sbyte>(); //List<sbyte> res = new List<sbyte>(); FireResults res = new FireResults(); if (player2.field[y][x] == (sbyte)Field_Cell_States.empty) { res.XCoords.Add((sbyte)x); res.YCoords.Add((sbyte)y); res.FireRes.Add((sbyte)Field_Cell_States.miss); player2.field[y][x] = (sbyte)Field_Cell_States.miss; if (room.movepriority == (sbyte)Moves_States.player1) { room.movepriority = (sbyte)Moves_States.player2; } else { room.movepriority = (sbyte)Moves_States.player1; } } else { getFireResults(player2.field, player2.shipcount, x, y, res); room.flUpdateField = true; } //// Game_State = 0; //// string[] parameters = _gamesrv.Sts.UpdateInfoRoom(player, player2, room); //// room.updTime = DateTime.Now; res.p2shipscount = player2.shipcount; res.movetime = startTimer(room); return(res); }
public void AnimateShot(FireResults fireResults) { lineRenderer.SetVertexCount(fireResults.Count * 2); lineWidth = 1f; lineRenderer.SetWidth(lineWidth, lineWidth); for (int i = 0; i < fireResults.Count; i++) { lineRenderer.SetPosition(i * 2, fireResults[i].Origin); lineRenderer.SetPosition(i * 2 + 1, fireResults[i].Ending); } StartCoroutine(AnimateLineRendererOut()); }
private FireResults GetNextPointRecursivly(ref FireResults currentFireResults, Vector3 origin, Vector3 heading) { if (currentFireResults.Bounces >= BounceLimit) return currentFireResults; RaycastHit hit; if (Physics.Raycast(origin, heading, out hit, 1000, 1 << 12)) // HexWall 12 { HexType hexType = hit.collider.GetComponentInParent<HexTileInformation>().HexType; List<GameObject> hitEnemies = CalculateEnemyHits(origin, hit.point, heading); currentFireResults.Add(new FireSegment(origin, hit.point, hexType, hitEnemies)); switch (hexType) { case HexType.Wall: break; case HexType.Mirror: currentFireResults = GetNextPointRecursivly(ref currentFireResults, hit.point, Vector3.Reflect(heading, hit.normal)); break; } } return currentFireResults; }
/// <summary> /// Calculates all the fire points /// </summary> /// <returns>A list of point-heading tuples</returns> private FireResults CalculateFirePoints() { var firePoints = new FireResults(); firePoints = GetNextPointRecursivly(ref firePoints, playerInformtion.FirePoints[0].transform.position, transform.forward); return firePoints; }
void getFireResults(sbyte[][] f, sbyte[] shipcount, int x, int y, FireResults res) { f[y][x] = (sbyte)Field_Cell_States.injured; Func <int, int, bool> compare = (u, v) => { if (u < 0 || v < 0 || v >= f[x].Length || u >= f.Length) { return(false); } return(f[u][v] == (sbyte)Field_Cell_States.ship || f[u][v] == (sbyte)Field_Cell_States.injured); }; int l = x - 1, r = x + 1, t = y - 1, b = y + 1; while (true) { if (compare(y, l)) { l--; } else if (compare(y, r)) { r++; } else if (compare(t, x)) { t--; } else if (compare(b, x)) { b++; } else { l++; r--; t++; b--; break; } } int xk = r; int xn = l; bool flagKilled = true; if (xk - xn != 0) { for (int i = xn; i <= xk; i++) { if ((sbyte)Field_Cell_States.ship == f[y][i]) { flagKilled = false; } } if (flagKilled) { for (int j = y - 1; j <= y + 1; j++) { for (int i = xn - 1; i <= xk + 1; i++) { if (j < 0 || j >= f.Length) { break; } if (i < 0 || i >= f[y].Length) { continue; } if (i >= xn && i <= xk && j == y) { continue; } if (f[j][i] != (sbyte)Field_Cell_States.miss) { res.XCoords.Add((sbyte)i); res.YCoords.Add((sbyte)j); res.FireRes.Add((sbyte)Field_Cell_States.miss); f[j][i] = (sbyte)Field_Cell_States.miss; } } } shipcount[xk - xn]--; } res.XCoords.Add((sbyte)x); res.YCoords.Add((sbyte)y); res.FireRes.Add((sbyte)Field_Cell_States.injured); return; } int yk = b; int yn = t; //vertical ships // if (yk - yn != 0) // { flagKilled = true; for (int i = yn; i <= yk; i++) { if ((sbyte)Field_Cell_States.ship == f[i][x]) { flagKilled = false; } } if (flagKilled) { for (int j = x - 1; j <= x + 1; j++) { for (int i = yn - 1; i <= yk + 1; i++) { if (j < 0 || j >= f[y].Length) { break; } if (i < 0 || i >= f.Length) { continue; } if (i >= yn && i <= yk && j == x) { continue; } if (f[i][j] != (sbyte)Field_Cell_States.miss) { res.XCoords.Add((sbyte)j); res.YCoords.Add((sbyte)i); res.FireRes.Add((sbyte)Field_Cell_States.miss); f[i][j] = (sbyte)Field_Cell_States.miss; } } } shipcount[yk - yn]--; } res.XCoords.Add((sbyte)x); res.YCoords.Add((sbyte)y); res.FireRes.Add((sbyte)Field_Cell_States.injured); // } }
public JsonResult Fire(string player_id, int x, int y) { FireResults res = _gs.Fire(player_id, x, y); return(Json(new { cells = res.XCoords, rows = res.YCoords, movetime = res.movetime, fireresult = res.FireRes, shipcount = res.p2shipscount })); }