Exemplo n.º 1
0
    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;
        }
    }
Exemplo n.º 2
0
    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();
    }
Exemplo n.º 3
0
 private void Awake()
 {
     ballController      = GetComponent <PlayerBallController>();
     collisionController = GetComponent <PlayerCollisionController>();
     movementController  = GetComponent <PlayerMovementController>();
     healthController    = GetComponent <PlayerHealthController>();
 }
Exemplo n.º 4
0
    void OnTouchStart(Vector2 TouchedPosition)
    {
        StartPosition = TouchedPosition;

        PlayerBallController PC = CueBall.GetComponent <PlayerBallController>();

        if (PC != null)
        {
            PC.OnTouchStart(TouchedPosition);
        }
    }
Exemplo n.º 5
0
    private void OnTriggerEnter(Collider collider)
    {
        PlayerBallController playerBallController = collider.GetComponent <PlayerBallController>();

        if (!playerBallController || GameManager.singleton.GameEnded)
        {
            return;
        }

        GameManager.singleton.EndGame(true);
    }
Exemplo n.º 6
0
    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;
    }
Exemplo n.º 7
0
    void OnTouchEnd(Vector2 TouchedPosition)
    {
        EndPosition = TouchedPosition;

        PlayerBallController PC = CueBall.GetComponent <PlayerBallController>();

        if (PC != null)
        {
            PC.OnTouchEnd(TouchedPosition);
        }

        // 샷 시작
        StartShot();
    }
Exemplo n.º 8
0
 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]);
     }
 }
Exemplo n.º 9
0
    void OnTouchMove(Vector2 TouchedPosition)
    {
        if (EndPosition == TouchedPosition)
        {
            return;
        }

        EndPosition = TouchedPosition;

        PlayerBallController PC = CueBall.GetComponent <PlayerBallController>();

        if (PC != null)
        {
            PC.OnTouchMove(TouchedPosition);
        }

        SimulateTrajectory();
    }
Exemplo n.º 10
0
    // 타격 시뮬레이션
    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);
    }
Exemplo n.º 11
0
    // 점수 계산
    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);
        }
    }
Exemplo n.º 12
0
 public void OpenBallSwitching(PlayerBallController player, Ball pickedUpBall)
 {
     OpenOrClose(ballSwitching);
     ballSwitching.GetComponent <BallSwitching>().Open(player, pickedUpBall);
 }
Exemplo n.º 13
0
 void Awake()
 {
     controller = GetComponent <PlayerBallController>();
     rotator    = GetComponentInChildren <PlayerRotator>();
 }