parent
851911ce39
commit
1a972a3018
@ -16358,7 +16358,7 @@ GameObject:
|
|||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 483976618}
|
- component: {fileID: 483976618}
|
||||||
m_Layer: 16
|
m_Layer: 16
|
||||||
m_Name: InteractionProps
|
m_Name: Props
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
@ -40034,6 +40034,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 856aad87fa8b411f90b036b9c5e05378, type: 3}
|
m_Script: {fileID: 11500000, guid: 856aad87fa8b411f90b036b9c5e05378, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
<Toilets>k__BackingField: []
|
||||||
prisonPoint: {fileID: 0}
|
prisonPoint: {fileID: 0}
|
||||||
--- !u!1001 &1254663816
|
--- !u!1001 &1254663816
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
|
@ -65,7 +65,7 @@ namespace BlueWaterProject.Type
|
|||||||
}
|
}
|
||||||
else if (stateMachine.CurrentState.GetType() != typeof(MotionSickState))
|
else if (stateMachine.CurrentState.GetType() != typeof(MotionSickState))
|
||||||
{
|
{
|
||||||
var motionSickState = new MotionSickState();
|
var motionSickState = new MotionSickState(agent, InShipMapInfo);
|
||||||
motionSickState.OnEnterAction += OnEnterAction;
|
motionSickState.OnEnterAction += OnEnterAction;
|
||||||
stateMachine.ChangeState(motionSickState);
|
stateMachine.ChangeState(motionSickState);
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ namespace BlueWaterProject.Type
|
|||||||
private void InitNatureValue()
|
private void InitNatureValue()
|
||||||
{
|
{
|
||||||
MotionSickValue = 0;
|
MotionSickValue = 0;
|
||||||
motionSickMaxValue = 300;
|
motionSickMaxValue = Random.Range(100, 1000);
|
||||||
hungerValue = 0;
|
hungerValue = 0;
|
||||||
hungerMaxValue = 100;
|
hungerMaxValue = 100;
|
||||||
diseaseValue = 0;
|
diseaseValue = 0;
|
||||||
|
@ -1,17 +1,21 @@
|
|||||||
// ReSharper disable once CheckNamespace
|
// ReSharper disable once CheckNamespace
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Serialization;
|
||||||
|
|
||||||
namespace BlueWaterProject
|
namespace BlueWaterProject
|
||||||
{
|
{
|
||||||
public class InShipMapInfo : MonoBehaviour
|
public class InShipMapInfo : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
[field: SerializeField] public List<Toilet> Toilets { get; set; }
|
||||||
private GameObject usablePrisonDoor;
|
private GameObject usablePrisonDoor;
|
||||||
public Transform prisonPoint;
|
public Transform prisonPoint;
|
||||||
|
|
||||||
private void Init()
|
private void Init()
|
||||||
{
|
{
|
||||||
|
Toilets = new List<Toilet>();
|
||||||
usablePrisonDoor = GameObject.Find("UsablePrisonDoor");
|
usablePrisonDoor = GameObject.Find("UsablePrisonDoor");
|
||||||
prisonPoint = GameObject.Find("PrisonPoint").transform;
|
prisonPoint = GameObject.Find("PrisonPoint").transform;
|
||||||
}
|
}
|
||||||
@ -30,5 +34,10 @@ namespace BlueWaterProject
|
|||||||
{
|
{
|
||||||
usablePrisonDoor.SetActive(true);
|
usablePrisonDoor.SetActive(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddToilet(Toilet toilet)
|
||||||
|
{
|
||||||
|
Toilets.Add(toilet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,22 +1,80 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using BlueWaterProject.Type;
|
using BlueWaterProject.Type;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.AI;
|
||||||
|
|
||||||
namespace BlueWaterProject
|
namespace BlueWaterProject
|
||||||
{
|
{
|
||||||
public class MotionSickState : INpcState
|
public class MotionSickState : INpcState
|
||||||
{
|
{
|
||||||
public event Action OnEnterAction;
|
public event Action OnEnterAction;
|
||||||
|
private NavMeshAgent agent;
|
||||||
|
private InShipMapInfo inShipMapInfo;
|
||||||
|
private bool isMovingToToilet;
|
||||||
|
private Toilet targetToilet;
|
||||||
|
|
||||||
|
public MotionSickState(NavMeshAgent agent, InShipMapInfo inShipMapInfo)
|
||||||
|
{
|
||||||
|
this.agent = agent;
|
||||||
|
this.inShipMapInfo = inShipMapInfo;
|
||||||
|
}
|
||||||
|
|
||||||
public void OnEnter(NpcStateMachine npcStateMachine)
|
public void OnEnter(NpcStateMachine npcStateMachine)
|
||||||
{
|
{
|
||||||
npcStateMachine.InstantiateObject(DataManager.Inst.vomit, npcStateMachine.transform.position);
|
var toilets = inShipMapInfo.Toilets;
|
||||||
OnEnterAction?.Invoke();
|
|
||||||
npcStateMachine.RestorePreviousState();
|
// 화장실을 NPC와의 거리에 따라 정렬합니다.
|
||||||
|
var sortedToilets = toilets.OrderBy(toilet => Vector3.Distance(agent.transform.position, toilet.transform.position)).ToList();
|
||||||
|
|
||||||
|
Toilet availableToilet = null;
|
||||||
|
|
||||||
|
foreach (var toilet in sortedToilets)
|
||||||
|
{
|
||||||
|
// 사용 가능한 화장실을 찾습니다.
|
||||||
|
if (!toilet.IsUsed)
|
||||||
|
{
|
||||||
|
availableToilet = toilet;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 사용 가능한 화장실이 있는 경우
|
||||||
|
if (availableToilet != null)
|
||||||
|
{
|
||||||
|
agent.SetDestination(availableToilet.transform.position);
|
||||||
|
agent.stoppingDistance = 0;
|
||||||
|
|
||||||
|
isMovingToToilet = true;
|
||||||
|
targetToilet = availableToilet;
|
||||||
|
agent.SetDestination(availableToilet.transform.position);
|
||||||
|
agent.stoppingDistance = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
npcStateMachine.InstantiateObject(DataManager.Inst.vomit, npcStateMachine.transform.position);
|
||||||
|
OnEnterAction?.Invoke();
|
||||||
|
npcStateMachine.RestorePreviousState();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnUpdate(NpcStateMachine npcStateMachine)
|
public void OnUpdate(NpcStateMachine npcStateMachine)
|
||||||
{
|
{
|
||||||
|
// 화장실로 이동 중이라면
|
||||||
|
if (isMovingToToilet)
|
||||||
|
{
|
||||||
|
// 도착 여부 확인
|
||||||
|
if (agent.remainingDistance <= agent.stoppingDistance && !agent.pathPending)
|
||||||
|
{
|
||||||
|
// 도착했다면 화장실 사용
|
||||||
|
targetToilet.UseToilet();
|
||||||
|
OnEnterAction?.Invoke();
|
||||||
|
npcStateMachine.RestorePreviousState();
|
||||||
|
|
||||||
|
// 이동 상태 업데이트
|
||||||
|
isMovingToToilet = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnExit(NpcStateMachine npcStateMachine)
|
public void OnExit(NpcStateMachine npcStateMachine)
|
||||||
|
8
BlueWater/Assets/02.Scripts/Props.meta
Normal file
8
BlueWater/Assets/02.Scripts/Props.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 88c006e5da3dd43df840619fb049c72f
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
53
BlueWater/Assets/02.Scripts/Props/Toilet.cs
Normal file
53
BlueWater/Assets/02.Scripts/Props/Toilet.cs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace BlueWaterProject
|
||||||
|
{
|
||||||
|
public class Toilet : MonoBehaviour
|
||||||
|
{
|
||||||
|
[field: SerializeField] public bool IsUsed { get; set; }
|
||||||
|
[SerializeField] private int toiletGauge = 0;
|
||||||
|
private int toiletMaxGauge = 100;
|
||||||
|
|
||||||
|
private InShipMapInfo inShipMapInfo;
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
inShipMapInfo = GameObject.Find("InShipMap").GetComponent<InShipMapInfo>();
|
||||||
|
inShipMapInfo.AddToilet(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Transform UseToilet()
|
||||||
|
{
|
||||||
|
if (IsUsed) return null;
|
||||||
|
if (toiletGauge >= toiletMaxGauge)
|
||||||
|
{
|
||||||
|
ToiletFull();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
IsUsed = true;
|
||||||
|
StartCoroutine(ToiletGaugeUp());
|
||||||
|
return transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ToiletFull()
|
||||||
|
{
|
||||||
|
// 화장실이 꽉 찼을 때 이벤트
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator ToiletGaugeUp()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
yield return new WaitForSeconds(1f);
|
||||||
|
toiletGauge += 5;
|
||||||
|
IsUsed = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
11
BlueWater/Assets/02.Scripts/Props/Toilet.cs.meta
Normal file
11
BlueWater/Assets/02.Scripts/Props/Toilet.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a9e567bc086814a5c823025f50d68481
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -10,8 +10,10 @@ GameObject:
|
|||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 4954690593422870212}
|
- component: {fileID: 4954690593422870212}
|
||||||
- component: {fileID: 4075789757365797969}
|
- component: {fileID: 4075789757365797969}
|
||||||
|
- component: {fileID: 2605975875765928815}
|
||||||
|
- component: {fileID: 9080384280691289475}
|
||||||
- component: {fileID: 5342100355408239326}
|
- component: {fileID: 5342100355408239326}
|
||||||
m_Layer: 0
|
m_Layer: 21
|
||||||
m_Name: Vomit
|
m_Name: Vomit
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
@ -85,6 +87,66 @@ SpriteRenderer:
|
|||||||
m_WasSpriteAssigned: 1
|
m_WasSpriteAssigned: 1
|
||||||
m_MaskInteraction: 0
|
m_MaskInteraction: 0
|
||||||
m_SpriteSortPoint: 0
|
m_SpriteSortPoint: 0
|
||||||
|
--- !u!136 &2605975875765928815
|
||||||
|
CapsuleCollider:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8216347814332420713}
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_IncludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_ExcludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_LayerOverridePriority: 0
|
||||||
|
m_IsTrigger: 1
|
||||||
|
m_ProvidesContacts: 0
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Radius: 0.7
|
||||||
|
m_Height: 1
|
||||||
|
m_Direction: 1
|
||||||
|
m_Center: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &9080384280691289475
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8216347814332420713}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 274b80ab5b659c646ba9338870d14625, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
overrideName: Clean Up
|
||||||
|
overrideUseMessage:
|
||||||
|
maxUseDistance: 5
|
||||||
|
events:
|
||||||
|
onSelect:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
onDeselect:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
onUse:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls:
|
||||||
|
- m_Target: {fileID: 8216347814332420713}
|
||||||
|
m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
|
||||||
|
m_MethodName: SetActive
|
||||||
|
m_Mode: 6
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
--- !u!114 &5342100355408239326
|
--- !u!114 &5342100355408239326
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using BlueWaterProject;
|
||||||
using SoulGames.Utilities;
|
using SoulGames.Utilities;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
@ -49,6 +50,8 @@ namespace SoulGames.EasyGridBuilderPro
|
|||||||
|
|
||||||
private bool hasCollider = false;
|
private bool hasCollider = false;
|
||||||
|
|
||||||
|
private static Transform inShipProp;
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
if (MultiGridManager.Instance.activeGridSystem == null) return;
|
if (MultiGridManager.Instance.activeGridSystem == null) return;
|
||||||
@ -77,6 +80,8 @@ namespace SoulGames.EasyGridBuilderPro
|
|||||||
}
|
}
|
||||||
HandleVisualCanvasGrid(activeGridSystem);
|
HandleVisualCanvasGrid(activeGridSystem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inShipProp = GameObject.Find("InShipMap/Props").transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
@ -256,6 +261,12 @@ namespace SoulGames.EasyGridBuilderPro
|
|||||||
buildableGridObject.HandleVisualCanvasGrid(system);
|
buildableGridObject.HandleVisualCanvasGrid(system);
|
||||||
|
|
||||||
buildableGridObject.Setup();
|
buildableGridObject.Setup();
|
||||||
|
|
||||||
|
placedObjectTransform.SetParent(inShipProp);
|
||||||
|
if (placedObjectTransform.name == "Toilet")
|
||||||
|
{
|
||||||
|
placedObjectTransform.gameObject.AddComponent<Toilet>();
|
||||||
|
}
|
||||||
return buildableGridObject;
|
return buildableGridObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user