Super synth (#2447)

This commit is contained in:
Peter Wedder
2020-10-30 11:14:58 +02:00
committed by GitHub
parent 837792ee17
commit ed1cca2c59
2 changed files with 54 additions and 1 deletions

View File

@@ -42,6 +42,10 @@ namespace Content.Client.GameObjects.Components.Instruments
private uint _sequenceStartTick; private uint _sequenceStartTick;
private bool _allowPercussion;
private bool _allowProgramChange;
/// <summary> /// <summary>
/// A queue of MidiEvents to be sent to the server. /// A queue of MidiEvents to be sent to the server.
/// </summary> /// </summary>
@@ -98,6 +102,34 @@ namespace Content.Client.GameObjects.Components.Instruments
} }
} }
[ViewVariables(VVAccess.ReadWrite)]
public bool AllowPercussion
{
get => _allowPercussion;
set
{
_allowPercussion = value;
if (_renderer != null)
{
_renderer.DisablePercussionChannel = !_allowPercussion;
}
}
}
[ViewVariables(VVAccess.ReadWrite)]
public bool AllowProgramChange
{
get => _allowProgramChange;
set
{
_allowProgramChange = value;
if (_renderer != null)
{
_renderer.DisableProgramChangeEvent = !_allowProgramChange;
}
}
}
/// <summary> /// <summary>
/// Whether this instrument is handheld or not. /// Whether this instrument is handheld or not.
/// </summary> /// </summary>
@@ -128,7 +160,7 @@ namespace Content.Client.GameObjects.Components.Instruments
IoCManager.InjectDependencies(this); IoCManager.InjectDependencies(this);
} }
protected void SetupRenderer(bool fromStateChange = false) protected virtual void SetupRenderer(bool fromStateChange = false)
{ {
if (IsRendererAlive) return; if (IsRendererAlive) return;
@@ -142,6 +174,8 @@ namespace Content.Client.GameObjects.Components.Instruments
_renderer.MidiBank = _instrumentBank; _renderer.MidiBank = _instrumentBank;
_renderer.MidiProgram = _instrumentProgram; _renderer.MidiProgram = _instrumentProgram;
_renderer.TrackingEntity = Owner; _renderer.TrackingEntity = Owner;
_renderer.DisablePercussionChannel = !_allowPercussion;
_renderer.DisableProgramChangeEvent = !_allowProgramChange;
_renderer.OnMidiPlayerFinished += () => _renderer.OnMidiPlayerFinished += () =>
{ {
OnMidiPlaybackEnded?.Invoke(); OnMidiPlaybackEnded?.Invoke();
@@ -196,6 +230,8 @@ namespace Content.Client.GameObjects.Components.Instruments
serializer.DataField(this, x => Handheld, "handheld", false); serializer.DataField(this, x => Handheld, "handheld", false);
serializer.DataField(ref _instrumentProgram, "program", (byte) 1); serializer.DataField(ref _instrumentProgram, "program", (byte) 1);
serializer.DataField(ref _instrumentBank, "bank", (byte) 0); serializer.DataField(ref _instrumentBank, "bank", (byte) 0);
serializer.DataField(ref _allowPercussion, "allowPercussion", false);
serializer.DataField(ref _allowProgramChange, "allowProgramChange", false);
} }
public override void HandleNetworkMessage(ComponentMessage message, INetChannel channel, ICommonSession? session = null) public override void HandleNetworkMessage(ComponentMessage message, INetChannel channel, ICommonSession? session = null)

View File

@@ -206,3 +206,20 @@
- type: Item - type: Item
size: 24 size: 24
sprite: Objects/Fun/Instruments/bike_horn.rsi sprite: Objects/Fun/Instruments/bike_horn.rsi
- type: entity
name: super synthesizer
description: Blasting the ghetto with Touhou MIDIs since 2020.
parent: BaseHandheldInstrument
id: SuperSynthesizerInstrument
components:
- type: Instrument
allowPercussion: true
allowProgramChange: true
- type: Sprite
sprite: Objects/Fun/Instruments/h_synthesizer.rsi
state: icon
- type: Item
size: 24
sprite: Objects/Fun/Instruments/h_synthesizer.rsi