//--------------------------------------------------------------------------- EVENTS public void Notify_PropertyValueChanged(CProp oProp, float nValueOld) { //###LEARN: How to implement events EventArgs_PropertyValueChanged oEventArgs = new EventArgs_PropertyValueChanged(); oEventArgs.Property = oProp; oEventArgs.PropertyID = oProp._nPropEnumOrdinal; oEventArgs.PropertyName = oProp._sNameProp; oEventArgs.ValueNew = oProp._nValueLocal; oEventArgs.ValueOld = nValueOld; EventHandler<EventArgs_PropertyValueChanged> oHandler = Event_PropertyValueChanged; if (oHandler != null) oHandler(this, oEventArgs); }
void Event_PropertyChangedValue(object sender, EventArgs_PropertyValueChanged oArgs) { // Fired everytime user adjusts a property. // 'Bake' the morphing mesh as per the player's morphing parameters into a 'MorphResult' mesh that can be serialized to Unity. Matches Blender's CBodyBase.UpdateMorphResultMesh() Debug.LogFormat("CBodyBase updates body '{0}' because property '{1}' changed to value {2}", _sBodyPrefix, oArgs.PropertyName, oArgs.ValueNew); if (oArgs.Property._oObjectExtraFunctionality == null) oArgs.Property._oObjectExtraFunctionality = new CMorphChannel(this, oArgs.PropertyName); CMorphChannel oMorphChannel = oArgs.Property._oObjectExtraFunctionality as CMorphChannel; bool bMeshChanged = oMorphChannel.ApplyMorph(oArgs.ValueNew); if (bMeshChanged) { _oMeshMorphResult._oMeshNow.vertices = _oMeshMorphResult._memVerts.L; //###IMPROVE: to some helper function? _oMeshMorphResult.UpdateNormals(); // Morphing invalidates normals... update _bParticlePositionsUpdated = true; // Flag Flex to perform an update of its particle positions... } }