public void OnParameterSet(AvatarController.Parameter parameter) { if (IsDestroyed()) { AvatarController.TEA_ParameterSet -= OnParameterSet; return; } if (this.Control.parameter.name == parameter.name) { isOn = (this.Control.value == parameter.fVal); transform.Find("Toggle").gameObject.SetActive(isOn); //Debug.Log($"OnParameter called in [{gameObject.name}], toggled to [{isOn}]"); } }
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (!string.IsNullOrEmpty(debugString)) { Debug.Log($"VRCPlayableLayerControl[{state}] {debugString}"); } foreach (VRC_AvatarParameterDriver.Parameter param in parameters) { AnimatorControllerParameterType paramType = AvatarController.current.GetParameterType(animator, param.name); float value = param.value; bool bValue = param.value > 0; if (VRC_AvatarParameterDriver.ChangeType.Add == param.type) { value += AvatarController.current.GetParameterValue(animator, param.name); } else if (VRC_AvatarParameterDriver.ChangeType.Random == param.type) { System.Random random = new System.Random(); //NOTE my best guess at what chance means if (AnimatorControllerParameterType.Bool == paramType) { bool currentBool = AvatarController.current.GetBool(animator, param.name); bValue = random.NextDouble() >= param.chance ? !currentBool : currentBool; } else { value = (float)(random.NextDouble() * (param.valueMax - param.valueMin) + param.valueMin); } } // --- set AvatarController.Parameter aParam = new AvatarController.Parameter() { name = param.name, type = paramType, boolean = bValue, fVal = value, iVal = Mathf.RoundToInt(value) }; AvatarController.current.SetAnimatorParameter(animator, aParam); }//for }