- Added chicken sounds to the chickens.
- Began work on a game room so the world can be more of a hangout area.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -18,11 +18,17 @@ public enum ChickenState
|
||||
|
||||
public class Chimken : UdonSharpBehaviour
|
||||
{
|
||||
[SerializeField] private Transform GroundRayStart;
|
||||
[SerializeField] private Transform GroundRayEnd;
|
||||
[SerializeField] private Transform WallRayStart;
|
||||
[SerializeField] private Transform WallRayEnd;
|
||||
[SerializeField] private AudioSource _AudioSource;
|
||||
[SerializeField] private TimerSounds _IdleSoundsTimer;
|
||||
[SerializeField] private TimerSounds _HeldSoundsTimer;
|
||||
[SerializeField] private TimerSounds _AirborneSoundsTimer;
|
||||
[Space]
|
||||
[SerializeField] private string _FollowUser = "";
|
||||
[Space]
|
||||
[SerializeField] private Transform _GroundRayStart;
|
||||
[SerializeField] private Transform _GroundRayEnd;
|
||||
[SerializeField] private Transform _WallRayStart;
|
||||
[SerializeField] private Transform _WallRayEnd;
|
||||
|
||||
[UdonSynced, FieldChangeCallback(nameof(AnimationState))] private ChickenState _AnimationState = 0;
|
||||
[UdonSynced] private bool _IsBeingHeld = false;
|
||||
@@ -58,7 +64,7 @@ public class Chimken : UdonSharpBehaviour
|
||||
{
|
||||
SetAnimationState(ChickenState.Held);
|
||||
}
|
||||
else if (Physics.Raycast(GroundRayStart.position, GroundRayStart.forward, out HitInfo, GroundRayEnd.localPosition.z))
|
||||
else if (Physics.Raycast(_GroundRayStart.position, _GroundRayStart.forward, out HitInfo, _GroundRayEnd.localPosition.z))
|
||||
{
|
||||
transform.position = HitInfo.point;
|
||||
Airborne = false;
|
||||
@@ -72,10 +78,10 @@ public class Chimken : UdonSharpBehaviour
|
||||
_WallColliderTimer -= Time.fixedDeltaTime;
|
||||
if (_WallColliderTimer <= 0.0f && _Moving)
|
||||
{
|
||||
if (Physics.Raycast(WallRayStart.position, WallRayStart.forward, out HitInfo, WallRayEnd.localPosition.z))
|
||||
if (Physics.Raycast(_WallRayStart.position, _WallRayStart.forward, out HitInfo, _WallRayEnd.localPosition.z))
|
||||
{
|
||||
float OldMovementDirection = _MovementDirectionDegrees;
|
||||
Vector3 ReflectedAngle = Vector3.Reflect(WallRayStart.forward, HitInfo.normal);
|
||||
Vector3 ReflectedAngle = Vector3.Reflect(_WallRayStart.forward, HitInfo.normal);
|
||||
_MovementDirectionDegrees = Vector3.SignedAngle(Vector3.forward, ReflectedAngle, Vector3.up);
|
||||
}
|
||||
_WallColliderTimer = 0.25f;
|
||||
@@ -127,22 +133,22 @@ public class Chimken : UdonSharpBehaviour
|
||||
transform.position += (transform.forward * Time.fixedDeltaTime * RUN_SPEED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_Moving && _PlayerToFollow == null)
|
||||
{
|
||||
transform.rotation = Quaternion.Euler(
|
||||
transform.eulerAngles.x,
|
||||
Mathf.LerpAngle(transform.rotation.eulerAngles.y, _MovementDirectionDegrees, TURN_LERP_SPEED),
|
||||
transform.eulerAngles.z);
|
||||
}
|
||||
else
|
||||
{
|
||||
float Angle = Vector3.SignedAngle(transform.forward, (PlayerPositionLateral - ChickenPositionLateral).normalized, transform.up);
|
||||
transform.rotation = Quaternion.Euler(
|
||||
transform.eulerAngles.x,
|
||||
Mathf.LerpAngle(transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.y + Angle, TURN_LERP_SPEED),
|
||||
transform.eulerAngles.z);
|
||||
if (_PlayerToFollow == null)
|
||||
{
|
||||
transform.rotation = Quaternion.Euler(
|
||||
transform.eulerAngles.x,
|
||||
Mathf.LerpAngle(transform.rotation.eulerAngles.y, _MovementDirectionDegrees, TURN_LERP_SPEED),
|
||||
transform.eulerAngles.z);
|
||||
}
|
||||
else
|
||||
{
|
||||
float Angle = Vector3.SignedAngle(transform.forward, (PlayerPositionLateral - ChickenPositionLateral).normalized, transform.up);
|
||||
transform.rotation = Quaternion.Euler(
|
||||
transform.eulerAngles.x,
|
||||
Mathf.LerpAngle(transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.y + Angle, TURN_LERP_SPEED),
|
||||
transform.eulerAngles.z);
|
||||
}
|
||||
}
|
||||
|
||||
// Reset roll and pitch to zero on every physics update so the chicken stays upright
|
||||
@@ -191,7 +197,7 @@ public class Chimken : UdonSharpBehaviour
|
||||
|
||||
private void SetAnimationState(ChickenState State)
|
||||
{
|
||||
if (Networking.IsOwner(gameObject))
|
||||
if (Networking.IsOwner(gameObject) && AnimationState != State)
|
||||
{
|
||||
AnimationState = State;
|
||||
_MovementDirectionDegrees = Random.Range(0.0f, 360.0f - float.MinValue);
|
||||
@@ -209,24 +215,30 @@ public class Chimken : UdonSharpBehaviour
|
||||
{
|
||||
case ChickenState.Idle:
|
||||
_MovementTimer = 4.0f;
|
||||
PlayIdleSounds();
|
||||
break;
|
||||
case ChickenState.Walk:
|
||||
_MovementTimer = 4.5f;
|
||||
_Moving = true;
|
||||
PlayIdleSounds();
|
||||
break;
|
||||
case ChickenState.Run:
|
||||
_MovementTimer = 1.2f;
|
||||
_Moving = true;
|
||||
PlayIdleSounds();
|
||||
break;
|
||||
case ChickenState.Eat:
|
||||
_MovementTimer = 6.0f;
|
||||
PlayIdleSounds();
|
||||
break;
|
||||
case ChickenState.Held:
|
||||
_MovementTimer = 0.0f;
|
||||
PlayHeldSounds();
|
||||
break;
|
||||
case ChickenState.Airborne:
|
||||
_MovementTimer = 0.0f;
|
||||
_Moving = true;
|
||||
PlayAirborneSounds();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -246,6 +258,28 @@ public class Chimken : UdonSharpBehaviour
|
||||
}
|
||||
|
||||
|
||||
private void PlayIdleSounds()
|
||||
{
|
||||
_HeldSoundsTimer.StopTimer();
|
||||
_AirborneSoundsTimer.StopTimer();
|
||||
_IdleSoundsTimer.StartTimer();
|
||||
}
|
||||
|
||||
private void PlayHeldSounds()
|
||||
{
|
||||
_IdleSoundsTimer.StopTimer();
|
||||
_AirborneSoundsTimer.StopTimer();
|
||||
_HeldSoundsTimer.StartTimer();
|
||||
}
|
||||
|
||||
private void PlayAirborneSounds()
|
||||
{
|
||||
_IdleSoundsTimer.StopTimer();
|
||||
_HeldSoundsTimer.StopTimer();
|
||||
_AirborneSoundsTimer.StartTimer();
|
||||
}
|
||||
|
||||
|
||||
private ChickenState AnimationState
|
||||
{
|
||||
set
|
||||
|
||||
@@ -80,7 +80,7 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: true
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
|
||||
@@ -3,13 +3,12 @@ using UdonSharp;
|
||||
using UnityEngine;
|
||||
using VRC.SDKBase;
|
||||
using VRC.Udon;
|
||||
using static UnityEditor.EditorApplication;
|
||||
|
||||
|
||||
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
|
||||
public class TimerBase : UdonSharpBehaviour
|
||||
{
|
||||
public float TimerLength = 0.0f;
|
||||
protected float TimerLength = 0.0f;
|
||||
private float _TimerCounter = 0.0f;
|
||||
private bool _TimerIsRunning = false;
|
||||
|
||||
@@ -21,7 +20,6 @@ public class TimerBase : UdonSharpBehaviour
|
||||
_TimerCounter -= Time.deltaTime;
|
||||
if (_TimerCounter <= 0.0f)
|
||||
{
|
||||
_TimerCounter = TimerLength;
|
||||
_TimerIsRunning = false;
|
||||
|
||||
TimerEvent();
|
||||
@@ -36,10 +34,13 @@ public class TimerBase : UdonSharpBehaviour
|
||||
}
|
||||
|
||||
|
||||
public void StartTimer()
|
||||
public virtual void StartTimer()
|
||||
{
|
||||
_TimerCounter = TimerLength;
|
||||
_TimerIsRunning = true;
|
||||
if (!_TimerIsRunning)
|
||||
{
|
||||
_TimerCounter = TimerLength;
|
||||
_TimerIsRunning = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void PauseTimer()
|
||||
@@ -52,7 +53,7 @@ public class TimerBase : UdonSharpBehaviour
|
||||
_TimerIsRunning = true;
|
||||
}
|
||||
|
||||
public void StopTimer()
|
||||
public virtual void StopTimer()
|
||||
{
|
||||
PauseTimer();
|
||||
_TimerCounter = TimerLength;
|
||||
|
||||
@@ -44,7 +44,7 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 5
|
||||
Data: 8
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
@@ -80,7 +80,7 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: true
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
@@ -321,6 +321,177 @@ MonoBehaviour:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: _Loop
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _Loop
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 8
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 8
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 6
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: true
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 19|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 2
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data: 20|UnityEngine.SpaceAttribute, UnityEngine.CoreModule
|
||||
- Name: height
|
||||
Entry: 4
|
||||
Data: 8
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data: 21|UnityEngine.SerializeField, UnityEngine.CoreModule
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: _MinimumDelay
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _MinimumDelay
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 3
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 3
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 6
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: true
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 23|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 1
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data: 24|UnityEngine.SerializeField, UnityEngine.CoreModule
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: _MaximumDelay
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 25|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _MaximumDelay
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 3
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 3
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 6
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: true
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 26|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 1
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data: 27|UnityEngine.SerializeField, UnityEngine.CoreModule
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
|
||||
@@ -10,24 +10,35 @@ public class TimerSounds : TimerBase
|
||||
{
|
||||
[SerializeField] private AudioSource _AudioSource;
|
||||
[SerializeField] private AudioClip[] _AudioClips;
|
||||
|
||||
[Space]
|
||||
[SerializeField] private bool _Loop = true;
|
||||
[SerializeField] private float _MinimumDelay = 0.0f;
|
||||
[SerializeField] private float _MaximumDelay = 1.0f;
|
||||
|
||||
|
||||
private void Start()
|
||||
{
|
||||
TimerLength = 0.0f;
|
||||
StartTimer();
|
||||
TimerLength = Random.Range(_MinimumDelay, _MaximumDelay);
|
||||
}
|
||||
|
||||
|
||||
public override void StopTimer()
|
||||
{
|
||||
base.StopTimer();
|
||||
TimerLength = 0.0f;
|
||||
}
|
||||
|
||||
public override void TimerEvent()
|
||||
{
|
||||
AudioClip NextAudioClip = _AudioClips[Random.Range(0, _AudioClips.Length)];
|
||||
|
||||
_AudioSource.Stop();
|
||||
AudioClip NextAudioClip = _AudioClips[Random.Range(0, _AudioClips.Length)];
|
||||
_AudioSource.clip = NextAudioClip;
|
||||
_AudioSource.Play();
|
||||
|
||||
TimerLength = NextAudioClip.length + Random.Range(2.0f, 7.0f);
|
||||
StartTimer();
|
||||
if (_Loop)
|
||||
{
|
||||
TimerLength = NextAudioClip.length + Random.Range(_MinimumDelay, _MaximumDelay);
|
||||
StartTimer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user