You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
3.0 KiB
C#

using UnityEngine;
using System.Collections;
namespace RootMotion.Dynamics {
/// <summary>
/// Booster for BehaviourPuppet. Can be used to enhance puppet collision resistance and/or dealing damage to other puppets.
/// </summary>
[System.Serializable]
public class Booster {
[Tooltip("If true, all the muscles will be boosted and the 'Muscles' and 'Groups' properties below will be ignored.")]
/// <summary>
/// If true, all the muscles will be boosted and the 'Muscles' and 'Groups' properties below will be ignored.
/// </summary>
public bool fullBody;
[Tooltip("Muscles to boost. Used only when 'Full Body' is false.")]
/// <summary>
/// Muscles to boost. Used only when 'Full Body' is false.
/// </summary>
public ConfigurableJoint[] muscles = new ConfigurableJoint[0];
[Tooltip("Muscle groups to boost. Used only when 'Full Body' is false.")]
/// <summary>
/// Muscle groups to boost. Used only when 'Full Body' is false.
/// </summary>
public Muscle.Group[] groups = new Muscle.Group[0];
[Tooltip("Immunity to apply to the muscles. If muscle immunity is 1, it can not be damaged.")]
/// <summary>
/// Immunity to apply to the muscles. If muscle immunity is 1, it can not be damaged.
/// </summary>
[Range(0f, 1f)] public float immunity;
[Tooltip("Impulse multiplier to be applied to the muscles. This makes them deal more damage to other puppets.")]
/// <summary>
/// Impulse multiplier to be applied to the muscles. This makes them deal more damage to other puppets.
/// </summary>
public float impulseMlp;
[Tooltip("Falloff for parent muscles (power of kinship degree).")]
/// <summary>
/// Falloff for parent muscles (power of kinship degree).
/// </summary>
public float boostParents;
[Tooltip("Falloff for child muscles (power of kinship degree).")]
/// <summary>
/// Falloff for child muscles (power of kinship degree).
/// </summary>
public float boostChildren;
[Tooltip("This does nothing on its own, you can use it in a 'yield return new WaitForseconds(delay);' call.")]
/// <summary>
/// This does nothing on its own, you can use it in a 'yield return new WaitForseconds(delay);' call.
/// </summary>
public float delay;
/// <summary>
/// Boost the puppet's performance.
/// </summary>
public void Boost(BehaviourPuppet puppet) {
if (fullBody) puppet.Boost(immunity, impulseMlp);
else {
// Muscles
foreach (ConfigurableJoint joint in muscles) {
for (int i = 0; i < puppet.puppetMaster.muscles.Length; i++) {
if (puppet.puppetMaster.muscles[i].joint == joint) {
puppet.Boost(i, immunity, impulseMlp, boostParents, boostChildren);
break;
}
}
}
// Groups
foreach (Muscle.Group group in groups) {
for (int i = 0; i < puppet.puppetMaster.muscles.Length; i++) {
if (puppet.puppetMaster.muscles[i].props.group == group) {
puppet.Boost(i, immunity, impulseMlp, boostParents, boostChildren);
}
}
}
}
}
}
}