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)); } } } }
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); }
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! } } }
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); }
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); } }
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); } }
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); } }
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)); } }
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); } }
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 => 프로그래머가 회전이 완료됨."); }
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(); }
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); } } }
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); } } }
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; }
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); } } } }
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; }
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(); } }
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; } } }
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); }
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(); } } }
public void Unmodify(ProgrammerStatus status) { CommonLogger.LogFormat("LeadershipBurf::Unmodify => 프로그래머 '{0}'에 적용된 리더십 버프가 해제됨.", status.Name); }
public void Unmodify(ProgrammerStatus status) { status.IsMovable = !MoveState; CommonLogger.LogFormat("MovableBurf::Unmodify => 프로그래머 '{0}'의 이동 여부가 재설정됨. 값 = {1}", status.Name, !MoveState); }
public void Unmodify(ProgrammerStatus status) { status.AdditionalDamageRatio -= IncreaseRatio; CommonLogger.LogFormat("DamageIncreaseDeburf::Modify => 프로그래머 '{0}'의 피격 데미지 버프가 해제됨. 피격 데미지 비율이 {1} 감소함. 현재 : {2}", status.Name, IncreaseRatio, status.AdditionalDamageRatio); }
public void Modify(ProgrammerStatus status) { status.AdditionalDamageRatio += IncreaseRatio; CommonLogger.LogFormat("DamageIncreaseDeburf::Modify => 프로그래머 '{0}'가 피격 데미지 버프를 받음. 피격 데미지 비율이 {1} 증가함. 현재 : {2}", status.Name, IncreaseRatio, status.AdditionalDamageRatio); }
public void Modify(ProgrammerStatus status) { status.AddLeadership(Leadership); CommonLogger.LogFormat("LeadershipBurf::Modify => 프로그래머 '{0}'의 리더십이 {1}만큼 증가함.", status.Name, Leadership); }
public static void LogFormat(string format, params object[] args) { #if UNITY_EDITOR CommonLogger.LogFormat(format, args); #endif }