Merge branch 'main' into DEG-165-세이브-강화-폴리싱

This commit is contained in:
99jamin 2025-05-14 17:11:47 +09:00
commit e1cc3a8c80
21 changed files with 118 additions and 67 deletions

View File

@ -64,6 +64,9 @@ public class PlayerController : CharacterBase, IObserver<GameObject>
public bool IsBattle => _isBattle; public bool IsBattle => _isBattle;
public Transform DashEffectAnchor => dashEffectAnchor; public Transform DashEffectAnchor => dashEffectAnchor;
[Header("대시, 어택 터치 연출용")]
[SerializeField] private DungeonPanelController dungeonPanelController;
private void Awake() private void Awake()
{ {
if (Joystick == null) if (Joystick == null)
@ -126,6 +129,7 @@ public class PlayerController : CharacterBase, IObserver<GameObject>
// 대시 우선 입력 처리 // 대시 우선 입력 처리
if (Input.GetKeyDown(KeyCode.Space)) if (Input.GetKeyDown(KeyCode.Space))
{ {
dungeonPanelController.DashTouchMotion();
StartDashAction(); StartDashAction();
return; return;
} }
@ -134,6 +138,7 @@ public class PlayerController : CharacterBase, IObserver<GameObject>
if (Input.GetKeyDown(KeyCode.X) && (_currentAction == null || !_currentAction.IsActive) if (Input.GetKeyDown(KeyCode.X) && (_currentAction == null || !_currentAction.IsActive)
&& (CurrentState != PlayerState.Win && CurrentState != PlayerState.Dead)) && (CurrentState != PlayerState.Win && CurrentState != PlayerState.Dead))
{ {
dungeonPanelController.AttackTouchMotion();
GameManager.Instance.PlayPlayerAttackSound(); GameManager.Instance.PlayPlayerAttackSound();
StartAttackAction(); StartAttackAction();
} }

View File

@ -109,7 +109,11 @@ public class DungeonLogic : MonoBehaviour
_player.SetState(PlayerState.Win); _player.SetState(PlayerState.Win);
// TODO: 강화 시스템으로 넘어가고 일상 맵으로 이동 // TODO: 강화 시스템으로 넘어가고 일상 맵으로 이동
GameManager.Instance.PanelManager.GetPanel("ClearPanelBG"); var clearPanel = GameManager.Instance.PanelManager.GetPanel("ClearPanelBG").GetComponent<ClearPanelController>();
clearPanel.Show(() =>
{
UpgradeManager.Instance.StartUpgrade();
});
} }
} }
@ -128,7 +132,11 @@ public class DungeonLogic : MonoBehaviour
_player.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast"); _player.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");
_enemy.SetState(EnemyState.Idle); _enemy.SetState(EnemyState.Idle);
GameManager.Instance.PanelManager.GetPanel("FailedPanelBG"); var failedPanel = GameManager.Instance.PanelManager.GetPanel("FailedPanelBG").GetComponent<FailedPanelController>();
failedPanel.Show(() =>
{
//Todo: 실패 패널 이후 진행할 행동
});
StartCoroutine(DelayedSceneChange()); // 5초 대기 후 전환 StartCoroutine(DelayedSceneChange()); // 5초 대기 후 전환
} }

View File

