private void AddImpulseSource(Weapon weapon, WeaponConfig weaponConfig) { var impulseDef = new CinemachineImpulseDefinition(); impulseDef.m_RawSignal = _cinemachineDataProvider.DefaultCinemachineFixedSignal; impulseDef.m_AmplitudeGain = weaponConfig.visualImpact; impulseDef.m_FrequencyGain = 7; var impulseSource = weapon.gameObject.AddComponent <CinemachineImpulseSource>(); impulseSource.m_ImpulseDefinition = impulseDef; weapon.AddImpulseSource(impulseSource); }
public override float GetPropertyHeight(SerializedProperty prop, GUIContent label) { CinemachineImpulseDefinition myClass = null; // to access name strings SignalSourceAsset asset = null; float height = 0; mHideProperties.Clear(); string prefix = prop.name; prop.NextVisible(true); // Skip outer foldout do { if (!prop.propertyPath.StartsWith(prefix)) { break; } string header = HeaderText(prop); if (header != null) { height += HeaderHeight + vSpace; } // Do we hide this property? bool hide = false; if (prop.name == SerializedPropertyHelper.PropertyName(() => myClass.m_RawSignal)) { asset = prop.objectReferenceValue as SignalSourceAsset; } if (prop.name == SerializedPropertyHelper.PropertyName(() => myClass.m_RepeatMode)) { hide = asset == null || asset.SignalDuration <= 0; } else if (prop.name == SerializedPropertyHelper.PropertyName(() => myClass.m_Randomize)) { hide = asset == null || asset.SignalDuration > 0; } if (hide) { mHideProperties.Add(prop.name); } else { height += EditorGUI.GetPropertyHeight(prop, false) + vSpace; } } while (prop.NextVisible(prop.isExpanded)); return(height); }
public static void GenerateImpulseAt(CameraShakeParams shakeParams, Vector3 position, Vector3 direction) { CinemachineImpulseDefinition impulseDefinition = new CinemachineImpulseDefinition(); impulseDefinition.m_ImpulseChannel = GameConfig.Instance.m_ImpulseChannel; impulseDefinition.m_RawSignal = GameConfig.Instance.m_ImpulseRawSignal; impulseDefinition.m_AmplitudeGain = shakeParams.m_AmplitudeGain; impulseDefinition.m_FrequencyGain = shakeParams.m_FrequencyGain; impulseDefinition.m_RepeatMode = CinemachineImpulseDefinition.RepeatMode.Stretch; impulseDefinition.m_Randomize = true; impulseDefinition.m_TimeEnvelope.m_AttackTime = shakeParams.m_AttackTime; impulseDefinition.m_TimeEnvelope.m_SustainTime = shakeParams.m_SustainTime; impulseDefinition.m_TimeEnvelope.m_DecayTime = shakeParams.m_DecayTime; impulseDefinition.m_ImpactRadius = 100f; impulseDefinition.m_DirectionMode = CinemachineImpulseManager.ImpulseEvent.DirectionMode.Fixed; impulseDefinition.m_DissipationMode = CinemachineImpulseManager.ImpulseEvent.DissipationMode.ExponentialDecay; impulseDefinition.m_DissipationDistance = 1000f; impulseDefinition.CreateEvent(position, direction); }
void Execute() { if (!UpdateCache(Fsm.GetOwnerDefaultTarget(gameObject))) { return; } _impulseDefinition = this.cachedComponent.m_ImpulseDefinition; _envelopDefinition = _impulseDefinition.m_TimeEnvelope; if (!rawSignal.IsNone) { rawSignal.Value = _impulseDefinition.m_RawSignal; } if (!amplitudeGain.IsNone) { amplitudeGain.Value = _impulseDefinition.m_AmplitudeGain; } if (!frequencyGain.IsNone) { frequencyGain.Value = _impulseDefinition.m_FrequencyGain; } if (!repeatMode.IsNone) { repeatMode.Value = _impulseDefinition.m_RepeatMode; } if (!randomize.IsNone) { randomize.Value = _impulseDefinition.m_Randomize; } if (!attackTime.IsNone) { attackTime.Value = _envelopDefinition.m_AttackTime; } if (!sustainTime.IsNone) { _envelopDefinition.m_SustainTime = sustainTime.Value; } if (!decayTime.IsNone) { decayTime.Value = _envelopDefinition.m_DecayTime; } if (!scaleWithImpact.IsNone) { scaleWithImpact.Value = _envelopDefinition.m_ScaleWithImpact; } if (!holdForever.IsNone) { holdForever.Value = _envelopDefinition.m_HoldForever; } if (!impactRadius.IsNone) { impactRadius.Value = _impulseDefinition.m_ImpactRadius; } if (!directionMode.IsNone) { directionMode.Value = _impulseDefinition.m_DirectionMode; } if (!dissipationMode.IsNone) { dissipationMode.Value = _impulseDefinition.m_DissipationMode; } if (!dissipationDistance.IsNone) { dissipationDistance.Value = _impulseDefinition.m_DissipationDistance; } }
void Execute() { if (!UpdateCache(Fsm.GetOwnerDefaultTarget(gameObject))) { return; } _impulseDefinition = this.cachedComponent.m_ImpulseDefinition; _envelopDefinition = _impulseDefinition.m_TimeEnvelope; if (!rawSignal.IsNone) { _impulseDefinition.m_RawSignal = rawSignal.Value as SignalSourceAsset; } if (!amplitudeGain.IsNone) { _impulseDefinition.m_AmplitudeGain = amplitudeGain.Value; } if (!frequencyGain.IsNone) { _impulseDefinition.m_FrequencyGain = frequencyGain.Value; } if (!repeatMode.IsNone) { _impulseDefinition.m_RepeatMode = (CinemachineImpulseDefinition.RepeatMode)repeatMode.Value; } if (!randomize.IsNone) { _impulseDefinition.m_Randomize = randomize.Value; } if (attackShape.curve.length > 0) { _envelopDefinition.m_AttackShape = attackShape.curve; } if (!attackTime.IsNone) { _envelopDefinition.m_AttackTime = attackTime.Value; } if (!sustainTime.IsNone) { _envelopDefinition.m_SustainTime = sustainTime.Value; } if (decayShape.curve.length > 0) { _envelopDefinition.m_DecayShape = decayShape.curve; } if (!decayTime.IsNone) { _envelopDefinition.m_DecayTime = decayTime.Value; } if (!scaleWithImpact.IsNone) { _envelopDefinition.m_ScaleWithImpact = scaleWithImpact.Value; } if (!holdForever.IsNone) { _envelopDefinition.m_HoldForever = holdForever.Value; } if (!impactRadius.IsNone) { _impulseDefinition.m_ImpactRadius = impactRadius.Value; } if (!directionMode.IsNone) { _impulseDefinition.m_DirectionMode = (CinemachineImpulseManager.ImpulseEvent.DirectionMode)directionMode.Value; } if (!dissipationMode.IsNone) { _impulseDefinition.m_DissipationMode = (CinemachineImpulseManager.ImpulseEvent.DissipationMode)dissipationMode.Value; } if (!dissipationDistance.IsNone) { _impulseDefinition.m_DissipationDistance = dissipationDistance.Value; } _impulseDefinition.m_TimeEnvelope = _envelopDefinition; this.cachedComponent.m_ImpulseDefinition = _impulseDefinition; }
void DrawImpulseShapeCombo(Rect fullRect, SerializedProperty property) { float floatFieldWidth = EditorGUIUtility.fieldWidth + 2; SerializedProperty timeProp = property.FindPropertyRelative(() => m_MyClass.m_ImpulseDuration); if (m_TimeText == null) { m_TimeText = new GUIContent(" s", timeProp.tooltip); m_TimeTextWidth = GUI.skin.label.CalcSize(m_TimeText).x; } var graphRect = fullRect; graphRect.y += EditorGUIUtility.singleLineHeight + vSpace; graphRect.height -= EditorGUIUtility.singleLineHeight + vSpace; var indentLevel = EditorGUI.indentLevel; Rect r = fullRect; r.height = EditorGUIUtility.singleLineHeight; r = EditorGUI.PrefixLabel(r, EditorGUI.BeginProperty( r, new GUIContent(m_ShapeProperty.displayName, m_ShapeProperty.tooltip), property)); m_ShapeProperty.isExpanded = EditorGUI.Foldout(r, m_ShapeProperty.isExpanded, GUIContent.none); bool isCustom = m_ShapeProperty.intValue == (int)CinemachineImpulseDefinition.ImpulseShapes.Custom; r.width -= floatFieldWidth + m_TimeTextWidth; if (isCustom) { r.width -= 2 * r.height; } EditorGUI.BeginChangeCheck(); { EditorGUI.PropertyField(r, m_ShapeProperty, GUIContent.none); if (EditorGUI.EndChangeCheck()) { InvalidateImpulseGraphSample(); } if (!isCustom && Event.current.type == EventType.Repaint && m_ShapeProperty.isExpanded) { DrawImpulseGraph(graphRect, CinemachineImpulseDefinition.GetStandardCurve( (CinemachineImpulseDefinition.ImpulseShapes)m_ShapeProperty.intValue)); } } if (isCustom) { SerializedProperty curveProp = property.FindPropertyRelative(() => m_MyClass.m_CustomImpulseShape); r.x += r.width; r.width = 2 * r.height; EditorGUI.BeginChangeCheck(); EditorGUI.PropertyField(r, curveProp, GUIContent.none); if (EditorGUI.EndChangeCheck()) { curveProp.animationCurveValue = RuntimeUtility.NormalizeCurve(curveProp.animationCurveValue, true, false); curveProp.serializedObject.ApplyModifiedProperties(); InvalidateImpulseGraphSample(); } if (Event.current.type == EventType.Repaint && m_ShapeProperty.isExpanded) { DrawImpulseGraph(graphRect, curveProp.animationCurveValue); } } // Time float oldWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = m_TimeTextWidth; r.x += r.width; r.width = floatFieldWidth + EditorGUIUtility.labelWidth; EditorGUI.BeginChangeCheck(); EditorGUI.PropertyField(r, timeProp, m_TimeText); if (EditorGUI.EndChangeCheck()) { timeProp.floatValue = Mathf.Max(timeProp.floatValue, 0); } EditorGUIUtility.labelWidth = oldWidth; EditorGUI.indentLevel = indentLevel; }