using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace Team.FFFeederService.Models
{
///
/// 单个平台振动动作参数
///
public class SingleActionParam : INotifyPropertyChanged
{
private VoiceMotorParam _Motor1;
public VoiceMotorParam Motor1
{
get { return _Motor1; }
set { SetProperty(ref _Motor1, value); }
}
private VoiceMotorParam _Motor2;
public VoiceMotorParam Motor2
{
get { return _Motor2; }
set { SetProperty(ref _Motor2, value); }
}
private VoiceMotorParam _Motor3;
public VoiceMotorParam Motor3
{
get { return _Motor3; }
set { SetProperty(ref _Motor3, value); }
}
private VoiceMotorParam _Motor4;
public VoiceMotorParam Motor4
{
get { return _Motor4; }
set { SetProperty(ref _Motor4, value); }
}
private int _DurationValue;
///
/// 持续时长
///
public int DurationValue
{
get { return _DurationValue; }
set { SetProperty(ref _DurationValue, value); }
}
public SingleActionParam Copy()
{
return new SingleActionParam()
{
Motor1 = new VoiceMotorParam()
{
Amplitude = this.Motor1.Amplitude,
Frequency = this.Motor1.Frequency,
Phase = this.Motor1.Phase,
WaveShape = this.Motor1.WaveShape
},
Motor2 = new VoiceMotorParam()
{
Amplitude = this.Motor2.Amplitude,
Frequency = this.Motor2.Frequency,
Phase = this.Motor2.Phase,
WaveShape = this.Motor2.WaveShape
},
Motor3 = new VoiceMotorParam()
{
Amplitude = this.Motor3.Amplitude,
Frequency = this.Motor3.Frequency,
Phase = this.Motor3.Phase,
WaveShape = this.Motor3.WaveShape
},
Motor4 = new VoiceMotorParam()
{
Amplitude = this.Motor4.Amplitude,
Frequency = this.Motor4.Frequency,
Phase = this.Motor4.Phase,
WaveShape = this.Motor4.WaveShape
},
DurationValue=this.DurationValue
};
}
#region 属性更改通知
///
/// Occurs when a property value changes.
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// Checks if a property already matches a desired value. Sets the property and
/// notifies listeners only when necessary.
///
/// Type of the property.
/// Reference to a property with both getter and setter.
/// Desired value for the property.
/// Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers that
/// support CallerMemberName.
/// True if the value was changed, false if the existing value matched the
/// desired value.
protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer.Default.Equals(storage, value)) return false;
storage = value;
RaisePropertyChanged(propertyName);
return true;
}
///
/// Checks if a property already matches a desired value. Sets the property and
/// notifies listeners only when necessary.
///
/// Type of the property.
/// Reference to a property with both getter and setter.
/// Desired value for the property.
/// Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers that
/// support CallerMemberName.
/// Action that is called after the property value has been changed.
/// True if the value was changed, false if the existing value matched the
/// desired value.
protected virtual bool SetProperty(ref T storage, T value, Action onChanged, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer.Default.Equals(storage, value)) return false;
storage = value;
onChanged?.Invoke();
RaisePropertyChanged(propertyName);
return true;
}
///
/// Raises this object's PropertyChanged event.
///
/// Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers
/// that support .
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
///
/// Raises this object's PropertyChanged event.
///
/// The PropertyChangedEventArgs
protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
{
PropertyChanged?.Invoke(this, args);
}
#endregion
}
}