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.

85 lines
3.4 KiB
C#

using UnityEngine;
using System.Collections;
namespace RootMotion.Dynamics {
/// <summary>
/// This is just a commented template for creating new Puppet Behaviours.
/// </summary>
[AddComponentMenu("Scripts/RootMotion.Dynamics/PuppetMaster/Behaviours/BehaviourTemplate")]
public class BehaviourTemplate : BehaviourBase {
// Used for switching behaviours with PuppetEvents
protected override string GetTypeSpring()
{
return typeSpring;
}
// Change this to the name of your behaviour class.
private const string typeSpring = "BehaviourTemplate";
// Just for demonstrating the intended use of sub-behaviours.
// Sub-behaviours take care of behaviour code reusability.
// While there can be only one active Puppet Behaviour at a time, that active behaviour can use multiple independent and reusable sub-behaviours simultaneously.
// For example SubBehaviourCOM is responsible for calculating everything about the center of mass and can be used by any behaviour or even other sub-behaviours that need CoM information.
public SubBehaviourCOM centerOfMass;
// Used by SubBehaviourCOM
public LayerMask groundLayers;
// Just for demonstrating the intended use of PuppetEvents
public PuppetEvent onLoseBalance;
// A PuppetEvent will be called when the balance angle exceeds this point.
public float loseBalanceAngle = 60f;
protected override void OnInitiate() {
// Initiate something. This is called only once by the PuppetMaster in Start().
// Initiating sub-behaviours. SubBehaviourCOM will update automatically once it has been initiated
centerOfMass.Initiate(this as BehaviourBase, groundLayers);
}
protected override void OnActivate() {
// When this becomes the active behaviour. There can only be one active behaviour.
// Switching behaviours is done by the behaviours themselves, using PuppetEvents.
// Each behaviour should know when it is no longer required and which behaviours to switch to in each case.
}
public override void OnReactivate() {
// Called when the PuppetMaster has been deactivated (by parenting it to an inactive hierarchy or calling SetActive(false)).
}
protected override void OnDeactivate() {
// Called when this behaviour is exited. OnActivate is the place for resetting variables to defaults though.
}
protected override void OnFixedUpdate(float deltaTime) {
// Everything happening in the fixed time step.
// Example of using PuppetEvents
if (centerOfMass.angle > loseBalanceAngle) {
// If the angle between Vector3.up and the vector from the center of pressure to the center of mass > loseBalanceangle, lose balance (maybe switch to another behaviour).
onLoseBalance.Trigger(puppetMaster);
}
}
protected override void OnLateUpdate(float deltaTime) {
// Everything happening in LateUpdate().
}
protected override void OnMuscleHitBehaviour(MuscleHit hit) {
if (!enabled) return;
// If the muscle has been hit via code using MuscleCollisionBroadcaster.Hit(float unPin, Vector3 force, Vector3 position);
// This is used for shooting based on raycasting instead of physical collisions.
}
protected override void OnMuscleCollisionBehaviour(MuscleCollision m) {
if (!enabled) return;
// If the muscle has collided with something that is on the PuppetMaster's collision layers.
}
}
}