diff --git a/Assets/LIN/Housing Copy.unity b/Assets/LIN/Housing Copy.unity deleted file mode 100644 index b9596720..00000000 --- a/Assets/LIN/Housing Copy.unity +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:243765a59e3126abd17abc02258bff6f2428294a5d373dacfe09c3ba123b5b96 -size 338192 diff --git a/Assets/LIN/ReHousing Copy.unity b/Assets/LIN/ReHousing Copy.unity new file mode 100644 index 00000000..e9025304 --- /dev/null +++ b/Assets/LIN/ReHousing Copy.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3f305cf446df76596f25e4ba247f35283cfba1441d7b2da7bfc3dcce6811e0a +size 607385 diff --git a/Assets/LIN/Housing Copy.unity.meta b/Assets/LIN/ReHousing Copy.unity.meta similarity index 74% rename from Assets/LIN/Housing Copy.unity.meta rename to Assets/LIN/ReHousing Copy.unity.meta index 221d7670..35a662c6 100644 --- a/Assets/LIN/Housing Copy.unity.meta +++ b/Assets/LIN/ReHousing Copy.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 86c6ebc5f9b48c345bd9d6f402bdc848 +guid: 5324096d5b520144d873395ac6861fe5 DefaultImporter: externalObjects: {} userData: diff --git a/Assets/LIN/Resources.meta b/Assets/LIN/Resources.meta new file mode 100644 index 00000000..c8032f4f --- /dev/null +++ b/Assets/LIN/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0e2ae75cada1f20448baf1ac68f1a31d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/LIN/Scripts/DailyRoutine/InteractionController.cs b/Assets/LIN/Scripts/DailyRoutine/InteractionController.cs index 1814305a..8efea623 100644 --- a/Assets/LIN/Scripts/DailyRoutine/InteractionController.cs +++ b/Assets/LIN/Scripts/DailyRoutine/InteractionController.cs @@ -3,17 +3,17 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Serialization; +using Random = UnityEngine.Random; [RequireComponent(typeof(Rigidbody))] public class InteractionController : MonoBehaviour { [SerializeField] LayerMask interactionLayerMask; - [FormerlySerializedAs("housingCanvasManager")] - [Header("UI 연동")] - [SerializeField] HousingCanvasController housingCanvasController; + + [FormerlySerializedAs("housingCanvasManager")] [Header("UI 연동")] [SerializeField] + HousingCanvasController housingCanvasController; + [SerializeField] private InteractionAnimationPanelController interactionAnimationPanelController; - - private SuddenEventController _suddenEventController = new SuddenEventController(); private void Start() { @@ -23,88 +23,98 @@ public class InteractionController : MonoBehaviour // 상호작용 가능한 사물 범위에 들어올 때 private void OnTriggerEnter(Collider other) { - if(other.gameObject.layer == LayerMask.NameToLayer("NPC")) + if (other.gameObject.layer == LayerMask.NameToLayer("NPC")) { housingCanvasController.ShowNpcInteractionButton(() => { GameManager.Instance.StartNPCDialogue(GamePhase.Gameplay); }); } - + if (interactionLayerMask == (interactionLayerMask | (1 << other.gameObject.layer))) { ActionType interactionType = other.gameObject.GetComponent().RoutineEnter(); - if( interactionType != null ) + if (interactionType != null) { PopActionOnScreen(interactionType); } } } + // 사물에서 벗어날 때 UI 정리 private void OnTriggerExit(Collider other) { - if(other.gameObject.layer == LayerMask.NameToLayer("NPC")) housingCanvasController.HideInteractionButton(); - + if (other.gameObject.layer == LayerMask.NameToLayer("NPC")) housingCanvasController.HideInteractionButton(); + if (interactionLayerMask == (interactionLayerMask | (1 << other.gameObject.layer))) { housingCanvasController.HideInteractionButton(); housingCanvasController.interactionTextsController.InitInteractionTexts(); } } - + // ActionType 별로 화면에 상호작용 내용 표시, 상호작용 버튼에 이벤트 작성 private void PopActionOnScreen(ActionType interactionType) { HousingConstants.interactions.TryGetValue(interactionType, out var interactionTexts); - - housingCanvasController.ShowInteractionButton(interactionTexts.ActionText,interactionTexts.DescriptionText,()=> - { - if (PlayerStats.Instance.CanPerformByHealth(interactionType)) - { - PlayerStats.Instance.PerformAction(interactionType); - if (interactionType == ActionType.Dungeon) + housingCanvasController.ShowInteractionButton(interactionTexts.ActionText, interactionTexts.DescriptionText, + () => + { + if (PlayerStats.Instance.CanPerformByHealth(interactionType)) { - GameManager.Instance.ChangeToGameScene(); + PlayerStats.Instance.PerformAction(interactionType); + + if (interactionType == ActionType.Dungeon) + { + GameManager.Instance.ChangeToGameScene(); + } + else + { + GameManager.Instance.PlayInteractionSound(interactionType); + interactionAnimationPanelController.ShowAnimationPanel(interactionType, + interactionTexts.AnimationText); + } } else { - GameManager.Instance.PlayInteractionSound(interactionType); - interactionAnimationPanelController.ShowAnimationPanel(interactionType,interactionTexts.AnimationText); + housingCanvasController.interactionTextsController.ActiveTexts(interactionTexts.LackOfHealth); } - } - else - { - housingCanvasController.interactionTextsController.ActiveTexts(interactionTexts.LackOfHealth); - } - }); + }); } public Action SuddenEventHappen() { return null; } - - public void SuddenAfterWorkEventHappen() + + //퇴근 후 돌발 이벤트 + private AfterWorkEventType SuddenEventCalculator() { - AfterWorkEvent afterWorkEvent = _suddenEventController.SuddenEventCalculator(); - if (afterWorkEvent == AfterWorkEvent.None) - return; - switch (afterWorkEvent) + var index = Random.Range(0, HousingConstants.AFTER_WORK_DENOMINATOR); + return HousingConstants.AfterWorkEvents.GetValueOrDefault(index, AfterWorkEventType.None); + } + + private void SuddenAfterWorkEventHappen() + { + AfterWorkEventType afterWorkEventType = SuddenEventCalculator(); + Debug.Log(afterWorkEventType); + + if (afterWorkEventType == AfterWorkEventType.None) return; + switch (afterWorkEventType) { - case AfterWorkEvent.OvertimeWork: + case AfterWorkEventType.OvertimeWork: housingCanvasController.ShowSuddenEventPanel("부장님이 퇴근을 안하셔.. 야근할까?", () => { - //Todo: 컷씬과 스테이터스 변경 - housingCanvasController.HideSuddenEventPanel(); + housingCanvasController.ShowSuddenEventImage(0); + //Todo: 스테이터스 변경 }); break; - case AfterWorkEvent.TeamGathering: - housingCanvasController.ShowSuddenEventPanel("갑자기 팀 회식이 잡혔다. 참석 하러 가자", () => - { - housingCanvasController.HideSuddenEventPanel(); - }); + case AfterWorkEventType.TeamGathering: + housingCanvasController.ShowSuddenEventPanel("갑자기 팀 회식이 잡혔다. 참석 하러 가자", + () => { housingCanvasController.ShowSuddenEventImage(1); }); break; } + } } diff --git a/Assets/LIN/Scripts/SuddenEventController.cs b/Assets/LIN/Scripts/SuddenEventController.cs deleted file mode 100644 index f334803b..00000000 --- a/Assets/LIN/Scripts/SuddenEventController.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using Random = UnityEngine.Random; - -public class SuddenEventController -{ - // 랜덤 값에 일치하는 함수를 리턴하기 위한 딕셔너리 - // AFTER_WORK_DENOMINATOR 값 확정 후에 키 값 수정 - private Dictionary afterWorkEvents = new Dictionary(); - public SuddenEventController() - { - afterWorkEvents.Add(0, AfterWorkEvent.OvertimeWork); - afterWorkEvents.Add(1, AfterWorkEvent.TeamGathering); - } - - //퇴근 후 돌발 이벤트 - public AfterWorkEvent SuddenEventCalculator() - { - var index = Random.Range(0,HousingConstants.AFTER_WORK_DENOMINATOR); - return afterWorkEvents.GetValueOrDefault(index, AfterWorkEvent.None); - } - -} diff --git a/Assets/LIN/Scripts/SuddenEventController.cs.meta b/Assets/LIN/Scripts/SuddenEventController.cs.meta deleted file mode 100644 index 9645366a..00000000 --- a/Assets/LIN/Scripts/SuddenEventController.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 26ce8577425c4630903173b182839514 -timeCreated: 1745306651 \ No newline at end of file diff --git a/Assets/LIN/Scripts/UI/HousingCanvasController.cs b/Assets/LIN/Scripts/UI/HousingCanvasController.cs index 5259ac73..a97366ee 100644 --- a/Assets/LIN/Scripts/UI/HousingCanvasController.cs +++ b/Assets/LIN/Scripts/UI/HousingCanvasController.cs @@ -14,7 +14,10 @@ public class HousingCanvasController : MonoBehaviour [Header("돌발 이벤트")] [SerializeField] private GameObject suddenPanel; [SerializeField] private TMP_Text suddenText; + [SerializeField] private GameObject[] suddenEventImages; + private Coroutine _autoHideCoroutine; + public Action OnInteractionButtonPressed; public Action OnSuddenButtonPressed; @@ -72,6 +75,7 @@ public class HousingCanvasController : MonoBehaviour #region 돌발 이벤트 public void ShowSuddenEventPanel(string actText, Action onSuddenButtonPressed) { + Debug.Log("call evenet panel show"); suddenPanel.SetActive(true); suddenText.text = actText; OnSuddenButtonPressed += onSuddenButtonPressed; @@ -84,8 +88,46 @@ public class HousingCanvasController : MonoBehaviour } public void OnSuddenConfirmButton() { + suddenText.text = ""; OnSuddenButtonPressed?.Invoke(); } + + public void ShowSuddenEventImage(int index) + { + if (_autoHideCoroutine != null) StopCoroutine(_autoHideCoroutine); + + suddenEventImages[index].SetActive(true); + //사운드 재생 + + _autoHideCoroutine = StartCoroutine(AutoHideSuddenImage()); + + } + + public void HideSuddenEventImage() + { + foreach (var image in suddenEventImages) + { + image.SetActive(false); + } + } + private IEnumerator AutoHideSuddenImage() + { + float startTime = Time.time; + while (Time.time - startTime < 2.0f) + { + if (Input.touchCount > 0 || Input.GetMouseButtonDown(0)) + { + break; + } + yield return null; + } + + //패널 닫고 애니메이션 null처리 + HideSuddenEventImage(); + HideSuddenEventPanel(); + + _autoHideCoroutine = null; + } #endregion } diff --git a/Assets/LIN/Scripts/UI/HousingConstants.cs b/Assets/LIN/Scripts/UI/HousingConstants.cs index 4ff9d56c..88ad2c0b 100644 --- a/Assets/LIN/Scripts/UI/HousingConstants.cs +++ b/Assets/LIN/Scripts/UI/HousingConstants.cs @@ -2,7 +2,8 @@ using System.Collections.Generic; -public enum AfterWorkEvent + +public enum AfterWorkEventType { None, TeamGathering, @@ -12,7 +13,9 @@ public enum AfterWorkEvent public static class HousingConstants { //돌발 이벤트 확률 계산 - public static int AFTER_WORK_DENOMINATOR = 4; + public static int AFTER_WORK_DENOMINATOR = 2; + //돌발 이벤트 보여줄 시간 + public static float SUDDENEVENT_IAMGE_SHOW_TIME = 3.0f; #region 상호작용 멘트 @@ -47,4 +50,11 @@ public static class HousingConstants AnimationText = animationText; } } + + // 랜덤 값에 일치하는 함수를 리턴하기 위한 딕셔너리 + // AFTER_WORK_DENOMINATOR 값 확정 후에 키 값 수정 + public static readonly Dictionary AfterWorkEvents = new Dictionary { + {0, AfterWorkEventType.OvertimeWork}, + {1, AfterWorkEventType.TeamGathering} + }; } diff --git a/Assets/LIN/Scripts/UI/SuddenEventPanelController.cs b/Assets/LIN/Scripts/UI/SuddenEventPanelController.cs new file mode 100644 index 00000000..e69de29b diff --git a/Assets/LIN/Scripts/UI/SuddenEventPanelController.cs.meta b/Assets/LIN/Scripts/UI/SuddenEventPanelController.cs.meta new file mode 100644 index 00000000..3efc0576 --- /dev/null +++ b/Assets/LIN/Scripts/UI/SuddenEventPanelController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 82021c35b93bcfb4885be342e5ddd363 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/LIN/Sprites/LateWork.PNG b/Assets/LIN/Sprites/LateWork.PNG new file mode 100644 index 00000000..fe42c53c --- /dev/null +++ b/Assets/LIN/Sprites/LateWork.PNG @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e694da398fd95078615b05a4466907f7e05c8750afda731653babf85cf9b690 +size 443788 diff --git a/Assets/LIN/Sprites/LateWork.PNG.meta b/Assets/LIN/Sprites/LateWork.PNG.meta new file mode 100644 index 00000000..4036a83c --- /dev/null +++ b/Assets/LIN/Sprites/LateWork.PNG.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: ccfd5bb6682e8484d8088d1a70dc9ccb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/LIN/Sprites/TeamGathering.png b/Assets/LIN/Sprites/TeamGathering.png new file mode 100644 index 00000000..9a146f3c --- /dev/null +++ b/Assets/LIN/Sprites/TeamGathering.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b226758da91494d86f71fdb18cd28ac8d06908c609ed4499c3fadb13218ddb95 +size 488518 diff --git a/Assets/LIN/Sprites/TeamGathering.png.meta b/Assets/LIN/Sprites/TeamGathering.png.meta new file mode 100644 index 00000000..eae074f3 --- /dev/null +++ b/Assets/LIN/Sprites/TeamGathering.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 516de2d9e0014d74bbec3c4a248d927c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: