|
|
|
|
/******************************************************************************/
|
|
|
|
|
/*
|
|
|
|
|
Project - Boing Kit
|
|
|
|
|
Publisher - Long Bunny Labs
|
|
|
|
|
http://LongBunnyLabs.com
|
|
|
|
|
Author - Ming-Lun "Allen" Chou
|
|
|
|
|
http://AllenChou.net
|
|
|
|
|
*/
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
namespace MudBun
|
|
|
|
|
{
|
|
|
|
|
public class MudFloater : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
[Range(0.0f, 10.0f)] public float Hover = 1.0f;
|
|
|
|
|
[Range(0.0f, 10.0f)] public float Omega = 1.0f; // angular velocity in radians
|
|
|
|
|
public bool UseLocalSpace = false;
|
|
|
|
|
private Vector3 m_hoverCenter;
|
|
|
|
|
private Quaternion m_hoverRot;
|
|
|
|
|
private float m_hoverPhase;
|
|
|
|
|
|
|
|
|
|
public enum RandomSeedEnum
|
|
|
|
|
{
|
|
|
|
|
Random,
|
|
|
|
|
Position,
|
|
|
|
|
Custom
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public RandomSeedEnum RandomSeed = RandomSeedEnum.Random;
|
|
|
|
|
[ConditionalField("RandomSeed", (int) RandomSeedEnum.Random, Label = " Value")] public int CustomRandomSeed = 0;
|
|
|
|
|
|
|
|
|
|
void Start()
|
|
|
|
|
{
|
|
|
|
|
m_hoverCenter = UseLocalSpace ? transform.localPosition : transform.position;
|
|
|
|
|
m_hoverRot = UseLocalSpace ? transform.localRotation : transform.rotation;
|
|
|
|
|
|
|
|
|
|
switch (RandomSeed)
|
|
|
|
|
{
|
|
|
|
|
case RandomSeedEnum.Position:
|
|
|
|
|
Random.InitState(Codec.Hash(transform.position));
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case RandomSeedEnum.Custom:
|
|
|
|
|
Random.InitState(CustomRandomSeed);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_hoverPhase = Random.value * 1000.0f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnEnable()
|
|
|
|
|
{
|
|
|
|
|
Start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FixedUpdate()
|
|
|
|
|
{
|
|
|
|
|
m_hoverPhase += Omega * Time.deltaTime;
|
|
|
|
|
Vector3 hoverVec =
|
|
|
|
|
0.05f * Mathf.Sin(1.37f * m_hoverPhase) * Vector3.right
|
|
|
|
|
+ 0.05f * Mathf.Sin(1.93f * m_hoverPhase + 1.234f) * Vector3.forward
|
|
|
|
|
+ 0.04f * Mathf.Sin(0.97f * m_hoverPhase + 4.321f) * Vector3.up;
|
|
|
|
|
hoverVec *= Hover;
|
|
|
|
|
Quaternion hoverQuat = Quaternion.FromToRotation(Vector3.up, hoverVec + Vector3.up);
|
|
|
|
|
if (UseLocalSpace)
|
|
|
|
|
{
|
|
|
|
|
transform.localPosition = m_hoverCenter + hoverVec;
|
|
|
|
|
transform.localRotation = m_hoverRot * hoverQuat;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
transform.position = m_hoverCenter + hoverVec;
|
|
|
|
|
transform.rotation = m_hoverRot * hoverQuat;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|