Wizard - first action - fix
Dialogue add base trigger
This commit is contained in:
parent
9d97accd5b
commit
e26bbce901
@ -28654,7 +28654,6 @@ Transform:
|
||||
- {fileID: 1539180721}
|
||||
- {fileID: 2042768023}
|
||||
- {fileID: 543241739}
|
||||
- {fileID: 1839194624}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
@ -34004,8 +34003,6 @@ GameObject:
|
||||
- component: {fileID: 1701466740}
|
||||
- component: {fileID: 1701466739}
|
||||
- component: {fileID: 1701466738}
|
||||
- component: {fileID: 1701466744}
|
||||
- component: {fileID: 1701466743}
|
||||
m_Layer: 0
|
||||
m_Name: UiManager
|
||||
m_TagString: Untagged
|
||||
@ -34104,37 +34101,6 @@ MonoBehaviour:
|
||||
DynamicPanel: {fileID: 0}
|
||||
keyToOpen: 113
|
||||
Elements: []
|
||||
--- !u!114 &1701466743
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1701466736}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 703bf6cf8b4d9d949a3bf7543e072e30, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
DynamicPanel: {fileID: 0}
|
||||
keyToOpen: 0
|
||||
Elements: []
|
||||
--- !u!114 &1701466744
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1701466736}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4d0be1073753419b9be341d0f373ba56, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
DynamicPanel: {fileID: 0}
|
||||
keyToOpen: 101
|
||||
Elements: []
|
||||
CurrentShopOwnerName:
|
||||
--- !u!1 &1702764354
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -36887,51 +36853,6 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1823960543}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &1839194623
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1839194624}
|
||||
- component: {fileID: 1839194625}
|
||||
m_Layer: 0
|
||||
m_Name: ShopManager
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1839194624
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1839194623}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1144548810}
|
||||
m_RootOrder: 4
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1839194625
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1839194623}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 40e9faa037584ea2bfba8168125f3fde, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
UiManager: {fileID: 0}
|
||||
--- !u!1 &1841894126
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -11,6 +11,7 @@ public enum BossThugEnum
|
||||
Attacking=2
|
||||
}
|
||||
|
||||
[RequireComponent(typeof(NpcDialogueManager))]
|
||||
public class BossThug : MonoBehaviour
|
||||
{
|
||||
|
||||
@ -27,6 +28,11 @@ public class BossThug : MonoBehaviour
|
||||
public BossThugEnum state = BossThugEnum.Pending;
|
||||
|
||||
// Start is called before the first frame update
|
||||
public void Awake()
|
||||
{
|
||||
gameObject.GetComponent<NpcDialogueManager>().OpenInDefaultWay = false;
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
rb = GetComponent<Rigidbody2D>();
|
||||
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
[RequireComponent(typeof(NPC))]
|
||||
[RequireComponent(typeof(NpcDialogueManager))]
|
||||
public class NPCFollowing : MonoBehaviour
|
||||
{
|
||||
private Rigidbody2D myRigidbody;
|
||||
@ -28,13 +29,16 @@ public class NPCFollowing : MonoBehaviour
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
isAfterAction = System.Convert.ToBoolean(PlayerPrefs.GetInt(gameObject.GetComponent<NPC>().name + ".FirstDialogue"));
|
||||
gameObject.GetComponent<NPC>().State = NPCStateEnum.Walking;
|
||||
//isAfterAction = System.Convert.ToBoolean(PlayerPrefs.GetInt(gameObject.GetComponent<NPC>().name + ".FirstDialogue"));
|
||||
|
||||
myRigidbody = GetComponent<Rigidbody2D>();
|
||||
anim = GetComponent<Animator>();
|
||||
homePosition = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z);
|
||||
targetPosition = GameObject.FindWithTag("Player").transform;
|
||||
|
||||
if(!isAfterAction)
|
||||
StartCoroutine(WaitBeforStartingAction(5f));
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
@ -43,6 +47,26 @@ public class NPCFollowing : MonoBehaviour
|
||||
HandleState();
|
||||
}
|
||||
|
||||
private IEnumerator WaitBeforStartingAction(float waitTime)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
yield return new WaitForSeconds(waitTime);
|
||||
|
||||
// Start story
|
||||
approaching = true;
|
||||
gameObject.GetComponent<NPC>().State = NPCStateEnum.Walking;
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator Wait(float waitTime)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
yield return new WaitForSeconds(waitTime);
|
||||
}
|
||||
}
|
||||
|
||||
public void CheckDistance()
|
||||
{
|
||||
StopAllCoroutines();
|
||||
@ -60,6 +84,8 @@ public class NPCFollowing : MonoBehaviour
|
||||
//start dialogue here we want uga bunga
|
||||
|
||||
gameObject.GetComponent<NPC>().State = NPCStateEnum.Talking;
|
||||
|
||||
gameObject.GetComponent<NpcDialogueManager>().CheckIfCanBeOpen();
|
||||
}
|
||||
}
|
||||
|
||||
@ -118,7 +144,7 @@ public class NPCFollowing : MonoBehaviour
|
||||
|
||||
public void DoAction()
|
||||
{
|
||||
if (approaching == true && isDuringConversation == false)
|
||||
if (approaching == true && isDuringConversation == false && gameObject.GetComponent<NpcDialogueManager>().CanBeOpened)
|
||||
{
|
||||
isDuringConversation = true;
|
||||
gameObject.GetComponent<NpcDialogueManager>().Dialogue.StartDialogue();
|
||||
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a5eefc0ad5292c14cab52a7aadb53da6
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
class DialogueOpenCondition : MonoBehaviour
|
||||
{
|
||||
private void OnTriggerStay2D(Collider2D collision)
|
||||
{
|
||||
if (collision.tag == "Player")
|
||||
{
|
||||
ChestUIManager.Instance.CurrentChestName = gameObject.transform.parent.name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void OnTriggerExit2D(Collider2D collision)
|
||||
{
|
||||
if (collision.tag == "Player")
|
||||
{
|
||||
ChestUIManager.Instance.CurrentChestName = null;
|
||||
|
||||
ChestUIManager.Instance.ClosePanel();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7b117542970ee144083e11c3bdc7cb78
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -11,7 +11,7 @@ public class MultiDialogue : ScriptableObject, IDialogue
|
||||
public string SpeakerName;
|
||||
|
||||
[SerializeField]
|
||||
int CurrentDialogue = 0;
|
||||
public int CurrentDialogue = 0;
|
||||
|
||||
[SerializeField]
|
||||
public List<IndexValuePair<int, Dialogue>> Dialogues;
|
||||
|
@ -21,6 +21,20 @@ public class NpcDialogueManager : MonoBehaviour
|
||||
// List<Key<dialogue No, dialogue step No>, Value : UnityEvent>
|
||||
public List<IndexValuePair<IndexValuePair<int, int>, UnityEvent>> EndactionEventList;
|
||||
|
||||
[SerializeField] public KeyCode keyToOpen = KeyCode.E;
|
||||
|
||||
public bool CanBeOpened = false;
|
||||
|
||||
/// <summary>
|
||||
/// This flag tell that manager will open dialogue automatically after
|
||||
/// - beeing in collision range
|
||||
/// - when dialogue is closed
|
||||
/// - when Player press KeyToOpen button
|
||||
///
|
||||
/// Change var status in other sctipt if you want to use other triggers to open dialogue
|
||||
/// </summary>
|
||||
public bool OpenInDefaultWay = true;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
Dialogue = Instantiate(languageDetector.DetectInstanceBasedOnLanguage());
|
||||
@ -29,7 +43,65 @@ public class NpcDialogueManager : MonoBehaviour
|
||||
Dialogue.Dialogues.ForEach(dial => dial.Value.SetActionAfterDialogueStep(dial.Key, dial.Value.ResetDialogue)); // reset dial
|
||||
}
|
||||
|
||||
public void Update() { }
|
||||
public void Update()
|
||||
{
|
||||
if(OpenInDefaultWay && CanBeOpened && !GetCurrentDialoguePanelStatus() && Input.GetKeyDown(keyToOpen))
|
||||
gameObject.GetComponent<NpcDialogueManager>().Dialogue.StartDialogue();
|
||||
}
|
||||
|
||||
public void OnTriggerEnter2D(Collider2D collision)
|
||||
{
|
||||
// don't listen when component is disabled
|
||||
if (!gameObject.GetComponent<NpcDialogueManager>().enabled)
|
||||
return;
|
||||
|
||||
if (collision.gameObject.tag == "Player")
|
||||
CheckIfCanBeOpen();
|
||||
}
|
||||
|
||||
|
||||
public void OnTriggerExit2D(Collider2D collision)
|
||||
{
|
||||
// don't listen when component is disabled
|
||||
if (!gameObject.GetComponent<NpcDialogueManager>().enabled)
|
||||
return;
|
||||
|
||||
if (collision.gameObject.tag == "Player")
|
||||
{
|
||||
CanBeOpened = false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Opened = 1
|
||||
/// Closed = 0
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool GetCurrentDialoguePanelStatus()
|
||||
{
|
||||
var multiDialStatius = Dialogue.DialogueStepStatus();
|
||||
|
||||
return Dialogue
|
||||
.Dialogues
|
||||
.Where(dialogue => dialogue.Key == multiDialStatius.Item1)
|
||||
.First()
|
||||
.Value
|
||||
.DialogueSteps[multiDialStatius.Item2].DialogueController.CurrentPanel != null;
|
||||
}
|
||||
|
||||
public void CheckIfCanBeOpen()
|
||||
{
|
||||
/*
|
||||
* Conditions:
|
||||
* - agent in collision must be player
|
||||
* - npc bust me in Talking mode
|
||||
* - panel assigned to next sentence in dialogue must be closed
|
||||
*/
|
||||
if(gameObject.GetComponent<NPC>().State == NPCStateEnum.Talking && !GetCurrentDialoguePanelStatus())
|
||||
{
|
||||
CanBeOpened = true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Function to invoke actions declared in manager on object from scene not onto asset
|
||||
|
@ -6,6 +6,7 @@ using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
[RequireComponent(typeof(NPC))]
|
||||
[RequireComponent(typeof(NpcDialogueManager))]
|
||||
public class NpcShopManager : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
@ -19,6 +20,11 @@ public class NpcShopManager : MonoBehaviour
|
||||
|
||||
bool CanShopBeOpened = false;
|
||||
|
||||
public void Awake()
|
||||
{
|
||||
gameObject.GetComponent<NpcDialogueManager>().OpenInDefaultWay = false;
|
||||
}
|
||||
|
||||
public virtual void Start()
|
||||
{
|
||||
// 1. Set npc state to trading
|
||||
@ -51,10 +57,12 @@ public class NpcShopManager : MonoBehaviour
|
||||
* - dialogue panel must be closed
|
||||
* - shop panel must be closed
|
||||
*/
|
||||
if (CanShopBeOpened && Input.GetKeyDown(ShopUIManager.Instance.keyToOpen) && Dialogue.DialogueSteps.First().DialogueController?.CurrentPanel == null && !ShopUIManager.Instance.GetPanelStatus())
|
||||
if (gameObject.GetComponent<NpcDialogueManager>().CanBeOpened && Input.GetKeyDown(ShopUIManager.Instance.keyToOpen) && !ShopUIManager.Instance.GetPanelStatus())
|
||||
{
|
||||
// Open dialogue panel (Shop will be opened later)
|
||||
Dialogue.StartDialogue();
|
||||
|
||||
// TODO pass dialogue to npocDialManager and invoke from there
|
||||
}
|
||||
|
||||
}
|
||||
@ -73,7 +81,7 @@ public class NpcShopManager : MonoBehaviour
|
||||
*/
|
||||
if (collision.gameObject.tag == "Player" && gameObject.GetComponent<NPC>().State == NPCStateEnum.Trading && !ShopUIManager.Instance.GetPanelStatus())
|
||||
{
|
||||
CanShopBeOpened = true;
|
||||
gameObject.GetComponent<NpcDialogueManager>().CanBeOpened = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,8 +93,6 @@ public class NpcShopManager : MonoBehaviour
|
||||
|
||||
if (collision.gameObject.tag == "Player")
|
||||
{
|
||||
CanShopBeOpened = false;
|
||||
|
||||
if (Dialogue.DialogueSteps.First().DialogueController?.CurrentPanel != null)
|
||||
Dialogue.BreakDialogueStep();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user