From 779af276d308b3c310e4aa236ecdf6bef9f77517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerard=20Gasc=C3=B3n?= <52170489+GerardGascon@users.noreply.github.com> Date: Fri, 19 Apr 2024 11:26:44 +0200 Subject: [PATCH] refactor: moved grow animation to its own class --- Assets/Scenes/Main.unity | 47 +++++--- Assets/Scripts/Presenter/ExpressionClick.cs | 10 +- Assets/Scripts/Presenter/IInputCallback.cs | 5 + .../Scripts/Presenter/IInputCallback.cs.meta | 3 + Assets/Scripts/Presenter/IRoseGrow.cs | 1 - .../Scripts/Presenter/SaveSystem/LoadGame.cs | 5 +- .../View/Collections/RoseGrowCollection.cs | 21 ---- .../Collections/RoseGrowCollection.cs.meta | 3 - Assets/Scripts/View/Dependencies.cs | 9 +- Assets/Scripts/View/Scene/GrowAnimation.cs | 62 +++++++++++ .../Scripts/View/Scene/GrowAnimation.cs.meta | 3 + .../View/Scene/GrowParticlesSpawner.cs | 6 +- Assets/Scripts/View/UI/ExpressionInput.cs | 62 +---------- fmod_editor.log | 103 ++++++++++++++++++ 14 files changed, 224 insertions(+), 116 deletions(-) create mode 100644 Assets/Scripts/Presenter/IInputCallback.cs create mode 100644 Assets/Scripts/Presenter/IInputCallback.cs.meta delete mode 100644 Assets/Scripts/View/Collections/RoseGrowCollection.cs delete mode 100644 Assets/Scripts/View/Collections/RoseGrowCollection.cs.meta create mode 100644 Assets/Scripts/View/Scene/GrowAnimation.cs create mode 100644 Assets/Scripts/View/Scene/GrowAnimation.cs.meta diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity index 8138be1..f62ae0e 100644 --- a/Assets/Scenes/Main.unity +++ b/Assets/Scenes/Main.unity @@ -562,23 +562,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: text: {fileID: 379057222} - animator: {fileID: 902566664} - growAnimation: {fileID: 11400000, guid: 7f3b3c6fe0a532348bade08980464924, type: 2} - endAnimation: {fileID: 11400000, guid: 8bca0def51335744994817560a43be74, type: 2} - growEvent: - Guid: - Data1: 0 - Data2: 0 - Data3: 0 - Data4: 0 - Path: - gloomEvent: - Guid: - Data1: 0 - Data2: 0 - Data3: 0 - Data4: 0 - Path: --- !u!225 &311490074 CanvasGroup: m_ObjectHideFlags: 0 @@ -1402,6 +1385,7 @@ GameObject: - component: {fileID: 902566663} - component: {fileID: 902566662} - component: {fileID: 902566664} + - component: {fileID: 902566665} m_Layer: 0 m_Name: Rosa_Grow_0100 m_TagString: Untagged @@ -1490,6 +1474,35 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: animation: {fileID: 11400000, guid: 7f3b3c6fe0a532348bade08980464924, type: 2} +--- !u!114 &902566665 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 902566661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a0d2d820274a46d68d83fd6ddef1c431, type: 3} + m_Name: + m_EditorClassIdentifier: + animator: {fileID: 902566664} + growAnimation: {fileID: 11400000, guid: 7f3b3c6fe0a532348bade08980464924, type: 2} + endAnimation: {fileID: 11400000, guid: 8bca0def51335744994817560a43be74, type: 2} + growEvent: + Guid: + Data1: -213766361 + Data2: 1214886339 + Data3: 1256039087 + Data4: -834483166 + Path: event:/SFX_grow + gloomEvent: + Guid: + Data1: -2064803398 + Data2: 1237488133 + Data3: 1635234491 + Data4: 1937340427 + Path: event:/SFX_gloom --- !u!1 &921683578 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Presenter/ExpressionClick.cs b/Assets/Scripts/Presenter/ExpressionClick.cs index 40147eb..da60471 100644 --- a/Assets/Scripts/Presenter/ExpressionClick.cs +++ b/Assets/Scripts/Presenter/ExpressionClick.cs @@ -5,28 +5,28 @@ namespace Presenter { private readonly Score _score; private readonly IExpressionInput _view; private readonly IRoseGrow _grow; + private readonly IInputCallback _onInputReceived; private readonly IRoseSpawner _spawner; private bool CanSpawn => _score.Value % (_score.GrowIterations * _score.SpawnRate) == 0; - public ExpressionClick(Score score, IExpressionInput view, IRoseSpawner spawner, IRoseGrow grow) { + public ExpressionClick(Score score, IExpressionInput view, IRoseSpawner spawner, IRoseGrow grow, IInputCallback inputCallback) { _score = score; _view = view; _spawner = spawner; _grow = grow; + _onInputReceived = inputCallback; } public void Execute() { _score.Add(); _view.UpdateView(_score.Value, _score.GrowPercentage); - _grow.Grow(); - + _onInputReceived.OnInputReceived(); if (CanSpawn) _spawner.SpawnRose(); - else if (_score.Value % _score.GrowIterations == 0) + if (_score.Value % _score.GrowIterations == 0) _grow.GrowStep(); } - } } \ No newline at end of file diff --git a/Assets/Scripts/Presenter/IInputCallback.cs b/Assets/Scripts/Presenter/IInputCallback.cs new file mode 100644 index 0000000..2f98f48 --- /dev/null +++ b/Assets/Scripts/Presenter/IInputCallback.cs @@ -0,0 +1,5 @@ +namespace Presenter { + public interface IInputCallback { + void OnInputReceived(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Presenter/IInputCallback.cs.meta b/Assets/Scripts/Presenter/IInputCallback.cs.meta new file mode 100644 index 0000000..2399d62 --- /dev/null +++ b/Assets/Scripts/Presenter/IInputCallback.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4b8d0f034669436ca57e685c00414e3f +timeCreated: 1713517680 \ No newline at end of file diff --git a/Assets/Scripts/Presenter/IRoseGrow.cs b/Assets/Scripts/Presenter/IRoseGrow.cs index fd59d1d..ba74ed0 100644 --- a/Assets/Scripts/Presenter/IRoseGrow.cs +++ b/Assets/Scripts/Presenter/IRoseGrow.cs @@ -1,6 +1,5 @@ namespace Presenter { public interface IRoseGrow { - void Grow(); void GrowStep(); } } \ No newline at end of file diff --git a/Assets/Scripts/Presenter/SaveSystem/LoadGame.cs b/Assets/Scripts/Presenter/SaveSystem/LoadGame.cs index 3d6755c..13ab70d 100644 --- a/Assets/Scripts/Presenter/SaveSystem/LoadGame.cs +++ b/Assets/Scripts/Presenter/SaveSystem/LoadGame.cs @@ -6,18 +6,21 @@ namespace Presenter.SaveSystem { private readonly Score _score; private readonly IExpressionInput _expressionInput; private readonly IRoseSpawner _spawner; + private readonly IRoseGrow _growAnimation; - public LoadGame(IGameRepository repository, Score score, IExpressionInput expressionInput, IRoseSpawner spawner) { + public LoadGame(IGameRepository repository, Score score, IExpressionInput expressionInput, IRoseSpawner spawner, IRoseGrow growAnimation) { _repository = repository; _score = score; _expressionInput = expressionInput; _spawner = spawner; + _growAnimation = growAnimation; } public void Run() { Score newScore = _repository.LoadScore(); _score.SetFromOtherScore(newScore); _expressionInput.UpdateView(_score.Value, _score.GrowPercentage); + _growAnimation.GrowStep(); int roses = _score.Value / (_score.SpawnRate * _score.GrowIterations); for (int i = 0; i < roses; i++) diff --git a/Assets/Scripts/View/Collections/RoseGrowCollection.cs b/Assets/Scripts/View/Collections/RoseGrowCollection.cs deleted file mode 100644 index 8b74de5..0000000 --- a/Assets/Scripts/View/Collections/RoseGrowCollection.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Presenter; - -namespace View.Collections { - public class RoseGrowCollection : IRoseGrow { - private readonly IRoseGrow[] _grows; - - public RoseGrowCollection(IRoseGrow[] grows) { - _grows = grows; - } - - public void Grow() { - foreach (IRoseGrow grow in _grows) - grow.Grow(); - } - - public void GrowStep() { - foreach (IRoseGrow grow in _grows) - grow.GrowStep(); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/View/Collections/RoseGrowCollection.cs.meta b/Assets/Scripts/View/Collections/RoseGrowCollection.cs.meta deleted file mode 100644 index 0f23dd9..0000000 --- a/Assets/Scripts/View/Collections/RoseGrowCollection.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6f517298528d4766a83770b1867f905f -timeCreated: 1713475808 \ No newline at end of file diff --git a/Assets/Scripts/View/Dependencies.cs b/Assets/Scripts/View/Dependencies.cs index 75a273a..e573d0f 100644 --- a/Assets/Scripts/View/Dependencies.cs +++ b/Assets/Scripts/View/Dependencies.cs @@ -25,17 +25,16 @@ namespace View { IRoseSpawner spawner = FindObjectOfType(); - IRoseGrow grow = FindObjectOfType(); - IRoseGrow inputGrow = FindObjectOfType(); - IRoseGrow growCollection = new RoseGrowCollection(new[] { grow, inputGrow }); + IInputCallback growParticles = FindObjectOfType(); + IRoseGrow growAnimation = FindObjectOfType(); - ExpressionClick = new ExpressionClick(Score, inputCollections, spawner, growCollection); + ExpressionClick = new ExpressionClick(Score, inputCollections, spawner, growAnimation, growParticles); CustomInput = new CustomInput(); PlayerPrefsRepository repository = new(); Saver = new SaveGame(repository, Score); - Loader = new LoadGame(repository, Score, inputCollections, spawner); + Loader = new LoadGame(repository, Score, inputCollections, spawner, growAnimation); } } } \ No newline at end of file diff --git a/Assets/Scripts/View/Scene/GrowAnimation.cs b/Assets/Scripts/View/Scene/GrowAnimation.cs new file mode 100644 index 0000000..dc452db --- /dev/null +++ b/Assets/Scripts/View/Scene/GrowAnimation.cs @@ -0,0 +1,62 @@ +using System; +using Domain; +using FMODUnity; +using Presenter; +using UnityEngine; +using Animation = FramedAnimator.Animation; +using Animator = FramedAnimator.Animator; + +namespace View.Scene { + public class GrowAnimation : MonoBehaviour, IRoseGrow { + [SerializeField] private Animator animator; + [SerializeField] private Animation growAnimation; + [SerializeField] private Animation endAnimation; + + [SerializeField] private EventReference growEvent; + [SerializeField] private EventReference gloomEvent; + + private Score _score; + private bool _firstUpdate; + + private void Start() { + _score = FindObjectOfType().Score; + + animator.OnAnimationEnd += AnimationEnded; + } + + private void AnimationEnded(string animationName) { + if (animationName == "Rosa_Grow") { + animator.ChangeAnimation(endAnimation); + RuntimeManager.PlayOneShot(gloomEvent); + animator.PlayUntil(1f); + return; + } + + if (animationName == "Rosa_End") { + animator.ChangeAnimation(growAnimation); + animator.PlayUntil(_score.GrowPercentage); + } + } + + public void GrowStep() { + if (animator.CurrentAnimation == "Rosa_Grow") { + animator.PlayUntil(IsLastGrowState(_score.Value, _score.GrowPercentage) ? 1f : _score.GrowPercentage); + if (_score.GrowPercentage < 1f) + RuntimeManager.PlayOneShot(growEvent); + } + _firstUpdate = false; + } + + private bool IsLastGrowState(int score, float growPercentage) { + if (growPercentage != 0) + return false; + bool isLastFrame = score % (_score.GrowIterations * _score.SpawnRate) == 0; + if (!isLastFrame) + return false; + if (_firstUpdate) + return false; + + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/View/Scene/GrowAnimation.cs.meta b/Assets/Scripts/View/Scene/GrowAnimation.cs.meta new file mode 100644 index 0000000..97bd860 --- /dev/null +++ b/Assets/Scripts/View/Scene/GrowAnimation.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a0d2d820274a46d68d83fd6ddef1c431 +timeCreated: 1713516930 \ No newline at end of file diff --git a/Assets/Scripts/View/Scene/GrowParticlesSpawner.cs b/Assets/Scripts/View/Scene/GrowParticlesSpawner.cs index c2ae906..1c50d8c 100644 --- a/Assets/Scripts/View/Scene/GrowParticlesSpawner.cs +++ b/Assets/Scripts/View/Scene/GrowParticlesSpawner.cs @@ -4,18 +4,16 @@ using UnityEngine; using Random = UnityEngine.Random; namespace View.Scene { - public class GrowParticlesSpawner : MonoBehaviour, IRoseGrow { + public class GrowParticlesSpawner : MonoBehaviour, IInputCallback { [SerializeField] private GrowParticle growParticle; [SerializeField] private Transform growParticlePositions; [SerializeField, Range(0, 180)] private float angleRange; - public void Grow() { + public void OnInputReceived() { float randomRotation = Random.Range(-angleRange / 2f, angleRange / 2f); Instantiate(growParticle, growParticlePositions.position, Quaternion.Euler(0f, 0f, randomRotation)); } - public void GrowStep() { } - private void OnDrawGizmosSelected() { Gizmos.color = Color.red; float angle = angleRange / 2f + 90f; diff --git a/Assets/Scripts/View/UI/ExpressionInput.cs b/Assets/Scripts/View/UI/ExpressionInput.cs index 0b6209d..0561415 100644 --- a/Assets/Scripts/View/UI/ExpressionInput.cs +++ b/Assets/Scripts/View/UI/ExpressionInput.cs @@ -1,81 +1,25 @@ using Domain; -using Domain.Input; -using FMODUnity; using Presenter; using TMPro; using UnityEngine; -using UnityEngine.Serialization; -using Animation = FramedAnimator.Animation; -using Animator = FramedAnimator.Animator; namespace View.UI { - public class ExpressionInput : MonoBehaviour, IExpressionInput, IRoseGrow { + public class ExpressionInput : MonoBehaviour, IExpressionInput { [SerializeField] private TMP_Text text; private ExpressionClick _click; private CustomInput _customInput; - private Score _score; - - private bool _firstUpdate = true; - - [SerializeField] private Animator animator; - [SerializeField] private Animation growAnimation; - [SerializeField] private Animation endAnimation; - - [SerializeField] private EventReference growEvent; - [SerializeField] private EventReference gloomEvent; private void Start() { _click = FindObjectOfType().ExpressionClick; _customInput = FindObjectOfType().CustomInput; - _score = FindObjectOfType().Score; - - animator.OnAnimationEnd += AnimationEnded; } - private void AnimationEnded(string animationName) { - if (animationName == "Rosa_Grow") { - animator.ChangeAnimation(endAnimation); - RuntimeManager.PlayOneShot(gloomEvent); - animator.PlayUntil(1f); - return; - } - - if (animationName == "Rosa_End") { - animator.ChangeAnimation(growAnimation); - animator.PlayUntil(_score.GrowPercentage); - } - } - - private void Update() { + private void Update() => CheckInput(); - } - - public void UpdateView(int score, float growPercentage) { - if (animator.CurrentAnimation == "Rosa_Grow") - animator.PlayUntil(IsLastGrowState(score, growPercentage) ? 1f : growPercentage); + public void UpdateView(int score, float growPercentage) => text.text = score.ToString(); - _firstUpdate = false; - } - - public void Grow() { } - public void GrowStep() { - if (animator.CurrentAnimation == "Rosa_Grow" && _score.GrowPercentage < 1f) { - RuntimeManager.PlayOneShot(growEvent); - } - } - - private bool IsLastGrowState(int score, float growPercentage) { - if (growPercentage != 0) - return false; - bool isLastFrame = score % (_score.GrowIterations * _score.SpawnRate) == 0; - if (!isLastFrame) - return false; - if (_firstUpdate) - return false; - return true; - } private void CheckInput() { _customInput.UpdateInput(); diff --git a/fmod_editor.log b/fmod_editor.log index e69de29..f9fa3fa 100644 --- a/fmod_editor.log +++ b/fmod_editor.log @@ -0,0 +1,103 @@ +[LOG] System::create : Header version = 2.02.06. Current version = 2.02.06. +[LOG] Manager::init : maxchannels = 256 studioflags = 00000006 flags 00000000 extradriverdata 0000000000000000. +[LOG] SystemI::init : Initialize version=20206 (124257), maxchannels=256, flags=0x00020000 +[LOG] SystemI::setOutputInternal : Setting output to 'FMOD WASAPI Output' +[LOG] OutputWASAPI::init : Mix Format (WAVEFORMATEX): wFormatTag=0xFFFE, nChannels=2, nSamplesPerSec=48000, nAvgBytesPerSec=384000, nBlockAlign=8, wBitsPerSample=32, cbSize=22. +[LOG] OutputWASAPI::init : Mix Format (WAVEFORMATEXTENSIBLE): wValidBitsPerSample=32, dwChannelMask=0x00000003, SubFormat=00000003-0000-0010-8000-00AA00389B71. +[LOG] OutputWASAPI::init : Output buffer size: 4096 samples, latency: 0.00ms, period: 10.67ms, DSP buffer: 1024 * 4 +[LOG] Thread::initThread : Init FMOD stream thread. Affinity: 0x4000000000000003, Priority: 0xFFFF7FFB, Stack Size: 98304, Semaphore: No, Sleep Time: 10, Looping: Yes. +[LOG] Thread::initThread : Init FMOD mixer thread. Affinity: 0x4000000000000001, Priority: 0xFFFF7FFA, Stack Size: 81920, Semaphore: No, Sleep Time: 0, Looping: Yes. +[LOG] AsyncManager::init : manager 0000020359CFD0D8 isAsync 0 updatePeriod 0.02 +[LOG] AsyncManager::init : done +[LOG] PlaybackSystem::init : +[LOG] Thread::initThread : Init FMOD Studio sample load thread. Affinity: 0x4000000000000003, Priority: 0xFFFF7FFD, Stack Size: 98304, Semaphore: No, Sleep Time: 1, Looping: No. +[LOG] PlaybackSystem::init : done +[LOG] Thread::initThread : Init FMOD Studio bank load thread. Affinity: 0x4000000000000003, Priority: 0xFFFF7FFD, Stack Size: 98304, Semaphore: No, Sleep Time: 1, Looping: No. +[LOG] Manager::init : done. +[LOG] SystemI::createSound : filename = Assets/Audio/Master.bank : mode 02010082 +[LOG] SystemI::createSound : FMOD_NONBLOCKING specified. Putting into queue to be opened asynchronously! +[LOG] Thread::initThread : Init FMOD nonblocking thread (0). Affinity: 0x4000000000000003, Priority: 0xFFFF7FFC, Stack Size: 114688, Semaphore: Yes, Sleep Time: 0, Looping: Yes. +[LOG] SystemI::createSound : setdata soundi = 00000202A2449798 : node = 00000202A9AFA2E0 +[LOG] SystemI::createSound : add node to async list : head = 000002023A6557E8. list count = 0 +[LOG] AsyncThread::threadFunc : Starting Asynchronous operation on sound 00000202A2449798 +[LOG] SystemI::createSound : filename = Assets/Audio/Master.bank : mode 02010082 +[LOG] SystemI::createSound : FMOD_NONBLOCKING specified. Putting into queue to be opened asynchronously! +[LOG] SystemI::createSoundInternal : Create name='Assets/Audio/Master.bank', mode=0x02010082 +[LOG] SystemI::createSound : setdata soundi = 00000202A2449948 : node = 00000202A9AFA6A0 +[LOG] SystemI::createSoundInternal : exinfo->cbsize = 224 +[LOG] SystemI::createSound : add node to async list : head = 000002023A6557E8. list count = 0 +[LOG] SystemI::createSoundInternal : exinfo->length = 27574784 +[LOG] SystemI::createSoundInternal : exinfo->fileoffset = 10144 +[LOG] SystemI::createSoundInternal : exinfo->numsubsounds = 1 +[LOG] SystemI::createSound : filename = Assets/Audio/Master.bank : mode 02010082 +[LOG] SystemI::createSoundInternal : exinfo->inclusionlist = 00000202A9AFA3F0 +[LOG] SystemI::createSound : FMOD_NONBLOCKING specified. Putting into queue to be opened asynchronously! +[LOG] SystemI::createSoundInternal : exinfo->inclusionlistnum = 1 +[LOG] SystemI::createSound : setdata soundi = 00000202A2449AF8 : node = 00000202A9AFA060 +[LOG] SystemI::createSoundInternal : exinfo->suggestedsoundtype = 5 +[LOG] SystemI::createSound : add node to async list : head = 000002023A6557E8. list count = 1 +[LOG] SystemI::createSoundInternal : exinfo->initialseekpostype = 1 +[LOG] SystemI::createSoundInternal : Create name='', mode=0x02000202 +[LOG] SystemI::createSoundInternal : exinfo->cbsize = 224 +[LOG] SystemI::createSoundInternal : exinfo->length = 27574784 +[LOG] SystemI::createSoundInternal : exinfo->fileoffset = 10144 +[LOG] SystemI::createSoundInternal : exinfo->numsubsounds = 1 +[LOG] SystemI::createSoundInternal : exinfo->inclusionlist = 0000003163DFF568 +[LOG] SystemI::createSoundInternal : exinfo->inclusionlistnum = 1 +[LOG] SystemI::createSoundInternal : exinfo->suggestedsoundtype = 5 +[LOG] SystemI::createSoundInternal : exinfo->useropen = 00007FFBF0674660 +[LOG] SystemI::createSoundInternal : exinfo->userclose = 00007FFBF0674630 +[LOG] SystemI::createSoundInternal : exinfo->userread = 00007FFBF0674730 +[LOG] SystemI::createSoundInternal : exinfo->userseek = 00007FFBF06747F0 +[LOG] SystemI::createSoundInternal : exinfo->fileuserdata = 000002035A1A08B8 +[LOG] SystemI::createSoundInternal : exinfo->initialseekpostype = 1 +[LOG] SystemI::createSoundInternal : Stream 0/1: name='Rosa_Melo_02', format=5, channels=2, frequency=48000, lengthbytes=3260640, lengthpcm=17145600, pcmblocksize=0, loopstart=0, loopend=0, mode=0x00000000, channelmask=0x00000000, channelorder=0, peakvolume=0.248419. +[LOG] SystemI::DSPCodecPoolRegister : register codec pool for pool type 5 +[LOG] SystemI::createSoundInternal : Sample 0/1: name='foliage_dry_crush_squeeze_crunchy_crispy_001_55111', format=5, channels=2, frequency=48000, lengthbytes=34880, lengthpcm=101376, pcmblocksize=0, loopstart=0, loopend=0, mode=0x00000000, channelmask=0x00000000, channelorder=0, peakvolume=0.731995. +[LOG] Thread::initThread : Init FMOD file thread. Affinity: 0x4000000000000003, Priority: 0xFFFF7FFC, Stack Size: 65536, Semaphore: No, Sleep Time: 10, Looping: Yes. +[LOG] AsyncThread::threadFunc : Finished Asynchronous operation on sound 00000202A2449798 +[LOG] AsyncThread::threadFunc : Starting Asynchronous operation on sound 00000202A2449948 +[LOG] SystemI::createSoundInternal : Create name='Assets/Audio/Master.bank', mode=0x02010082 +[LOG] SystemI::createSoundInternal : exinfo->cbsize = 224 +[LOG] SystemI::createSoundInternal : exinfo->length = 27574784 +[LOG] SystemI::createSoundInternal : exinfo->fileoffset = 10144 +[LOG] SystemI::createSoundInternal : exinfo->numsubsounds = 1 +[LOG] SystemI::createSoundInternal : exinfo->inclusionlist = 00000202A9AFA7B0 +[LOG] SystemI::createSoundInternal : exinfo->inclusionlistnum = 1 +[LOG] SystemI::createSoundInternal : exinfo->suggestedsoundtype = 5 +[LOG] SystemI::createSoundInternal : exinfo->initialseekpostype = 1 +[LOG] SystemI::createSoundInternal : Stream 0/1: name='Rosa_Base_01', format=5, channels=2, frequency=48000, lengthbytes=3775680, lengthpcm=17193600, pcmblocksize=0, loopstart=0, loopend=0, mode=0x00000000, channelmask=0x00000000, channelorder=0, peakvolume=0.174706. +[LOG] AsyncThread::threadFunc : Finished Asynchronous operation on sound 00000202A2449948 +[LOG] AsyncThread::threadFunc : Starting Asynchronous operation on sound 00000202A2449AF8 +[LOG] SystemI::createSoundInternal : Create name='Assets/Audio/Master.bank', mode=0x02010082 +[LOG] SystemI::createSoundInternal : exinfo->cbsize = 224 +[LOG] SystemI::createSoundInternal : exinfo->length = 27574784 +[LOG] SystemI::createSoundInternal : exinfo->fileoffset = 10144 +[LOG] SystemI::createSoundInternal : exinfo->numsubsounds = 1 +[LOG] SystemI::createSoundInternal : exinfo->inclusionlist = 00000202A9AFA170 +[LOG] SystemI::createSoundInternal : exinfo->inclusionlistnum = 1 +[LOG] SystemI::createSoundInternal : exinfo->suggestedsoundtype = 5 +[LOG] SystemI::createSoundInternal : exinfo->initialseekpostype = 1 +[LOG] SystemI::createSoundInternal : Stream 0/1: name='Rosa_Ambient_Birds_01', format=5, channels=2, frequency=48000, lengthbytes=3372608, lengthpcm=17049600, pcmblocksize=0, loopstart=0, loopend=0, mode=0x00000000, channelmask=0x00000000, channelorder=0, peakvolume=0.007681. +[LOG] AsyncThread::threadFunc : Finished Asynchronous operation on sound 00000202A2449AF8 +[LOG] SoundI::release : Rosa_Ambient_Birds_01 (00000202A2449AF8) +[LOG] SoundI::release : Rosa_Ambient_Birds_01 (00000202A1232718) +[LOG] SoundI::release : Rosa_Ambient_Birds_01 (0000020235D40CE8) +[LOG] SoundI::release : Rosa_Base_01 (00000202A2449948) +[LOG] SoundI::release : Rosa_Base_01 (00000202A1232098) +[LOG] SoundI::release : Rosa_Base_01 (0000020235D40B38) +[LOG] SoundI::release : Rosa_Melo_02 (00000202A2449798) +[LOG] SoundI::release : Rosa_Melo_02 (00000202A1231A18) +[LOG] SoundI::release : Rosa_Melo_02 (0000020235D40628) +[LOG] SoundI::release : (00000202A4073688) +[LOG] SoundI::release : foliage_dry_crush_squeeze_crunchy_crispy_001_55111 (00000202A3AD7F48) +[LOG] Thread::callback : FMOD Studio update thread finished. +[LOG] Thread::callback : FMOD Studio bank load thread finished. +[LOG] Profile::disconnectAll : Profiler disconnecting all clients +[LOG] Thread::callback : FMOD Studio sample load thread finished. +[LOG] LiveUpdate::release : +[LOG] LiveUpdate::reset : Reset connection (reason Disconnected) +[LOG] Thread::callback : FMOD stream thread finished. +[LOG] Thread::callback : FMOD mixer thread finished. +[LOG] Profile::disconnectAll : Profiler disconnecting all clients +[LOG] SystemI::close : Closed.