Skip to content

Commit 316d490

Browse files
authored
FEAT: add day night cycle in sleep decision (#49)
1 parent b3bece0 commit 316d490

File tree

5 files changed

+45
-1
lines changed

5 files changed

+45
-1
lines changed

Assets/Prefabs/Animals/Animal_Deer.prefab

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,10 @@ PrefabInstance:
487487
propertyPath: moveSpeed
488488
value: 0.5
489489
objectReference: {fileID: 0}
490+
- target: {fileID: -8264934038213892515, guid: 220ad0de1e362494dbef72b2bbadedd8, type: 3}
491+
propertyPath: sleepType
492+
value: 1
493+
objectReference: {fileID: 0}
490494
- target: {fileID: -8264934038213892515, guid: 220ad0de1e362494dbef72b2bbadedd8, type: 3}
491495
propertyPath: maxMoveTime
492496
value: 10

Assets/Prefabs/Animals/Animal_Tiger.prefab

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ PrefabInstance:
2020
propertyPath: moveSpeed
2121
value: 1.2
2222
objectReference: {fileID: 0}
23+
- target: {fileID: -8264934038213892515, guid: 220ad0de1e362494dbef72b2bbadedd8, type: 3}
24+
propertyPath: sleepType
25+
value: 1
26+
objectReference: {fileID: 0}
2327
- target: {fileID: -8264934038213892515, guid: 220ad0de1e362494dbef72b2bbadedd8, type: 3}
2428
propertyPath: maxMoveTime
2529
value: 60

Assets/Scripts/Animal/Animal.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ public enum FoodType
3939
Carnivore
4040
}
4141

42+
public enum SleepType
43+
{
44+
Day,
45+
Night,
46+
None
47+
}
48+
4249
public class Animal : MonoBehaviour
4350
{
4451
[HideInInspector] public NavMeshAgent navAgent;
@@ -92,6 +99,7 @@ public class Animal : MonoBehaviour
9299
public bool NeedToSleep => sleepValue <= 1;
93100
[HideInInspector] public bool isSleeping = false;
94101
public float sleepSpeed = 10f;
102+
public SleepType sleepType;
95103

96104
[HideInInspector] public bool isDead = false;
97105
[HideInInspector] public readonly List<GameObject> notReachableElements = new();

Assets/Scripts/Animal/DecisionTree.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ public void Start()
122122

123123
Node NeedToSleep = new(animal =>
124124
{
125-
return animal.NeedToSleep || animal.isSleeping;
125+
bool isInSleepTime = (animal.sleepType == SleepType.Day && DayNightCycle.Instance.currentTimeOfDay == TimeOfDay.Day) ||
126+
(animal.sleepType == SleepType.Night && DayNightCycle.Instance.currentTimeOfDay == TimeOfDay.Night);
127+
return (isInSleepTime && animal.sleepValue < 50) || animal.NeedToSleep || animal.isSleeping;
126128
},
127129
OnSleepLocation,
128130
NeedToEat);

Assets/TestsPlayMode/Decision.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ public IEnumerator Setup()
4545
ARtoVR.Instance.ToggleMode();
4646
yield return new WaitForSeconds(ARtoVR.Instance.transitionDuration + 3);
4747

48+
DayNightCycle.Instance.currentTimeOfDay = TimeOfDay.Day;
49+
4850
// ----- DecisionTree -----
4951
Assert.AreEqual(deer.eventType, EventType.Random);
5052
tree.Callback(deer);
@@ -188,5 +190,29 @@ public IEnumerator SleepBehaviour()
188190
tree.Callback(deer);
189191
Assert.AreEqual(deer.eventType, EventType.Sleep);
190192
yield return null;
193+
194+
DayNightCycle.Instance.currentTimeOfDay = TimeOfDay.Night;
195+
tree.Callback(deer);
196+
Assert.AreEqual(deer.eventType, EventType.Sleep);
197+
yield return null;
198+
199+
DayNightCycle.Instance.currentTimeOfDay = TimeOfDay.Day;
200+
tree.Callback(deer);
201+
Assert.AreEqual(deer.eventType, EventType.Sleep);
202+
yield return null;
203+
204+
DayNightCycle.Instance.currentTimeOfDay = TimeOfDay.Day;
205+
deer.sleepValue = 40f;
206+
deer.isSleeping = false;
207+
tree.Callback(deer);
208+
Assert.AreEqual(deer.eventType, EventType.Random);
209+
yield return null;
210+
211+
DayNightCycle.Instance.currentTimeOfDay = TimeOfDay.Day;
212+
deer.sleepValue = 100f;
213+
deer.isSleeping = false;
214+
tree.Callback(deer);
215+
Assert.AreEqual(deer.eventType, EventType.Random);
216+
yield return null;
191217
}
192218
}

0 commit comments

Comments
 (0)