private void On_Transaction_Handler( Blockchain_Listener.Transaction transaction ) { lock( this.transactions ) { this.transactions.Enqueue( transaction ); } }
protected override void Process_Transaction( Blockchain_Listener.Transaction transaction ) { Vector3 spawn_position = UnityEngine.Random.onUnitSphere * this.radius; spawn_position.y = 0f; spawn_position += this.transform.position; float size = Mathf.Max( this.min_size, transaction.Amount * this.size_per_btc ); Transform spawned = GameObject.CreatePrimitive( PrimitiveType.Sphere ).transform; spawned.position = spawn_position; spawned.localScale = Vector3.one * size; }
protected virtual void Start() { if (this.blockchain_listener == null) { this.blockchain_listener = this.GetComponent <Blockchain_Listener>(); if (this.blockchain_listener == null) { Debug.LogWarning("No blockchain listener found"); return; } } this.blockchain_listener.On_Transaction += this.On_Transaction_Handler; this.transactions = new Queue <Blockchain_Listener.Transaction>(); }
protected virtual void Start() { if( this.blockchain_listener == null ) { this.blockchain_listener = this.GetComponent<Blockchain_Listener>(); if( this.blockchain_listener == null ) { Debug.LogWarning( "No blockchain listener found" ); return; } } this.blockchain_listener.On_Transaction += this.On_Transaction_Handler; this.transactions = new Queue<Blockchain_Listener.Transaction>(); }
protected abstract void Process_Transaction( Blockchain_Listener.Transaction transaction );
protected override void Process_Transaction( Blockchain_Listener.Transaction transaction ) { this.StartCoroutine( this.Process_Transaction_Coroutine( transaction ) ); }
private IEnumerator Process_Transaction_Coroutine( Blockchain_Listener.Transaction transaction ) { // Wait a small amount of time, helps with many transactions arriving in clusters yield return new WaitForSeconds( Random.value ); // Instantiate and position particle system Vector3 spawn_position = new Vector3( this.min_spawn_x + ( ( this.max_spawn_x - this.min_spawn_x ) * Random.value ), this.spawn_y, this.spawn_z ); GameObject particle_system_gameobject = Object.Instantiate( this.particle_system_prefab ) as GameObject; particle_system_gameobject.transform.position = spawn_position; // Randomly select a colour (note only activate 2 of the 3 components so we don't // end up with washed out pastel colours) Color start_colour = new Color( 0f, 0f, 0f, 1f ); float rand_value = Random.value; if( rand_value < 0.33333333333333333f ) { start_colour.r = 1f; if( Random.value < 0.5f ) { start_colour.g = Random.value; } else { start_colour.b = Random.value; } } else if( rand_value < 0.66666666666666667f ) { start_colour.g = 1f; if( Random.value < 0.5f ) { start_colour.r = Random.value; } else { start_colour.b = Random.value; } } else { start_colour.b = 1f; if( Random.value < 0.5f ) { start_colour.r = Random.value; } else { start_colour.g = Random.value; } } ParticleSystem[] particle_systems = particle_system_gameobject.GetComponentsInChildren<ParticleSystem>(); foreach( ParticleSystem particle_system in particle_systems ) { particle_system.startColor = start_colour; } // Deal with particle system customisations float t = Mathf.InverseLerp( this.min_amount, this.max_amount, transaction.Amount ); foreach( Particle_System_Customisation customisation in this.particle_system_customisations ) { ParticleSystem particle_system; if( customisation.path == "" ) { particle_system = particle_system_gameobject.GetComponent<ParticleSystem>(); } else { Transform child = particle_system_gameobject.transform.Find( customisation.path ); if( child == null ) { Debug.LogWarning( "Couldn't find child '" + customisation.path + "' on Transform " + particle_system_gameobject.transform ); continue; } particle_system = child.GetComponent<ParticleSystem>(); } if( particle_system == null ) { Debug.LogWarning( "Particle System not found for '" + customisation.path + "'" ); continue; } if( customisation.override_emission_rate ) { particle_system.emissionRate = this.LerpIntRounded( customisation.min_emission_rate, customisation.max_emission_rate, t ); } if( customisation.override_start_speed ) { particle_system.startSpeed = Mathf.Lerp( customisation.min_start_speed, customisation.max_start_speed, t ); } } // Audio AudioClip audio_clip = null; float pitch = 1f; if( this.bang_sounds != null && this.bang_sounds.Length > 0 ) { int index = 0; while( index < ( this.bang_sounds.Length - 1 ) && this.bang_sounds[index + 1].amount <= transaction.Amount ) { ++index; } audio_clip = this.bang_sounds[index].audio_clip; pitch = Random.Range( this.bang_sounds[index].min_pitch_shift, this.bang_sounds[index].max_pitch_shift ); } ParticleSystem root_particle_system = particle_system_gameobject.GetComponent<ParticleSystem>(); this.StartCoroutine( this.Do_Text_And_Audio( root_particle_system, transaction.Amount, Mathf.Lerp( this.min_text_size, this.max_text_size, t ), audio_clip, pitch ) ); this.StartCoroutine( this.Destroy_Particle_System_When_Done( root_particle_system ) ); }