0.3.4.3 업데이트

This commit is contained in:
Nam Tae Gun 2024-11-18 00:36:08 +09:00
parent 4d9362fc20
commit fc0b648b04
67 changed files with 732 additions and 44 deletions

View File

@ -112,7 +112,7 @@ namespace BlueWater.Audios
_bgmAudioSource.Stop();
}
public void PlaySfx(string sfxName, float? duration = null)
public void PlaySfx(string sfxName, bool loop = false, bool ignoreTimeScale = false, float? duration = null)
{
if (_sfxDictionary.TryGetValue(sfxName, out var value))
{
@ -125,10 +125,21 @@ namespace BlueWater.Audios
}
var availableSfxAudioSource = GetAvailableSfxAudioSource();
availableSfxAudioSource.clip = value;
_sfxPitchDictionary[availableSfxAudioSource] = duration.HasValue ? value.length / duration.Value : 1f;
availableSfxAudioSource.pitch = _sfxPitchDictionary[availableSfxAudioSource] * Time.timeScale;
availableSfxAudioSource.Play();
availableSfxAudioSource.loop = loop;
if (ignoreTimeScale)
{
// Time.timeScale 영향을 받지 않는 효과음 처리
availableSfxAudioSource.pitch = duration.HasValue ? value.length / duration.Value : 1f;
}
else
{
// Time.timeScale 적용
_sfxPitchDictionary[availableSfxAudioSource] = duration.HasValue ? value.length / duration.Value : 1f;
availableSfxAudioSource.pitch = _sfxPitchDictionary[availableSfxAudioSource] * Time.timeScale;
}
availableSfxAudioSource.Play();
_sfxPlayTimeDictionary[sfxName] = Time.time;
}
else

View File

@ -1,5 +1,6 @@
using System;
using BehaviorDesigner.Runtime;
using BlueWater.Audios;
using BlueWater.Enemies;
using BlueWater.Interfaces;
using BlueWater.Items;
@ -125,6 +126,12 @@ namespace BlueWater.Npcs.Customers
public bool IsMoving { get; private set; }
public bool IsVomited { get; private set; }
[SerializeField]
private string _succeedServingSfxName = "SucceedServing";
[SerializeField]
private string _failedServingSfxName = "FailedServing";
private Vector3 _currentDirection = Vector3.right;
public Vector3 CurrentDirection
@ -323,6 +330,7 @@ namespace BlueWater.Npcs.Customers
IsOrderedCorrected = currentPickupItem.Idx == OrderedCocktailData.Idx;
IsReceivedItem = true;
IsServedPlayer = true;
AudioManager.Instance.PlaySfx(IsOrderedCorrected ? _succeedServingSfxName : _failedServingSfxName);
ServedItem(servedCocktailData);
break;
default:
@ -446,7 +454,7 @@ namespace BlueWater.Npcs.Customers
{
var gold = (int)(CurrentLevelData.Gold * TycoonManager.Instance.TycoonStatus.GoldMultiplier);
_moneyCounter.AddCurrentMoney(gold);
_moneyCounter.AddCurrentGold(gold);
}
public void Vomit()

View File

@ -1,8 +1,6 @@
using System;
using System.Collections;
using BlueWater.Audios;
using BlueWater.Interfaces;
using BlueWater.Uis;
using BlueWater.Utility;
using Sirenix.OdinInspector;
using UnityEngine;
@ -30,6 +28,10 @@ namespace BlueWater.Players
[field: SerializeField]
public bool IsInvincible { get; private set; }
[SerializeField]
private string heartRecoverySfxName;
private WaitForSeconds _flashWhiteWaitTime;
private Coroutine _flashWhiteCoroutine;
private Coroutine _damageIntervalCoroutine;
@ -70,8 +72,18 @@ namespace BlueWater.Players
public void SetCurrentHealthPoint(int changedHealthPoint)
{
var newChangedHealthPoint = Mathf.Clamp(changedHealthPoint, 0, MaxHealthPoint);
int newChangedHealthPoint = Mathf.Clamp(changedHealthPoint, 0, MaxHealthPoint);
int addedHealthPoint = newChangedHealthPoint - CurrentHealthPoint;
CurrentHealthPoint = newChangedHealthPoint;
if (addedHealthPoint > 0)
{
if (!string.IsNullOrEmpty(heartRecoverySfxName))
{
AudioManager.Instance.PlaySfx(heartRecoverySfxName);
}
}
EventManager.InvokeHealthChanged(newChangedHealthPoint);
if (CurrentHealthPoint <= 2)

View File

@ -208,13 +208,6 @@ namespace BlueWater
OnMissedServing?.Invoke();
}
// 손님이 나갈 때, 계산대에 돈을 두고 가는 이벤트
public static Action<int> OnAddedMoneyCounter;
public static void InvokeAddedMoneyCounter(int money)
{
OnAddedMoneyCounter?.Invoke(money);
}
// 손님의 기다림 게이지를 초기화 시키는 이벤트
public static Action OnGaugeResetCustomers;
public static void InvokeGaugeResetCustomers()

