Example #1
0
        /// <summary>
        /// RoundSettings을 기반으로 RoundData를 새로 생성
        /// </summary>
        public void GenerateRoundDatas()
        {
            roundSettings.Validate();
            RoundDatas = new RoundData[roundSettings.roundNumber];

            // 마지막 라운드
            RoundDatas[roundSettings.roundNumber - 1] = new RoundData(
                roundSettings.roundNumber,
                SelectFinalPosition(),
                roundSettings.diametersAfterClosing[roundSettings.roundNumber - 1],
                roundSettings.waitPeriods[roundSettings.roundNumber - 1],
                roundSettings.timeToCloses[roundSettings.roundNumber - 1],
                roundSettings.tickDamages[roundSettings.roundNumber - 1]);

            // 마지막에서 두 번째 라운드부터 거꾸로 계산
            for (int round = roundSettings.roundNumber - 2; round >= 0; round--)
            {
                Vector2 randomValue = UnityEngine.Random.insideUnitCircle;
                randomValue *= roundSettings.diametersAfterClosing[round] / 2f - roundSettings.diametersAfterClosing[round + 1] / 2f;

                RoundDatas[round] = new RoundData(
                    round + 1,
                    RoundDatas[round + 1].Center + randomValue,
                    roundSettings.diametersAfterClosing[round],
                    roundSettings.waitPeriods[round],
                    roundSettings.timeToCloses[round],
                    roundSettings.tickDamages[round]);
            }

            photonView.RPC(nameof(SyncRoundDatas), PhotonTargets.OthersBuffered,
                           RoundDatas.Length,
                           RoundDatas.Select(e => e.Center).ToArray(),
                           RoundDatas.Select(e => e.DiameterAfterClosing).ToArray(),
                           RoundDatas.Select(e => e.WaitPeriod).ToArray(),
                           RoundDatas.Select(e => e.TimeToClose).ToArray(),
                           RoundDatas.Select(e => e.TickDamage).ToArray());
        }