127 lines
3.7 KiB
C#
127 lines
3.7 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
|
|
using Assets.HeroEditor4D.Common.Scripts.Enums;
|
|
using UnityEngine;
|
|
|
|
public class LostNpc : MonoBehaviour
|
|
{
|
|
//check if the quest is active on local player
|
|
public Character4D character;
|
|
[SerializeField] private bool _isQuestActive;
|
|
public QuestScriptable[] questData;
|
|
private playerNetwork player;
|
|
|
|
[SerializeField] private float followSpeed = 2f;
|
|
[SerializeField] private float stopDistance = 1f;
|
|
[SerializeField] private float maxDistance = 15f;
|
|
|
|
public bool _isFollowing;
|
|
void Update()
|
|
{
|
|
if (_isQuestActive)
|
|
{
|
|
FollowPlayer();
|
|
|
|
}
|
|
|
|
|
|
// if (player != null)
|
|
// {
|
|
// isPlayerInRange = Vector3.Distance(transform.position, player.transform.position) < followRadius;
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// isPlayerInRange = false;
|
|
|
|
// }
|
|
|
|
// if (player != null)
|
|
// {
|
|
// FollowPlayer();
|
|
// }
|
|
}
|
|
// check if the activequest is for finding the lost npc
|
|
// if the player is close to the npc - the npc will start following the player
|
|
// once the player go back to quest npc - the quest will be completed and npc will stop follow / destroy after few minutes
|
|
|
|
private void OnTriggerEnter2D(Collider2D other)
|
|
{
|
|
|
|
if (other.CompareTag("Player"))
|
|
{
|
|
if (other.transform == playerNetwork.localPlayerTransform)
|
|
{
|
|
player = playerNetwork.localPlayerTransform.GetComponent<playerNetwork>();
|
|
|
|
//check if the quest match for finding lost npc
|
|
if (player.currentQuest == questData[0])
|
|
{
|
|
_isQuestActive = true;
|
|
_isFollowing = true;
|
|
npcFinalCollider.isTrigger = true;
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
float endTimer = 5f;
|
|
public void FollowPlayer()
|
|
{
|
|
|
|
float distance = Vector2.Distance(transform.position, player.transform.position);
|
|
|
|
|
|
if (distance <= stopDistance || distance >= maxDistance)
|
|
{
|
|
character.AnimationManager.SetState(CharacterState.Idle);
|
|
_isFollowing = false; // Stop following
|
|
return;
|
|
}
|
|
|
|
if(player.currentQuest==null){
|
|
if(endTimer > 0 ){
|
|
endTimer -= Time.deltaTime;
|
|
}else{
|
|
Destroy(gameObject);
|
|
}
|
|
character.AnimationManager.SetState(CharacterState.Idle);
|
|
_isFollowing = false;
|
|
return;
|
|
|
|
}
|
|
|
|
// Move
|
|
Vector2 direction = (player.transform.position - transform.position).normalized;
|
|
transform.position = Vector2.MoveTowards(transform.position, player.transform.position, followSpeed * Time.deltaTime);
|
|
|
|
//
|
|
if (direction.x > 0) character.SetDirection(Vector2.right);
|
|
else if (direction.x < 0) character.SetDirection(Vector2.left);
|
|
else if (direction.y > 0) character.SetDirection(Vector2.up);
|
|
else if (direction.y < 0) character.SetDirection(Vector2.down);
|
|
|
|
//
|
|
character.AnimationManager.SetState(CharacterState.Walk);
|
|
}
|
|
|
|
public void StopFollowing()
|
|
{
|
|
_isFollowing = false;
|
|
character.AnimationManager.SetState(CharacterState.Idle);
|
|
}
|
|
public BoxCollider2D npcFinalCollider;
|
|
public void SetFinalQuestAction()
|
|
{
|
|
//enable npc is trigger
|
|
npcFinalCollider.isTrigger = true;
|
|
//StopFollowing();
|
|
//destroy npc after few minutes
|
|
|
|
}
|
|
}
|