View File

@ -1,6 +1,8 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using BlueWater.Uis;
using BlueWater.Utility;
using Sirenix.OdinInspector;
@ -20,6 +22,12 @@ namespace BlueWater.Tycoons
[SerializeField]
private Vector3 _offset = new(0f, 1.5f, 0f);
[SerializeField]
private float _delay = 0.2f;
[SerializeField]
private float _payMoneyUiDuration = 0.5f;
[SerializeField]
private Sprite _empty;
@ -31,20 +39,18 @@ namespace BlueWater.Tycoons
[SerializeField]
private Sprite _level3;
[field: Title("실시간 데이터")]
[field: SerializeField]
public int CurrentMoney { get; private set; }
private Queue<int> _addedGolds = new();
private SpriteRenderer _spriteRenderer;
private Coroutine _gainAutoInstance;
private bool _isPlayerInteracting;
private bool _isGainGoldCoroutine;
protected override void Awake()
{
base.Awake();
EventManager.OnAddedMoneyCounter += AddCurrentMoney;
EventManager.OnGainAutoMoneyCounter += GainAuto;
}
@ -88,7 +94,6 @@ namespace BlueWater.Tycoons
_gainAutoInstance = null;
}
EventManager.OnAddedMoneyCounter -= AddCurrentMoney;
EventManager.OnGainAutoMoneyCounter -= GainAuto;
}
@ -109,19 +114,19 @@ namespace BlueWater.Tycoons
public override bool CanInteraction()
{
return CurrentMoney > 0 && !GameManager.Instance.CurrentTycoonPlayer.TycoonPickupHandler.IsPickedUpAnything();
return _addedGolds.Count > 0 && !GameManager.Instance.CurrentTycoonPlayer.TycoonPickupHandler.IsPickedUpAnything();
}
public void AddCurrentMoney(int money)
public void AddCurrentGold(int gold)
{
CurrentMoney += money;
_addedGolds.Enqueue(gold);
ChangeSprite();
}
private void ChangeSprite()
{
var sprite = CurrentMoney switch
var sprite = _addedGolds.Sum() switch
{
> 1000 => _level3,
> 500 => _level2,
@ -134,14 +139,30 @@ namespace BlueWater.Tycoons
public void GainMoney()
{
if (_isGainGoldCoroutine) return;
StartCoroutine(GainGoldCoroutine());
}
private IEnumerator GainGoldCoroutine()
{
_isGainGoldCoroutine = true;
_isPlayerInteracting = false;
HoldingElapsedTime = 0f;
WaitForSeconds delay = new WaitForSeconds(_delay);
while (_addedGolds.Count > 0)
{
var addedGold = _addedGolds.Dequeue();
var payMoneyUi = Instantiate(_payMoneyUiObject, transform.position + _offset,
Quaternion.identity, TycoonUiManager.Instance.WorldCanvas.transform);
payMoneyUi.Initialize(addedGold, false, _payMoneyUiDuration);
yield return delay;
}
var payMoneyUi = Instantiate(_payMoneyUiObject, transform.position + _offset,
Quaternion.identity, TycoonUiManager.Instance.WorldCanvas.transform);
payMoneyUi.Initialize(CurrentMoney, false);
CurrentMoney = 0;
ChangeSprite();
_isGainGoldCoroutine = false;
}
public void GainAuto(int waitTime)
@ -155,7 +176,7 @@ namespace BlueWater.Tycoons
{
yield return new WaitForSeconds(waitTime);
if (CurrentMoney > 0)
if (_addedGolds.Count > 0)
{
GainMoney();
}

View File

@ -1,4 +1,5 @@
using System;
using BlueWater.Audios;
using BlueWater.Interfaces;
using BlueWater.Npcs.Crews;
using BlueWater.Npcs.Crews.Cleaner;
@ -44,6 +45,9 @@ namespace BlueWater.Tycoons
[SerializeField]
private float _crewHoldingTime = 9f;
[SerializeField]
private string _cleaningSfxName = "CleaningTable";
private LevelData _currentLevelData;
private Sprite _fullBeerGlass;
private Sprite _emptyBeerGlass;
@ -158,12 +162,14 @@ namespace BlueWater.Tycoons
{
GameManager.Instance.CurrentTycoonPlayer.IsCleaningTable = true;
_isPlayerInteracting = true;
AudioManager.Instance.PlaySfx(_cleaningSfxName, loop: true);
}
public override void CancelInteraction()
{
GameManager.Instance.CurrentTycoonPlayer.IsCleaningTable = false;
_isPlayerInteracting = false;
AudioManager.Instance.StopSfx(_cleaningSfxName);
}
public override bool CanInteraction()

View File

@ -1,3 +1,4 @@
using BlueWater.Audios;
using BlueWater.Items;
using BlueWater.Players;
using UnityEngine;
@ -28,6 +29,9 @@ namespace BlueWater.Tycoons
[SerializeField]
private bool _isChanged;
[SerializeField]
private string _discardSfxName = "DiscardCocktail";
private bool _isPlayerInteracting;
private bool _canInteraction = true;
@ -165,6 +169,7 @@ namespace BlueWater.Tycoons
discardCocktailData = ItemManager.Instance.CocktailDataSo.GetDataByIdx(discardCocktailDataIdx);
}
AudioManager.Instance.PlaySfx(_discardSfxName);
EventManager.InvokeCocktailDiscarded(discardCocktailData, true);
HoldingElapsedTime = 0f;

View File

@ -1,4 +1,5 @@
using System;
using BlueWater.Audios;
using BlueWater.Interfaces;
using BlueWater.Npcs.Crews;
using BlueWater.Npcs.Crews.Cleaner;
@ -23,6 +24,9 @@ namespace BlueWater.Tycoons
[SerializeField]
private float _crewHoldingTime = 9f;
[SerializeField]
private string _cleaningSfxName = "CleaningFloor";
private LevelData _currentLevelData;
private Coroutine _findCleanerCrewInstance;
private bool _isPlayerInteracting;
@ -112,12 +116,14 @@ namespace BlueWater.Tycoons
{
GameManager.Instance.CurrentTycoonPlayer.IsCleaningFloor = true;
_isPlayerInteracting = true;
AudioManager.Instance.PlaySfx(_cleaningSfxName, loop: true);
}
public override void CancelInteraction()
{
GameManager.Instance.CurrentTycoonPlayer.IsCleaningFloor = false;
_isPlayerInteracting = false;
AudioManager.Instance.StopSfx(_cleaningSfxName);
}
public override bool CanInteraction()

View File

@ -57,3 +57,39 @@ MonoBehaviour:
<Clip>k__BackingField: {fileID: 8300000, guid: 7e5c81f4703b8cf4c89b143917577923, type: 3}
- <SfxName>k__BackingField: GateOfSpikes
<Clip>k__BackingField: {fileID: 8300000, guid: bdc02245c217c51458d29812cbf59a6a, type: 3}
- <SfxName>k__BackingField: HeartRecovery
<Clip>k__BackingField: {fileID: 8300000, guid: bb125f9dcd56e5141af49d54c535ca9d, type: 3}
- <SfxName>k__BackingField: Pouring
<Clip>k__BackingField: {fileID: 8300000, guid: bb840fbf163a15a4c8ac3001253635ba, type: 3}
- <SfxName>k__BackingField: SucceedMakingCocktail
<Clip>k__BackingField: {fileID: 8300000, guid: 959b0bbf4a2bf104e960c3d0c33a960c, type: 3}
- <SfxName>k__BackingField: FailedMakingCocktail
<Clip>k__BackingField: {fileID: 8300000, guid: 9ddc9a4fd9812b6469754758fa424c6f, type: 3}
- <SfxName>k__BackingField: DiscardCocktail
<Clip>k__BackingField: {fileID: 8300000, guid: 2d25fd7b9765c6545a3d6743e0e64f79, type: 3}
- <SfxName>k__BackingField: OrderCocktail
<Clip>k__BackingField: {fileID: 8300000, guid: d42c42481880af846bc539c8dda0dd65, type: 3}
- <SfxName>k__BackingField: CreateCustomer
<Clip>k__BackingField: {fileID: 8300000, guid: 61efd3c79b807e24290da224ccf2e04e, type: 3}
- <SfxName>k__BackingField: LevelUp
<Clip>k__BackingField: {fileID: 8300000, guid: 777be2010239e664880448c5a385cf90, type: 3}
- <SfxName>k__BackingField: TycoonGameStart
<Clip>k__BackingField: {fileID: 8300000, guid: cdccda37bdd4fb74d9cc670189794dce, type: 3}
- <SfxName>k__BackingField: TycoonGameOver
<Clip>k__BackingField: {fileID: 8300000, guid: 7163b3c58a6e6b04794cee1e110f19de, type: 3}
- <SfxName>k__BackingField: CleaningFloor
<Clip>k__BackingField: {fileID: 8300000, guid: 67376a69110e3974d8881b5c746622a7, type: 3}
- <SfxName>k__BackingField: CleaningTable
<Clip>k__BackingField: {fileID: 8300000, guid: 717f06a127178564ab5ea8cdf9da3ef2, type: 3}
- <SfxName>k__BackingField: ManualBook
<Clip>k__BackingField: {fileID: 8300000, guid: a324e82da09f7f84cab40d74f755c9e8, type: 3}
- <SfxName>k__BackingField: SucceedServing
<Clip>k__BackingField: {fileID: 8300000, guid: 2d6aad5746316bf4fb6bb7aed8d89c4e, type: 3}
- <SfxName>k__BackingField: FailedServing
<Clip>k__BackingField: {fileID: 8300000, guid: 4dd3c1455781be74ca6018fc0bc8a269, type: 3}
- <SfxName>k__BackingField: SoldOut
<Clip>k__BackingField: {fileID: 8300000, guid: 9778d97789d1ea245a9d31c2ff915bb7, type: 3}
- <SfxName>k__BackingField: GainGold
<Clip>k__BackingField: {fileID: 8300000, guid: f556df27b6add5a49979cc7a158f6110, type: 3}
- <SfxName>k__BackingField: RareRewardBox
<Clip>k__BackingField: {fileID: 8300000, guid: 3f98ecaf35492e744bb4dc943e1a39b1, type: 3}

View File

@ -145,7 +145,7 @@ namespace BlueWater.Players.Combat.Skills
}
_animationController.SetCurrentAnimationSpeed(SkillData.Duration);
AudioManager.Instance.PlaySfx("CombatPlayerMainSkill", SkillData.Duration);
AudioManager.Instance.PlaySfx("CombatPlayerMainSkill", duration: SkillData.Duration);
_intervalTime = 1f / _theWaltzOfTheSwordData.MaxAttackCount;
if (_theWaltzOfTheSwordData.IsFollowingTargetCamera)

View File

@ -1,8 +1,8 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using BlueWater.Audios;
using BlueWater.Interfaces;
using BlueWater.Items;
using BlueWater.Npcs.Customers;
using BlueWater.Utility;
using Sirenix.OdinInspector;
@ -18,6 +18,9 @@ namespace BlueWater.Tycoons
[SerializeField, Required]
private Transform _customerSpawnTransform;
[SerializeField]
private string _createCustomerSfxName = "CreateCustomer";
[Title("대기중인 손님 정보")]
[SerializeField]
@ -55,6 +58,7 @@ namespace BlueWater.Tycoons
newCustomer.gameObject.name = $"Customer (Clone) {_instanceCount}";
_instanceCount++;
RegisterCustomer(newCustomer);
AudioManager.Instance.PlaySfx(_createCustomerSfxName);
return newCustomer;
}