@ -11,6 +11,11 @@ public class DungeonPanelController : MonoBehaviour
private int _countHealth = 0; private int _countHealth = 0;
private int visibleHeartCount = 3; // 강화 레벨로 설정됨 private int visibleHeartCount = 3; // 강화 레벨로 설정됨
//PC 키보드 입력 시 버튼 색상 변경
[SerializeField] private GameObject dashPressedImage;
[SerializeField] private GameObject attackPressedImage;
private float pressedTime = .1f;
private void Start() private void Start()
{ {
int level = UpgradeManager.Instance.upgradeStat.CurrentUpgradeLevel(StatType.Heart); // 1~3 int level = UpgradeManager.Instance.upgradeStat.CurrentUpgradeLevel(StatType.Heart); // 1~3
@ -50,4 +55,36 @@ public class DungeonPanelController : MonoBehaviour
{ {
yield return new WaitForSeconds(1.0f); yield return new WaitForSeconds(1.0f);
} }
#region PC입력
public void DashTouchMotion()
{
StopCoroutine(DashButtonColorChange());
StartCoroutine(DashButtonColorChange());
}
public void AttackTouchMotion()
{
StopCoroutine(AttackButtonColorChange());
StartCoroutine(AttackButtonColorChange());
}
private IEnumerator DashButtonColorChange()
{
dashPressedImage.SetActive(true);
yield return new WaitForSeconds(pressedTime);
dashPressedImage.SetActive(false);
}
private IEnumerator AttackButtonColorChange()
{
attackPressedImage.SetActive(true);
yield return new WaitForSeconds(pressedTime);
attackPressedImage.SetActive(false);
}
#endregion
} }

View File

@ -51,6 +51,7 @@ public class PlayerStats : MonoBehaviour,ISaveable
private bool _isActiveBubble; private bool _isActiveBubble;
private bool _hasShownBubbleToday; // 하루에 말풍선 하나만 표시하기 private bool _hasShownBubbleToday; // 하루에 말풍선 하나만 표시하기
private InteractionAnimationPanelController _interactionAnimation; // 상호작용 패널 Active 여부 확인 private InteractionAnimationPanelController _interactionAnimation; // 상호작용 패널 Active 여부 확인
private HousingCanvasController _housingCanvasController; // 돌발 패널 Active 여부 확인
private int _mealCount; private int _mealCount;
public int MealCount => _mealCount; public int MealCount => _mealCount;
@ -150,9 +151,15 @@ public class PlayerStats : MonoBehaviour,ISaveable
_interactionAnimation = panelController; _interactionAnimation = panelController;
} }
public void SetHousingCanvasController(HousingCanvasController canvasController)
{
_housingCanvasController = canvasController;
}
public void ShowBubble() public void ShowBubble()
{ {
if (_interactionAnimation != null && _interactionAnimation.IsPanelActive()) return; if (_interactionAnimation != null && _interactionAnimation.IsPanelActive()) return;
if (_housingCanvasController != null && _housingCanvasController.IsSuddenPanelActive()) return;
if(_isActiveBubble) if(_isActiveBubble)
_speechBubbleFollower.ShowMessage(); _speechBubbleFollower.ShowMessage();

BIN
Assets/KSH/ReDungeon.unity (Stored with Git LFS)

Binary file not shown.

View File

@ -41,7 +41,7 @@ public class ValueByAction
{ ActionType.Dungeon, new ActionEffect(+3.0f, -3.0f, 0) }, { ActionType.Dungeon, new ActionEffect(+3.0f, -3.0f, 0) },
{ ActionType.Housework, new ActionEffect(+1.0f, -1.0f, +0.2f) }, { ActionType.Housework, new ActionEffect(+1.0f, -1.0f, +0.2f) },
{ ActionType.OvertimeWork, new ActionEffect(+4.0f, -5.0f, +1.0f) }, { ActionType.OvertimeWork, new ActionEffect(+4.0f, -5.0f, +1.0f) },
{ ActionType.TeamDinner, new ActionEffect(_gameConstants.forcedValue, _gameConstants.forcedValue, 0) }, // 수면 강제(8시 기상) 후 최대 체력 { ActionType.TeamDinner, new ActionEffect(_gameConstants.forcedValue, +8.0f, 0) }, // 수면 강제(8시 기상) 후 최대 체력
{ ActionType.Absence, new ActionEffect(0, 0, -3.0f) } { ActionType.Absence, new ActionEffect(0, 0, -3.0f) }
}; };
} }

