private void DecreaseAvailableVacationIfTurnChangedToPlayer(TurnState turn)
    {
        if (turn == TurnState.Player)
        {
            int forcedReturnedCount = 0;

            foreach (var programmer in unitManager.Programmers.Where(programmer => programmer.Status.IsOnVacation).ToList())
            {
                --programmer.Status.RemainingVacationDay;

                if (programmer.Status.RemainingVacationDay <= 0)
                {
                    CommonLogger.LogFormat("StageStatusManager::DecreaseAvailableVacationIfTurnChangedToPlayer => 잔여 휴가 일수가 끝나서 {0}가 휴가에서 강제로 돌아옴.", programmer.Status.Name);

                    programmer.ReturnFromVacation(ElapsedDays, false);
                    StageManager.Instance.StageUi.ChangeProgrammerAlphaColor(programmer, 1f);

                    ++forcedReturnedCount;
                }

                if (forcedReturnedCount > 0)
                {
                    StageManager.Instance.StageUi.RenderPlayerText(string.Format("프로그래머 {0}명이 잔여 휴가 일수가 없어 근무로 돌아옵니다.", forcedReturnedCount));
                }
            }
        }
    }
Exemple #2
0
    public void Heal(int increasingHealth)
    {
        Status.Health += (int)(increasingHealth * (1 + Status.HealRate));
        Status.Health  = Mathf.Clamp(Status.Health, 0, Status.FullHealth);

        CommonLogger.LogFormat("Programmer::Hurt => {0} 프로그래머가 {1}의 체력을 회복함. 현재 체력은 {2}.", name, increasingHealth, Status.Health);
    }
Exemple #3
0
    private void RemoveDeadPlayerIfTurnChangedToPlayer(TurnState turn)
    {
        if (turn == TurnState.Player)
        {
            int totalSeverancePay = 0;
            var deadProgrammers   = Programmers.Where(programmer => programmer.IsAlive == false)
                                    .ToList();

            foreach (var programmer in deadProgrammers)
            {
                CommonLogger.LogFormat("UnitManager::RemoveDeadPlayerIfTurnChangedToPlayer => 프로그래머 {0}가 사망하여 스테이지 내에서 제외됨.", programmer.Status.Name);
                programmerActingDictionary.Remove(programmer);
                totalSeverancePay += programmer.Status.Cost.Fire;
            }

            if (totalSeverancePay > 0)
            {
                if (Turn != TurnState.GameEnd)
                {
                    StageManager.Instance.StageUi.RenderDeathText(deadProgrammers);
                }
                // TODO: Spend money!
            }
        }
    }
Exemple #4
0
        public void Modify(ProgrammerStatus status)
        {
            status.FullHealth += FullIncreasingQuantity;
            status.Health      = Mathf.Clamp(status.Health + HealQuantity, 0, status.FullHealth);

            CommonLogger.LogFormat("HealBurf::Modify => 프로그래머 '{0}'가 힐 버프를 받음. 체력이 {1}, 총 체력이 {2}만큼 증가함.", status.Name, HealQuantity, FullIncreasingQuantity);
        }
        public void Modify(GameStage stage)
        {
            var statusManager = StageManager.Instance.Status;

            statusManager.MaximumDayLimit = (int)(statusManager.MaximumDayLimit * (1 + IncreasingRatio));

            CommonLogger.LogFormat("MaximumLimitChangedBurf::Modify => 프로젝트의 기한이 {0}배 증가함. 현재 : {1}", IncreasingRatio, statusManager.MaximumDayLimit);
        }
Exemple #6
0
        public void Unmodify(ActiveSkill activeSkill)
        {
            if (activeSkill.Information.Type != SkillType.None)
            {
                activeSkill.AdditionlCooldownRatio -= CooldownRatio;

                CommonLogger.LogFormat("SkillCooldownBurf::Unmodify => 스킬 '{0}'의 쿨타임 버프가 해제됨. 쿨타임 비율이 {1}만큼 감소함. 현재 : {2}", activeSkill.Information.Name, CooldownRatio, activeSkill.AdditionlCooldownRatio);
            }
        }
Exemple #7
0
        public void Modify(ActiveSkill activeSkill)
        {
            if (activeSkill.Information.Type != SkillType.None)
            {
                activeSkill.AdditionlCooldownRatio += CooldownRatio;

                CommonLogger.LogFormat("SkillCooldownBurf::Modify => 스킬 '{0}'에 쿨타임 버프를 받음. 쿨타임 비율이 {1}만큼 증가함. 현재 : {2}", activeSkill.Information.Name, CooldownRatio, activeSkill.AdditionlCooldownRatio);
            }
        }