View File

@ -2,6 +2,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using BlueWater.Audios;
using BlueWater.Items;
using BlueWater.Players.Tycoons;
using BlueWater.Tycoons;
@ -58,6 +59,16 @@ namespace BlueWater
[SerializeField]
private float _pushPower = 50;
[Title("사운드")]
[SerializeField]
private string _pouringSfxName = "Pouring";
[SerializeField]
private string _succeedMakingCocktailSfxName = "SucceedMakingCocktail";
[SerializeField]
private string _failedMakingCocktailSfxName = "FailedMakingCocktail";
[Title("Liquid / Garnish")]
[SerializeField, Required, Tooltip("원액 프리팹")]
@ -231,8 +242,8 @@ namespace BlueWater
EventManager.OnCocktailServedToCustomer -= ReleaseAllObject;
EventManager.OnChangedRandomCocktail -= ReleaseAllObject;
LiquidIngredient.OnReachedTarget -= OnTargetReached;
LiquidBarrel.OnBarrelInteracted -= HandleBarrelInteraction;
LiquidBarrel.OnBarrelCancelInteracted -= HandleBarrelCancelInteraction;
Barrel.OnBarrelInteracted -= HandleBarrelInteraction;
Barrel.OnBarrelCancelInteracted -= HandleBarrelCancelInteraction;
}
#endregion
@ -351,6 +362,7 @@ namespace BlueWater
_elapsedTime = 0f;
_isPouring = true;
AudioManager.Instance.PlaySfx(_pouringSfxName, loop: true);
// To Center 이동 코루틴이 활성화 중이지 않을 때
if (_movePanelToCenterInstance == null)
@ -368,6 +380,7 @@ namespace BlueWater
public void HandleBarrelCancelInteraction()
{
_isPouring = false;
AudioManager.Instance.StopSfx(_pouringSfxName);
Utils.StartUniqueCoroutine(this, ref _movePanelToPlayerInstance, MovePanelToPlayer());
}
@ -463,11 +476,12 @@ namespace BlueWater
{
matchingCocktail = ItemManager.Instance.CocktailDataSo.GetDataByIdx("Cocktail000");
_completeText.text = Utils.GetLocalizedString("Failure");
AudioManager.Instance.PlaySfx(_failedMakingCocktailSfxName);
}
else
{
_completeText.text = $"{Utils.GetLocalizedString("Success")}!\n{Utils.GetLocalizedString(matchingCocktail.Idx)}";
AudioManager.Instance.PlaySfx(_succeedMakingCocktailSfxName);
}
_shaker.SetActive(false);