BIN
Assets/LIN/Prefabs/Attack Button Image.prefab (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8822dc0c2e8b5bc498036a19194f8827
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/LIN/Prefabs/Dash Button Image.prefab (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 76f779210ea250641b4559dfc6d379b5
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/LIN/ReDungeon UI Copy.unity (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ce2ba637dd19c434fa2eb509c2ad4270
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/LIN/ReHousing Loding Anim.unity (Stored with Git LFS)

Binary file not shown.

View File

@ -16,8 +16,10 @@ public class InteractionController : MonoBehaviour
private void Start() private void Start()
{ {
PlayerStats.Instance.OnWorked -= SuddenAfterWorkEventHappen;
PlayerStats.Instance.OnWorked += SuddenAfterWorkEventHappen; PlayerStats.Instance.OnWorked += SuddenAfterWorkEventHappen;
PlayerStats.Instance.SetInteractionPanelController(interactionAnimationPanelController); PlayerStats.Instance.SetInteractionPanelController(interactionAnimationPanelController);
PlayerStats.Instance.SetHousingCanvasController(housingCanvasController);
} }
// 상호작용 가능한 사물 범위에 들어올 때 // 상호작용 가능한 사물 범위에 들어올 때

View File

@ -32,19 +32,6 @@ public class HousingCanvasController : MonoBehaviour
suddenPanel.SetActive(false); suddenPanel.SetActive(false);
} }
/// <summary>
/// 씬전환 로딩 패널 테스트용 코드.던전에서도 씬전환 할 때 해당 코드 사용하시면 됩니다.
/// </summary>
private void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
var _switchingPanel = Instantiate(switchingPanel,this.transform);
switchingPanelController = _switchingPanel.GetComponent<SwitchingPanelController>();
switchingPanelController.FadeAndSceneLoad("ReDungeon");
}
}
#region NPC #region NPC
public void ShowNpcInteractionButton(Action onInteractionButtonPressed) public void ShowNpcInteractionButton(Action onInteractionButtonPressed)
@ -152,6 +139,12 @@ public class HousingCanvasController : MonoBehaviour
_autoHideCoroutine = null; _autoHideCoroutine = null;
} }
public bool IsSuddenPanelActive()
{
return suddenPanel.activeSelf;
}
#endregion #endregion
} }

View File