Exemple #8
0
    public void Move(Vector3 deltaPosition)
    {
        OnActionStarted();

        CommonLogger.LogFormat("Programmer::Move => 프로그래머가 이동 명령을 받음. DeltaPosition = {0}", deltaPosition);
        StopCoroutine("StartMove");

        StartCoroutine(StartMove(deltaPosition));
    }
        public void Unmodify(ActiveSkill activeSkill)
        {
            if (activeSkill.Information.Type == SkillType.None)
            {
                activeSkill.AdditionalDamageRatio -= DamageBurfRatio;

                CommonLogger.LogFormat("NormalAttackDamageBurf::Unmodify => 스킬 '{0}'의 데미지 버프가 해제됨. 데미지 비율이 {1} 감소함. 현재 : {2}", activeSkill.Information.Name, DamageBurfRatio, activeSkill.AdditionalDamageRatio);
            }
        }
Exemple #10
0
 private void SetToGameOverIfDayExceeded(int currentDays)
 {
     if (currentDays > MaximumDayLimit)
     {
         CommonLogger.LogFormat("StageStatusManager::SetToGameOverIfDayExceeded => 진행 일시가 {0}일을 초과함. 게임 오버!", MaximumDayLimit);
         CurrentStatus = StageStatus.Failure;
         StageManager.Instance.StageUi.TransitionToFailure(string.Format("프로젝트 진행 일시가 {0}일을 초과했습니다.", MaximumDayLimit));
     }
 }
Exemple #11
0
 private void SetToGameOverIfDayIsEqualToLimitAndTurnChangedToBoss(TurnState turn)
 {
     if (turn == TurnState.Boss && ElapsedDays == MaximumDayLimit)
     {
         CommonLogger.LogFormat("StageStatusManager::SetToGameOverIfDayExceeded => 진행 일시가 최대 제한 일수인 {0}일과 같은 상태에서 플레이어 턴이 종료됨. 게임 오버!", ElapsedDays);
         CurrentStatus = StageStatus.Failure;
         StageManager.Instance.StageUi.TransitionToFailure(string.Format("프로젝트 진행 일시가 {0}일을 초과했습니다.", MaximumDayLimit));
     }
 }
        public void Modify(ActiveSkill activeSkill)
        {
            if (activeSkill.Information.Type == SkillType.None)
            {
                activeSkill.AdditionalDamageRatio += DamageBurfRatio;

                CommonLogger.LogFormat("NormalAttackDamageBurf::Modify => 스킬 '{0}'에 데미지 버프를 받음. 데미지 비율이 {1} 증가함. 현재 : {2}", activeSkill.Information.Name, DamageBurfRatio, activeSkill.AdditionalDamageRatio);
            }
        }
Exemple #13
0
    private void Rotate(Vector3 direction)
    {
        CommonLogger.LogFormat("Programmer::Rotate => 프로그래머가 회전 명령을 받음. RotateDirection = {0}", direction);

        var normalizedDirection = direction.normalized;
        var newRotation         = Quaternion.LookRotation(normalizedDirection);

        transform.rotation = newRotation;

        CommonLogger.Log("Programmer::Rotate => 프로그래머가 회전이 완료됨.");
    }
Exemple #14
0
    public void GoVacation(int elapsedDays)
    {
        if (Status.IsOnVacation)
        {
            DebugLogger.LogWarningFormat("Programmer::GoVacation => 프로그래머 '{0}'는 이미 휴가를 떠난 상태지만, 또 휴가를 떠나려고 합니다.", name);
        }

        Status.StartVacationDay = elapsedDays;
        CommonLogger.LogFormat("Programmer::GoVacation => 프로그래머 '{0}'가 {1}일 째에 휴가를 떠납니다.", name, elapsedDays);

        OnActionFinished();
    }
Exemple #15
0
 private void RemoveDeadPlayerIfTurnChangedToPlayer(TurnState turn)
 {
     if (turn == TurnState.Player)
     {
         foreach (var programmer in Programmers.Where(programmer => programmer.IsAlive == false)
                  .ToList())
         {
             CommonLogger.LogFormat("UnitManager::RemoveDeadPlayerIfTurnChangedToPlayer => 프로그래머 {0}가 사망하여 스테이지 내에서 제외됨.", programmer.Status.Name);
             programmerActingDictionary.Remove(programmer);
         }
     }
 }
Exemple #16
0
    private void ForceReturningFromVacationWhenStageFinished(StageStatus stageStatus)
    {
        if (stageStatus != StageStatus.InProgress)
        {
            foreach (var programmer in unitManager.Programmers.Where(programmer => programmer.Status.IsOnVacation).ToList())
            {
                CommonLogger.LogFormat("StageStatusManager::ForceReturningFromVacationWhenStageFinished => 스테이지가 종료되어 {0}가 휴가에서 강제로 돌아옴.", programmer.Status.Name);
                programmer.ReturnFromVacation(ElapsedDays);

                StageManager.Instance.StageUi.ChangeProgrammerAlphaColor(programmer, 1f);
            }
        }
    }
Exemple #17
0
        public void AddSociality(int quantity)
        {
            int currentSocialityBonusLevel = Sociality / 10;
            int updatedSocialityBonusLevel = (Sociality + quantity) / 10;
            int levelDifference            = updatedSocialityBonusLevel - currentSocialityBonusLevel;

            if (levelDifference > 0)
            {
                CommonLogger.LogFormat("ProgrammerStatus::AddSociality => 사교성 증가 효과로 회복량이 {0}만큼 증가함.", 0.03 * levelDifference);
                HealRate += 0.03 * levelDifference;
            }

            Sociality += quantity;
        }
Exemple #18
0
    private void ForceUnapplyAllBurfsWhenStageFinished(StageStatus stageStatus)
    {
        if (stageStatus != StageStatus.InProgress)
        {
            CommonLogger.LogFormat("StageStatusManager::ForceUnapplyAllBurfsWhenStageFinished => 스테이지가 종료되어 버프가 강제로 해제됨.");

            foreach (var programmer in unitManager.Programmers)
            {
                foreach (var burf in programmer.Status.Burfs)
                {
                    programmer.UnregisterBurf(burf);
                }
            }
        }
    }
Exemple #19
0
        public void AddLeadership(int quantity)
        {
            int currentLeadershipBonusLevel = Leadership / 10;
            int updatedLeadershipBonusLevel = (Leadership + quantity) / 10;
            int levelDifference             = updatedLeadershipBonusLevel - currentLeadershipBonusLevel;

            if (levelDifference > 0)
            {
                CommonLogger.LogFormat("ProgrammerStatus::AddLeadership => 리더쉽 증가 효과로 정신력/총 정신력이 {0}만큼 증가함.", 3 * levelDifference);

                FullHealth += 3 * levelDifference;
                Health     += 3 * levelDifference;
            }

            Leadership += quantity;
        }
Exemple #20
0
    public void ReturnFromVacation(int elapsedDays, bool isFinishAction = true)
    {
        if (Status.IsOnVacation == false)
        {
            DebugLogger.LogWarningFormat("Programmer::ReturnFromVacation => 프로그래머 '{0}'는 휴가를 떠나지 않은 상태에서 복귀하려고 합니다.", name);
        }

        Heal(VacationHealthQuantity(elapsedDays));
        Status.StartVacationDay = null;

        CommonLogger.LogFormat("Programmer::ReturnFromVacation => 프로그래머 '{0}'가 {1}일 째에 휴가에서 복귀합니다.", name, elapsedDays);

        if (isFinishAction)
        {
            OnActionFinished();
        }
    }
Exemple #21
0
    public void CheckProgrammerFormation(Vector3 position)
    {
        ResetAppliedFormation();

        foreach (var formation in Formation.formations)
        {
            if (formation.CanApplyFormation())
            {
                CurrentAppliedFormation = formation;

                CommonLogger.LogFormat("UnitManager::CheckProgrammerFormation => 진형 '{0}'가 적용됨.", CurrentAppliedFormation.Name);
                CurrentAppliedFormation.AttachBurfs(NotVacationProgrammers);

                break;
            }
        }
    }
Exemple #22
0
    public void Hurt(int damage)
    {
        if (damage < 0)
        {
            DebugLogger.LogWarningFormat("Programmer::Hurt => {0} 프로그래머가 음수의 데미지를 입음.", name);
        }

        int totalDamage = (int)(damage * (1 + Status.AdditionalDamageRatio));

        Status.Health -= totalDamage;
        OnDamaged(damage);

        CommonLogger.LogFormat("Programmer::Hurt => {0} 프로그래머가 {1}의 데미지를 입음. 남은 체력은 {2}.", name, totalDamage, Status.Health);

        if (IsAlive == false)
        {
            CommonLogger.LogFormat("Programmer::Hurt => {0} 프로그래머가 사망함!", name);
            OnDeath();
        }
    }
        public void Unmodify(GameStage stage)
        {
            var statusManager = StageManager.Instance.Status;

            CommonLogger.LogFormat("MaximumLimitChangedBurf::Modify => 프로젝트 기한 변경 버프가 해제됨. 비율 : {0}, 현재 : {1}", IncreasingRatio, statusManager.MaximumDayLimit);
        }
Exemple #24
0
    private void RequestBossActionIfTurnChangedToBoss(TurnState turn)
    {
        if (Turn == TurnState.Boss)
        {
            if (Programmers.Where(programmer => programmer.Status.IsOnVacation).Count() ==
                Programmers.Count())
            {
                CommonLogger.Log("UnitManager::RequestBossActionIfTurnChangedToBoss => 보스에게 행동을 요청하려 했으나, 모든 프로그래머가 휴가 중이므로 취소됨.");

                StageManager.Instance.StageUi.RenderPlayerText("프로젝트가 아무런 행동도 수행하지 않았습니다.");
                boss.InvokeFinished();
                return;
            }

            CommonLogger.Log("UnitManager::RequestBossActionIfTurnChangedToBoss => 보스에게 행동을 요청함.");

            //Decrease Boss Skill Cool
            foreach (ProjectSkill iter in Boss.Ability.ProjectSkills)
            {
                iter.DecreaseCooldown();
            }
            //Decrease Boss Burf Cool and Remove if it's Cool down
            for (int i = 0, delete = 0; i < Boss.Status.Burf.Count; i++)
            {
                Boss.Status.Burf[i - delete].DecreaseTurn();
                if (Boss.Status.Burf[i - delete].Turn < 1)
                {
                    Boss.Status.Burf.RemoveAt(i - delete);
                    delete++;
                }
            }

            if (UnityEngine.Random.Range(0, 12) > 9)
            {
                //MOVE
                StageManager.Instance.MoveBoss();
                StageManager.Instance.StageUi.RenderPlayerText("프로젝트의 방향이 전환되었습니다!");
            }
            else
            {
                //DO Attack or Skill
                var usedSkill = boss.Invoke();
                if (usedSkill is ISoundProducible)
                {
                    var clip = (usedSkill as ISoundProducible).EffectSound;
                    SoundManager.Instance.FetchAvailableSource().PlayOneShot(clip);
                }

                StageManager.Instance.StageUi.RenderBossSkillNotice(usedSkill);

                CommonLogger.LogFormat("UnitManager::RequestBossActionIfTurnChangedToBoss => 보스가 {0} 스킬을 사용함.", usedSkill.Information.Name);

                switch (usedSkill.Information.Type)
                {
                case ProjectSkillType.SingleAttack:
                    InvokeSkill((ProjectSingleAttackSkill)usedSkill);
                    break;

                case ProjectSkillType.MultiAttack:
                    InvokeSkill((ProjectMultiAttackSkill)usedSkill);
                    break;

                case ProjectSkillType.SingleDeburf:
                    InvokeSkill((ProjectSingleDeburfSkill)usedSkill);
                    break;

                case ProjectSkillType.MultiDeburf:
                    InvokeSkill((ProjectMultiDeburfSkill)usedSkill);
                    break;

                case ProjectSkillType.Burf:
                    InvokeSkill((ProjectBurfSkill)usedSkill);
                    break;
                }
            }

            if (Turn != TurnState.GameEnd)
            {
                boss.InvokeFinished();
            }
        }
    }
Exemple #25
0
 public void Unmodify(ProgrammerStatus status)
 {
     CommonLogger.LogFormat("LeadershipBurf::Unmodify => 프로그래머 '{0}'에 적용된 리더십 버프가 해제됨.", status.Name);
 }
Exemple #26
0
 public void Unmodify(ProgrammerStatus status)
 {
     status.IsMovable = !MoveState;
     CommonLogger.LogFormat("MovableBurf::Unmodify => 프로그래머 '{0}'의 이동 여부가 재설정됨. 값 = {1}", status.Name, !MoveState);
 }
Exemple #27
0
        public void Unmodify(ProgrammerStatus status)
        {
            status.AdditionalDamageRatio -= IncreaseRatio;

            CommonLogger.LogFormat("DamageIncreaseDeburf::Modify => 프로그래머 '{0}'의 피격 데미지 버프가 해제됨. 피격 데미지 비율이 {1} 감소함. 현재 : {2}", status.Name, IncreaseRatio, status.AdditionalDamageRatio);
        }
Exemple #28
0
        public void Modify(ProgrammerStatus status)
        {
            status.AdditionalDamageRatio += IncreaseRatio;

            CommonLogger.LogFormat("DamageIncreaseDeburf::Modify => 프로그래머 '{0}'가 피격 데미지 버프를 받음. 피격 데미지 비율이 {1} 증가함. 현재 : {2}", status.Name, IncreaseRatio, status.AdditionalDamageRatio);
        }
Exemple #29
0
 public void Modify(ProgrammerStatus status)
 {
     status.AddLeadership(Leadership);
     CommonLogger.LogFormat("LeadershipBurf::Modify => 프로그래머 '{0}'의 리더십이 {1}만큼 증가함.", status.Name, Leadership);
 }
Exemple #30
0
    public static void LogFormat(string format, params object[] args)
    {
#if UNITY_EDITOR
        CommonLogger.LogFormat(format, args);
#endif
    }