public void Open(PlayerBallController player, Ball pickedUpBall) { currentPlayer = player; for (int i = 0; i < slots.Length; i++) { slots[i].myBall = i < player.balls.Count ? player.balls[i].GetComponent <Ball>() : null; if (i < player.balls.Count) { if (slots[i].myBall.GetComponent <SpriteRenderer>()) { slots[i].ballSprite.sprite = slots[i].myBall.GetComponent <SpriteRenderer>().sprite; } else { slots[i].ballSprite.sprite = slots[i].myBall.GetComponentInChildren <SpriteRenderer>().sprite; } } else { slots[i].ballSprite.sprite = unuseableSprite; } } slots[slots.Length - 1].myBall = pickedUpBall; if (slots[slots.Length - 1].myBall.GetComponent <SpriteRenderer>()) { slots[slots.Length - 1].ballSprite.sprite = slots[slots.Length - 1].myBall.GetComponent <SpriteRenderer>().sprite; } else { slots[slots.Length - 1].ballSprite.sprite = slots[slots.Length - 1].myBall.GetComponentInChildren <SpriteRenderer>().sprite; } }
IEnumerator DoThrowing() { isAttacking = true; animator.SetTrigger("THROWING"); yield return(new WaitForSeconds(comboJSON.getStartup("THROWING") * (1f / 60f))); GameObject ball = ObjectPooler.Instance.SpawnFromPool(Pool.PLAYER_BALL, transform.position + new Vector3(0f, 1f, 0f), Quaternion.identity); PlayerBallController ballController = ball.GetComponent <PlayerBallController>(); ballController.OnObjectSpawn(); if (facingLeft) { ballController.SetAngle(0f); } else { ballController.SetAngle(180f); } yield return(new WaitForSeconds(comboJSON.getEndlag("THROWING") * (1f / 60f))); EndAttack(); }
private void Awake() { ballController = GetComponent <PlayerBallController>(); collisionController = GetComponent <PlayerCollisionController>(); movementController = GetComponent <PlayerMovementController>(); healthController = GetComponent <PlayerHealthController>(); }
void OnTouchStart(Vector2 TouchedPosition) { StartPosition = TouchedPosition; PlayerBallController PC = CueBall.GetComponent <PlayerBallController>(); if (PC != null) { PC.OnTouchStart(TouchedPosition); } }
private void OnTriggerEnter(Collider collider) { PlayerBallController playerBallController = collider.GetComponent <PlayerBallController>(); if (!playerBallController || GameManager.singleton.GameEnded) { return; } GameManager.singleton.EndGame(true); }
public void Close() { List <GameObject> temp = new List <GameObject>(); for (int i = 0; i < currentPlayer.balls.Count; i++) { temp.Add(slots[i].myBall.gameObject); } currentPlayer.transform.parent.transform.gameObject.GetComponent <Team>().RefillBallsOnPlayer(currentPlayer, temp); DiscardBall(); currentPlayer = null; }
void OnTouchEnd(Vector2 TouchedPosition) { EndPosition = TouchedPosition; PlayerBallController PC = CueBall.GetComponent <PlayerBallController>(); if (PC != null) { PC.OnTouchEnd(TouchedPosition); } // 샷 시작 StartShot(); }
public void RefillBallsOnPlayer(PlayerBallController player, List <GameObject> balls) { player.balls.Clear(); //gives a high amount of balls to one player for (int i = 0; i < balls.Count; i++) { balls[i].GetComponent <Ball>().isOn = player.identifier; balls[i].transform.position = player.transform.position; balls[i].GetComponent <Ball>().players[0] = players[0].gameObject; balls[i].GetComponent <Ball>().players[1] = players[1].gameObject; balls[i].SetActive(true); player.balls.Add(balls[i]); } }
void OnTouchMove(Vector2 TouchedPosition) { if (EndPosition == TouchedPosition) { return; } EndPosition = TouchedPosition; PlayerBallController PC = CueBall.GetComponent <PlayerBallController>(); if (PC != null) { PC.OnTouchMove(TouchedPosition); } SimulateTrajectory(); }
// 타격 시뮬레이션 public void SimulateTrajectory() { if (Balls.Count != SavedTransforms.Count) { return; } Rigidbody2D RB = CueBall.GetComponent <Rigidbody2D>(); if (RB == null) { return; } PlayerBallController PC = CueBall.GetComponent <PlayerBallController>(); if (PC == null) { return; } Physics2D.autoSimulation = false; // 모든 공의 위치/각도를 저장한다. for (int i = 0; i < Balls.Count; ++i) { if (SavedTransforms[i] == null) { SavedTransforms[i] = new GameObject(); } SavedTransforms[i].transform.position = Balls[i].transform.position; SavedTransforms[i].transform.rotation = Balls[i].transform.rotation; SavedTransforms[i].transform.localScale = Balls[i].transform.localScale; } Segments.Clear(); // 시뮬레이션 시작 Vector2 Force = GetShotForce(); RB.AddForce(Force); for (int i = 0; i < SimulateCount; ++i) { Segments.Add(RB.transform.position); Physics2D.Simulate(Time.fixedDeltaTime); } // 재워! RB.Sleep(); // 시뮬레이션 종료 Physics2D.autoSimulation = true; // 모든 공의 위치/각도를 복구한다. for (int i = 0; i < Balls.Count; ++i) { Balls[i].transform.position = SavedTransforms[i].transform.position; Balls[i].transform.rotation = SavedTransforms[i].transform.rotation; Balls[i].transform.localScale = SavedTransforms[i].transform.localScale; Rigidbody2D RBB = Balls[i].GetComponent <Rigidbody2D>(); if (RBB == null) { continue; } RBB.velocity = Vector2.zero; RBB.angularVelocity = 0.00f; RBB.inertia = 0.00f; } PC.SimulatePath(Segments); }
// 점수 계산 void CalcResult() { // 맞은 적구 판단 // 수구는 최초에 캐싱된 하나만 인정한다. PlayerBallController PC = CueBall.GetComponent <PlayerBallController>(); if (PC != null) { List <GameObject> TouchedObjects = PC.GetTouchedObjectsList(); int TouchedBalls = 0; int TouchedWalls = 0; bool bBankShot = false; float Score = Score_Miss; foreach (GameObject TouchedObject in TouchedObjects) { if (TouchedObject == null) { continue; } // 적구 타격 먼저 판단 if (TouchedObject.CompareTag("Ball")) { TouchedBalls++; // 첫 적구 터치 시 가락 확인 if (TouchedBalls == 1 && TouchedWalls >= 3 && bBankShot == false) { bBankShot = true; } // 적구 타격 완료 시 계산 완료 if (TouchedBalls >= ObjectBalls.Count) { // 성공 시 턴 증감 계산 if (bBankShot) { Score = Score_BankShot; } else if (TouchedWalls >= 3) { Score = Score_3Cushion; } else { Score = Score_Success; } break; } } // 쿠션 판단 if (TouchedObject.CompareTag("Wall")) { TouchedWalls++; } } // 실패에 대한 턴 증감 계산 if (Score == Score_Miss && TouchedBalls > 0) { Score = Score_Save; } // 잔여 턴 계산 Turn = Mathf.Min(Turn + Score, MaxTurn); Debug.Log("Result ----"); Debug.Log("Score : " + Score); Debug.Log("Touched Balls : " + TouchedBalls); Debug.Log("Touched Walls : " + TouchedWalls); Debug.Log("Bank Shot : " + bBankShot); Debug.Log("Remain Turn : " + Turn); } if (Turn > 0.0f) { SetTurnState(ETurn.Action); } }
public void OpenBallSwitching(PlayerBallController player, Ball pickedUpBall) { OpenOrClose(ballSwitching); ballSwitching.GetComponent <BallSwitching>().Open(player, pickedUpBall); }
void Awake() { controller = GetComponent <PlayerBallController>(); rotator = GetComponentInChildren <PlayerRotator>(); }