@ -4,7 +4,6 @@ using System.Collections.Generic;
using DG.Tweening; using DG.Tweening;
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
using UnityEngine.PlayerLoop;
using UnityEngine.UI; using UnityEngine.UI;
public class ClearPanelController : PanelController, IPointerClickHandler public class ClearPanelController : PanelController, IPointerClickHandler
@ -12,24 +11,10 @@ public class ClearPanelController : PanelController, IPointerClickHandler
[SerializeField] private CanvasGroup clearPanel; [SerializeField] private CanvasGroup clearPanel;
[SerializeField] private Image clearPanelArmImage; [SerializeField] private Image clearPanelArmImage;
[SerializeField] private Image clearTextImage; [SerializeField] private Image clearTextImage;
[SerializeField] private Image clearPanelBGImage;
private Image _clearPanelBGImage;
public Action onCompleted; public Action onCompleted;
private void Awake()
{
base.Awake();
_clearPanelBGImage = GetComponent<Image>();
}
private void Start()
{
//임시 코드
Show(() =>
{
Debug.Log("OnCompleted");
});
}
public void Show(Action onCompleted) public void Show(Action onCompleted)
{ {
base.Show(); base.Show();
@ -39,7 +24,7 @@ public class ClearPanelController : PanelController, IPointerClickHandler
private void Init() private void Init()
{ {
_clearPanelBGImage.DOFade(0, 0); clearPanelBGImage.DOFade(0, 0);
clearTextImage.rectTransform.localScale = Vector3.zero; clearTextImage.rectTransform.localScale = Vector3.zero;
clearTextImage.DOFade(0, 0); clearTextImage.DOFade(0, 0);
clearPanel.DOFade(0, 0); clearPanel.DOFade(0, 0);
@ -49,7 +34,7 @@ public class ClearPanelController : PanelController, IPointerClickHandler
private void ClearAnimation() private void ClearAnimation()
{ {
Sequence seq = DOTween.Sequence(); Sequence seq = DOTween.Sequence();
seq.Append(_clearPanelBGImage.DOFade(0.98f, 0.5f)) seq.Append(clearPanelBGImage.DOFade(0.98f, 0.5f))
.Append(clearPanel.DOFade(1, 0.5f)) .Append(clearPanel.DOFade(1, 0.5f))
.Append(clearPanelArmImage.rectTransform.DORotate(new Vector3(0, 0, 15), 0.3f)) .Append(clearPanelArmImage.rectTransform.DORotate(new Vector3(0, 0, 15), 0.3f))
.Append(clearPanelArmImage.rectTransform.DORotate(Vector3.zero, 0.3f)) .Append(clearPanelArmImage.rectTransform.DORotate(Vector3.zero, 0.3f))
@ -61,6 +46,5 @@ public class ClearPanelController : PanelController, IPointerClickHandler
{ {
onCompleted?.Invoke(); onCompleted?.Invoke();
Hide(); Hide();
UpgradeManager.Instance.StartUpgrade();
} }
} }

View File

@ -11,25 +11,10 @@ public class FailedPanelController : PanelController, IPointerClickHandler
[SerializeField] private CanvasGroup failedPanel; [SerializeField] private CanvasGroup failedPanel;
[SerializeField] private Image failedPanelArmImage; [SerializeField] private Image failedPanelArmImage;
[SerializeField] private Image failedTextImage; [SerializeField] private Image failedTextImage;
[SerializeField] private Image failedPanelBGImage;
private Image _failedPanelBGImage;
public Action onCompleted; public Action onCompleted;
private void Awake()
{
base.Awake();
_failedPanelBGImage = GetComponent<Image>();
}
private void Start()
{
//임시 코드
Show(() =>
{
Debug.Log("OnCompleted");
});
}
public void Show(Action onCompleted) public void Show(Action onCompleted)
{ {
base.Show(); base.Show();
@ -39,7 +24,7 @@ public class FailedPanelController : PanelController, IPointerClickHandler
private void Init() private void Init()
{ {
_failedPanelBGImage.DOFade(0, 0); failedPanelBGImage.DOFade(0, 0);
failedTextImage.DOFade(0, 0); failedTextImage.DOFade(0, 0);
failedTextImage.rectTransform.DOScale(0, 0); failedTextImage.rectTransform.DOScale(0, 0);
failedPanel.DOFade(0, 0); failedPanel.DOFade(0, 0);
@ -49,7 +34,7 @@ public class FailedPanelController : PanelController, IPointerClickHandler
private void FailedAnimation() private void FailedAnimation()
{ {
Sequence seq = DOTween.Sequence(); Sequence seq = DOTween.Sequence();
seq.Append(_failedPanelBGImage.DOFade(0.98f, 0.5f)) seq.Append(failedPanelBGImage.DOFade(0.98f, 0.5f))
.Append(failedPanel.DOFade(1, 0.5f)) .Append(failedPanel.DOFade(1, 0.5f))
.Append(failedPanelArmImage.rectTransform.DORotate(new Vector3(0, 0, 15), 0.3f)) .Append(failedPanelArmImage.rectTransform.DORotate(new Vector3(0, 0, 15), 0.3f))
.Append(failedPanelArmImage.rectTransform.DORotate(Vector3.zero, 0.3f)) .Append(failedPanelArmImage.rectTransform.DORotate(Vector3.zero, 0.3f))

BIN
Assets/Prefabs/ReDungeon/Canvas.prefab (Stored with Git LFS)

Binary file not shown.

BIN
Assets/Prefabs/ReHousing/Canvas.prefab (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.