View File

@ -1,7 +1,6 @@
using System;
using System.Collections;
using BlueWater;
using BlueWater.Uis;
using BlueWater.Audios;
using UnityEngine;
using Sirenix.OdinInspector;
using Color = UnityEngine.Color;
@ -9,7 +8,10 @@ using Image = UnityEngine.UI.Image;
using Random = UnityEngine.Random;
public class TycoonGameOver : MonoBehaviour
{
{
[SerializeField]
private string _gameOverSfxName = "TycoonGameOver";
// RectTransform을 통해 UI 오브젝트 위치를 제어
private RectTransform _shipRectTransform;
private GameObject _panel;
@ -71,6 +73,7 @@ public class TycoonGameOver : MonoBehaviour
// 코루틴 정의
IEnumerator MoveObject()
{
AudioManager.Instance.PlaySfx(_gameOverSfxName, ignoreTimeScale: true);
VisualFeedbackManager.Instance.SetBaseTimeScale(0.0f);
PlayerInputKeyManager.Instance.DisableAction("Manual");
_panel.SetActive(true);

View File

@ -1,5 +1,6 @@
using System.Collections;
using System.Collections.Generic;
using BlueWater.Audios;
using BlueWater.Tycoons;
using BlueWater.Utility;
using DG.Tweening;
@ -24,6 +25,9 @@ namespace BlueWater.Uis
[SerializeField]
private float _animationTime = 0.2f;
[SerializeField]
private string _levelUpSfxName = "LevelUp";
[Title("레벨 텍스트")]
[SerializeField]
private Vector3 _punchScale = new(1.5f, 1.5f, 1.5f);
@ -113,6 +117,7 @@ namespace BlueWater.Uis
yield return _expSliderTween.WaitForCompletion();
TycoonManager.Instance.TycoonStatus.CurrentLevel++;
AudioManager.Instance.PlaySfx(_levelUpSfxName);
currentLevelData = TycoonManager.Instance.GetCurrentLevelData();
requireExp = currentLevelData.RequiredExp;

View File

@ -1,6 +1,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using BlueWater.Audios;
using BlueWater.Items;
using BlueWater.Tycoons;
using BlueWater.Utility;
@ -43,6 +44,9 @@ namespace BlueWater.Uis
[field: SerializeField]
private TextMeshProUGUI ratioRange;
[SerializeField]
private string _manualSfxName = "ManualBook";
List<ManualCocktailButton> _button = new List<ManualCocktailButton>();
private Coroutine _changedLocaleInstance;
private ManualCocktailButton _selectedManualCocktailButton;
@ -170,6 +174,7 @@ namespace BlueWater.Uis
public override void Open()
{
AudioManager.Instance.PlaySfx(_manualSfxName, ignoreTimeScale: true);
VisualFeedbackManager.Instance.SetBaseTimeScale(0.0f);
PlayerInputKeyManager.Instance.SwitchCurrentActionMap(SwitchMapsOpened);
PopupUiController.RegisterPopup(this);
@ -184,6 +189,7 @@ namespace BlueWater.Uis
public override void Close()
{
AudioManager.Instance.PlaySfx(_manualSfxName, ignoreTimeScale: true);
_panel.SetActive(false);
PopupUiController.UnregisterPopup(this);
PlayerInputKeyManager.Instance.SwitchCurrentActionMap(SwitchMapsClosed);

View File

@ -1,3 +1,4 @@
using BlueWater.Audios;
using BlueWater.Tycoons;
using DG.Tweening;
using TMPro;
@ -21,9 +22,14 @@ namespace BlueWater.Uis
[SerializeField]
private float _duration = 2f;
[SerializeField]
private string _gainGoldSfxName = "GainGold";
public void Initialize(int gold, bool isTip)
public void Initialize(int gold, bool isTip, float duration = -1f)
{
float newDuration = duration >= 0f ? duration : _duration;
EventManager.InvokeAddedGold(gold, isTip);
_text.text = gold.ToString("N0");
@ -32,10 +38,11 @@ namespace BlueWater.Uis
var payMoneyParticle = Instantiate(_payMoneyParticle, transform.position,
_payMoneyParticle.transform.rotation);
payMoneyParticle.Play();
AudioManager.Instance.PlaySfx(_gainGoldSfxName);
var tween = DOTween.Sequence().SetAutoKill(true);
tween.Append(_rect.DOLocalMoveY(endPosition.y, _duration).SetEase(Ease.InOutSine));
tween.Join(_rect.DOScale(Vector3.zero, _duration).SetEase(Ease.InBack));
tween.Append(_rect.DOLocalMoveY(endPosition.y, newDuration).SetEase(Ease.InOutSine));
tween.Join(_rect.DOScale(Vector3.zero, newDuration).SetEase(Ease.InBack));
tween.OnComplete(() => Destroy(gameObject));
}

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using BlueWater.Audios;
using BlueWater.Tycoons;
using UnityEngine;
using Sirenix.OdinInspector;
@ -16,6 +17,9 @@ namespace BlueWater.Uis
[SerializeField]
private Vector3 _cardLocalScale = new(0.65f, 0.65f, 1f);
[SerializeField]
private string _openSfxName = "RareRewardBox";
private List<TycoonCard> _tycoonCards = new(5);
private LevelData _currentLevelData;
@ -39,6 +43,7 @@ namespace BlueWater.Uis
public override void Open()
{
AudioManager.Instance.PlaySfx(_openSfxName, ignoreTimeScale: true);
PlayerInputKeyManager.Instance.DisableAction("OpenManualBook");
VisualFeedbackManager.Instance.SetBaseTimeScale(0.0f);
PlayerInputKeyManager.Instance.SwitchCurrentActionMap(InputActionMaps.TycoonUi);

View File

@ -1,3 +1,4 @@
using BlueWater.Audios;
using DG.Tweening;
using Sirenix.OdinInspector;
using UnityEngine;
@ -24,6 +25,9 @@ namespace BlueWater.Uis
[SerializeField]
private Animator _closedUiAnimator;
[SerializeField]
private string _gameStartSfxName = "TycoonGameStart";
// Variables
private Tween _openUiStartTween;
@ -89,6 +93,7 @@ namespace BlueWater.Uis
PlayerInputKeyManager.Instance.DisableCurrentPlayerInput();
_panel.SetActive(true);
_openUiImage.SetActive(true);
AudioManager.Instance.PlaySfx(_gameStartSfxName, ignoreTimeScale: true);
})
.OnComplete(() =>
{

View File

@ -1,12 +1,12 @@
using System.Collections;
using System.Collections.Generic;
using BlueWater.Audios;
using BlueWater.Tycoons;
using BlueWater.Utility;
using DG.Tweening;
using UnityEngine;
using Sirenix.OdinInspector;
using TMPro;
using UnityEngine.Serialization;
namespace BlueWater.Uis
{
@ -33,6 +33,9 @@ namespace BlueWater.Uis
[Title("구매 성공 연출")]
[SerializeField]
private float _endGoldChangeDuration = 1f;
[SerializeField]
private string _soldOutSfxName = "SoldOut";
[Title("구매 실패 연출")]
[SerializeField]
@ -188,6 +191,7 @@ namespace BlueWater.Uis
Utils.StartUniqueCoroutine(this, ref _changeGoldInstance, AnimateGoldChange());
currentTycoonCard.CardArea.SuccessClick();
Instantiate(_soldOutPrefab, currentTycoonCard.transform);
AudioManager.Instance.PlaySfx(_soldOutSfxName, ignoreTimeScale: true);
_tycoonCardController.SelectedCard(currentTycoonCard);
}

View File

@ -385,6 +385,7 @@ MonoBehaviour:
<CurrentHealthPoint>k__BackingField: 4
<InvincibilityDuration>k__BackingField: 0
<IsInvincible>k__BackingField: 0
heartRecoverySfxName: HeartRecovery
--- !u!114 &1674052485383758547
MonoBehaviour:
m_ObjectHideFlags: 0
@ -397,7 +398,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2bc02c60fe9bf724885e9f5713f900ee, type: 3}
m_Name:
m_EditorClassIdentifier:
_playerInput: {fileID: 0}
--- !u!114 &4836489897218844789
MonoBehaviour:
m_ObjectHideFlags: 0

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b898aa0b27799784db3028233d72d247
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 4dd3c1455781be74ca6018fc0bc8a269
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: eec6653ead890d24883490f21fb814ab
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: a93c110f0e554e94380239083a78e937
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: d42c42481880af846bc539c8dda0dd65
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 67376a69110e3974d8881b5c746622a7
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 717f06a127178564ab5ea8cdf9da3ef2
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: f556df27b6add5a49979cc7a158f6110
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: cdccda37bdd4fb74d9cc670189794dce
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 61efd3c79b807e24290da224ccf2e04e
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 7163b3c58a6e6b04794cee1e110f19de
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 2d6aad5746316bf4fb6bb7aed8d89c4e
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: bb125f9dcd56e5141af49d54c535ca9d
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 777be2010239e664880448c5a385cf90
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: a7c9d37c7739eeb46aba37b9bdf33f2a
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 959b0bbf4a2bf104e960c3d0c33a960c
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: df44852bc210f7343957cc9671b10d73
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 3f98ecaf35492e744bb4dc943e1a39b1
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 9778d97789d1ea245a9d31c2ff915bb7
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 2d25fd7b9765c6545a3d6743e0e64f79
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: bb840fbf163a15a4c8ac3001253635ba
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: ed843cf1c54f59f48aa7c69ca5333db3
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: a324e82da09f7f84cab40d74f755c9e8
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 9ddc9a4fd9812b6469754758fa424c6f
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant: