|
@@ -2,58 +2,61 @@ using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
|
using UnityEngine;
|
|
using UnityEngine;
|
|
|
using TMPro;
|
|
using TMPro;
|
|
|
-using System;
|
|
|
|
|
|
|
|
|
|
public class Spirits_Cook : MonoBehaviour
|
|
public class Spirits_Cook : MonoBehaviour
|
|
|
{
|
|
{
|
|
|
- public TextMeshProUGUI text; //剩余串的数量文本
|
|
|
|
|
- private GameObject dia; //文本框
|
|
|
|
|
|
|
+ public TextMeshProUGUI text; //剩余串的数量文本
|
|
|
|
|
+ private GameObject dia; //文本框
|
|
|
|
|
|
|
|
- private Transform cook; //厨子
|
|
|
|
|
- private Animator ani; //厨子动画
|
|
|
|
|
- private Collider col; //厨子的碰撞体
|
|
|
|
|
- public int chuan; //厨子拥有多少串
|
|
|
|
|
- public bool isGood; //厨子是否是好厨子
|
|
|
|
|
- public GameObject[] colliders; //一些要开要关的collider
|
|
|
|
|
- public float walkSpeed; //走路速度
|
|
|
|
|
- public float runSpeed; //冲刺速度
|
|
|
|
|
|
|
+ private float offset;
|
|
|
|
|
|
|
|
- public float value; //加血程度百分比
|
|
|
|
|
- public GameObject effect; //加血效果
|
|
|
|
|
|
|
+ private Transform cook; //厨子
|
|
|
|
|
+ private Animator ani; //厨子动画
|
|
|
|
|
+ private Collider col; //厨子的碰撞体
|
|
|
|
|
+ public int chuan; //厨子拥有多少串
|
|
|
|
|
+ public bool isGood; //厨子是否是好厨子
|
|
|
|
|
+ public GameObject[] colliders; //一些要开要关的collider
|
|
|
|
|
|
|
|
- private Demonic dem; //厨子的demonic脚本
|
|
|
|
|
|
|
+ private float intervalTimePast;
|
|
|
|
|
+ public float intervalTimeSell; //卖串的间隔时间
|
|
|
|
|
+ private bool isInterval = false; //开始计算间隔时间
|
|
|
|
|
|
|
|
- private bool once = false; //死一次
|
|
|
|
|
- private bool die = false; //厨子命尽
|
|
|
|
|
- private bool toCatch = false; //没串了去抓人
|
|
|
|
|
- private bool isRunning = false; //开跑
|
|
|
|
|
|
|
+ public float minX; //厨子卖串的最小地址站
|
|
|
|
|
+ public float maxX; //厨子卖串的最大地址站
|
|
|
|
|
|
|
|
- private float activeTime; //厨子已出现的时长
|
|
|
|
|
- public float activeAniTime; //厨子出现动画的时长
|
|
|
|
|
- private bool isAct = false; //厨子已经完整出现
|
|
|
|
|
|
|
+ public float value; //加血程度百分比
|
|
|
|
|
+ public GameObject effect; //加血效果
|
|
|
|
|
|
|
|
- private GameObject[] customers; //厨子的所有顾客
|
|
|
|
|
- private int count; //顾客数量
|
|
|
|
|
|
|
+ private Demonic dem; //厨子的enemy脚本
|
|
|
|
|
|
|
|
- public float larger; //顾客变大的程度
|
|
|
|
|
|
|
+ private float activeTime; //厨子已出现的时长
|
|
|
|
|
+ public float activeAniTime; //厨子出现动画的时长
|
|
|
|
|
+ private bool isAct = false; //厨子已经完整出现
|
|
|
|
|
|
|
|
- public bool canMove = false; //厨师可移动
|
|
|
|
|
|
|
+ public float larger; //顾客变大的程度
|
|
|
|
|
+ public List<Character> customers; //所有顾客
|
|
|
|
|
|
|
|
- private GameObject player1;
|
|
|
|
|
- private GameObject player2;
|
|
|
|
|
- private GameObject target;
|
|
|
|
|
|
|
+ public Character target;
|
|
|
|
|
+ public SearchTrigger searchtrigger;
|
|
|
|
|
|
|
|
public GameObject lockEffect;
|
|
public GameObject lockEffect;
|
|
|
private GameObject curLock;
|
|
private GameObject curLock;
|
|
|
|
|
+ //public GameObject cookKillEffect;
|
|
|
|
|
+
|
|
|
|
|
+ private float pastTime;
|
|
|
|
|
+ public float cookTime;
|
|
|
|
|
+ public float seizeTime;
|
|
|
|
|
+ public float chargeTime;
|
|
|
|
|
+
|
|
|
|
|
+ private float destX;
|
|
|
|
|
|
|
|
public enum cookState
|
|
public enum cookState
|
|
|
{
|
|
{
|
|
|
sell = 0,
|
|
sell = 0,
|
|
|
- walk = 1,
|
|
|
|
|
- find = 2,
|
|
|
|
|
- run = 3,
|
|
|
|
|
|
|
+ run = 1,
|
|
|
|
|
+ seize = 2, //抓住
|
|
|
|
|
+ back = 3,
|
|
|
cook = 4,
|
|
cook = 4,
|
|
|
- back = 5,
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private cookState state;
|
|
private cookState state;
|
|
@@ -68,45 +71,90 @@ public class Spirits_Cook : MonoBehaviour
|
|
|
col.enabled = false;
|
|
col.enabled = false;
|
|
|
dia = text.transform.parent.gameObject;
|
|
dia = text.transform.parent.gameObject;
|
|
|
dia.SetActive(false);
|
|
dia.SetActive(false);
|
|
|
- customers = new GameObject[chuan];
|
|
|
|
|
- state = 0;
|
|
|
|
|
- curLock = Instantiate(lockEffect, cook.transform.position, new Quaternion(0, 0, 0, 0), cook.transform);
|
|
|
|
|
|
|
+ //customers = new List<GameObject>();
|
|
|
|
|
+ text.text = chuan.ToString();
|
|
|
|
|
+ dem.isNonAttack = true;
|
|
|
|
|
+ //curLock = Instantiate(lockEffect, cook.transform.position, new Quaternion(0, 0, 0, 0), cook.transform);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private float DestinationX()
|
|
|
|
|
+ {
|
|
|
|
|
+ float x = Random.Range(minX, maxX);
|
|
|
|
|
+ return x;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private void OnTriggerEnter(Collider other)
|
|
|
|
|
|
|
+ public void ReleaseFood()
|
|
|
{
|
|
{
|
|
|
- //路过发串
|
|
|
|
|
- if (state == cookState.sell && !die && other.gameObject.layer == 7 || other.gameObject.layer == 8 || other.gameObject.layer == 6)
|
|
|
|
|
|
|
+ if (food.layer == 8)
|
|
|
{
|
|
{
|
|
|
- if (chuan > 0)
|
|
|
|
|
|
|
+ Enemy ene = food.GetComponent<Enemy>();
|
|
|
|
|
+ ene.isCaughtByCook = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void ToRush()
|
|
|
|
|
+ {
|
|
|
|
|
+ ChangeState(cookState.run);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void TargetInteract()
|
|
|
|
|
+ {
|
|
|
|
|
+ target = searchtrigger.GetMinDisTarget(dem.targetTypes, dem.canHitFly);
|
|
|
|
|
+ if (target != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (state == cookState.sell && (target.gameObject.layer == 7 || target.gameObject.layer == 8 || target.gameObject.layer == 6))
|
|
|
{
|
|
{
|
|
|
- GameObject ga = other.transform.parent.parent.parent.gameObject;
|
|
|
|
|
- Character ca = ga.GetComponent<Character>();
|
|
|
|
|
- if (Array.IndexOf(customers, ga) == -1)
|
|
|
|
|
|
|
+ if (!isInterval && chuan > 0)
|
|
|
{
|
|
{
|
|
|
- chuan -= 1;
|
|
|
|
|
- text.text = chuan.ToString();
|
|
|
|
|
- ani.Play("attack_march", 0, 0);
|
|
|
|
|
- ca.HpUp(value, larger);
|
|
|
|
|
- customers[count] = ga;
|
|
|
|
|
- count += 1;
|
|
|
|
|
- Instantiate(effect, ga.transform.position, new Quaternion(0, 0, 0, 0), ga.transform);
|
|
|
|
|
- if (chuan == 0)
|
|
|
|
|
|
|
+ if (!customers.Exists(T => T == target))
|
|
|
{
|
|
{
|
|
|
- toCatch = true;
|
|
|
|
|
- dem.ChangeState(CharacterState.Die);
|
|
|
|
|
|
|
+ isInterval = true;
|
|
|
|
|
+ chuan -= 1;
|
|
|
|
|
+ text.text = chuan.ToString();
|
|
|
|
|
+ ani.Play("attack_march", 0, 0);
|
|
|
|
|
+ target.HpUp(value, larger);
|
|
|
|
|
+ customers.Add(target);
|
|
|
|
|
+ //count += 1;
|
|
|
|
|
+ //Instantiate(effect, ga.transform.position, new Quaternion(0, 0, 0, 0), ga.transform);
|
|
|
|
|
+ if (chuan == 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ customers = new List<Character>();
|
|
|
|
|
+ ani.Play("charge", 0, 0);
|
|
|
|
|
+ Invoke("ToRush", chargeTime);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- //抓人
|
|
|
|
|
- else if (state == cookState.run || state == cookState.find || state == cookState.walk && !once)
|
|
|
|
|
- {
|
|
|
|
|
- if (other.gameObject.layer == 8)
|
|
|
|
|
|
|
+ //抓人
|
|
|
|
|
+ else if (state == cookState.run)
|
|
|
{
|
|
{
|
|
|
- food = other.gameObject;
|
|
|
|
|
- ChangeState(cookState.cook);
|
|
|
|
|
|
|
+ if (target.gameObject.layer == 8)
|
|
|
|
|
+ {
|
|
|
|
|
+ food = target.gameObject;
|
|
|
|
|
+ if (!target.isDie)
|
|
|
|
|
+ {
|
|
|
|
|
+ Enemy fEne = food.GetComponent<Enemy>();
|
|
|
|
|
+ fEne.isCaughtByCook = true;
|
|
|
|
|
+ fEne.ChangeState(CharacterState.Coma);
|
|
|
|
|
+ //food.GetComponent<Demonic>().ChangeState(CharacterState.Die);
|
|
|
|
|
+ //cookKillEffect.SetActive(true);
|
|
|
|
|
+ ChangeState(cookState.seize);
|
|
|
|
|
+ }
|
|
|
|
|
+ chuan = food.GetComponent<Character>().cookNum;
|
|
|
|
|
+ offset = cook.transform.position.x - food.transform.position.x;
|
|
|
|
|
+ text.text = chuan.ToString();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
+ //回家卖串
|
|
|
|
|
+ /*
|
|
|
|
|
+ else if (state == cookState.back && target.gameObject.layer == 8)
|
|
|
|
|
+ {
|
|
|
|
|
+ ChangeState(cookState.cook);
|
|
|
|
|
+ if (food.layer == 8 && !target.isDie)
|
|
|
|
|
+ {
|
|
|
|
|
+ food.GetComponent<Demonic>().ChangeState(CharacterState.Die);
|
|
|
|
|
+ }
|
|
|
|
|
+ }*/
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -116,39 +164,38 @@ public class Spirits_Cook : MonoBehaviour
|
|
|
{
|
|
{
|
|
|
//卖串中
|
|
//卖串中
|
|
|
case cookState.sell:
|
|
case cookState.sell:
|
|
|
- canMove = false;
|
|
|
|
|
|
|
+ dia.SetActive(true);
|
|
|
|
|
+ dem.isBack = false;
|
|
|
|
|
+ dem.canMove = false;
|
|
|
//不能被攻击
|
|
//不能被攻击
|
|
|
foreach (GameObject g in colliders)
|
|
foreach (GameObject g in colliders)
|
|
|
{
|
|
{
|
|
|
g.SetActive(false);
|
|
g.SetActive(false);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
- //走路中
|
|
|
|
|
- case cookState.walk:
|
|
|
|
|
- canMove = true;
|
|
|
|
|
- dia.SetActive(false);
|
|
|
|
|
- //能被攻击
|
|
|
|
|
- foreach (GameObject g in colliders)
|
|
|
|
|
- {
|
|
|
|
|
- g.SetActive(true);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- //发现目标
|
|
|
|
|
- case cookState.find:
|
|
|
|
|
- break;
|
|
|
|
|
//冲刺中
|
|
//冲刺中
|
|
|
case cookState.run:
|
|
case cookState.run:
|
|
|
- canMove = true;
|
|
|
|
|
|
|
+ dia.SetActive(false);
|
|
|
foreach (GameObject g in colliders)
|
|
foreach (GameObject g in colliders)
|
|
|
{
|
|
{
|
|
|
g.SetActive(true);
|
|
g.SetActive(true);
|
|
|
}
|
|
}
|
|
|
|
|
+ dem.canMove = true;
|
|
|
|
|
+ dem.ChangeState(CharacterState.Rush);
|
|
|
|
|
+ break;
|
|
|
|
|
+ //抓住你啦
|
|
|
|
|
+ case cookState.seize:
|
|
|
|
|
+ dem.canMove = false;
|
|
|
break;
|
|
break;
|
|
|
//鲨人中
|
|
//鲨人中
|
|
|
case cookState.cook:
|
|
case cookState.cook:
|
|
|
|
|
+ dem.canMove = false;
|
|
|
|
|
+ ani.Play("attack_march", 0, 0);
|
|
|
break;
|
|
break;
|
|
|
//返回中
|
|
//返回中
|
|
|
case cookState.back:
|
|
case cookState.back:
|
|
|
|
|
+ dem.canMove = true;
|
|
|
|
|
+ dem.isBack = true;
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
break;
|
|
break;
|
|
@@ -156,22 +203,43 @@ public class Spirits_Cook : MonoBehaviour
|
|
|
state = cs;
|
|
state = cs;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private void AimAt()
|
|
|
|
|
- {
|
|
|
|
|
- lockEffect.transform.position = transform.position;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
private void StateAct(cookState cs)
|
|
private void StateAct(cookState cs)
|
|
|
{
|
|
{
|
|
|
switch (cs)
|
|
switch (cs)
|
|
|
{
|
|
{
|
|
|
|
|
+ case cookState.back:
|
|
|
|
|
+ if (cook.transform.position.x <= destX)
|
|
|
|
|
+ {
|
|
|
|
|
+ ChangeState(cookState.cook);
|
|
|
|
|
+ if (food.layer == 8 && !target.isDie)
|
|
|
|
|
+ {
|
|
|
|
|
+ food.GetComponent<Enemy>().ChangeState(CharacterState.Die);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ food.transform.position = new Vector3(cook.transform.position.x - offset, food.transform.position.y,
|
|
|
|
|
+ food.transform.position.z);
|
|
|
|
|
+ break;
|
|
|
case cookState.cook:
|
|
case cookState.cook:
|
|
|
-
|
|
|
|
|
|
|
+ pastTime += Time.deltaTime;
|
|
|
|
|
+ if (pastTime >= cookTime)
|
|
|
|
|
+ {
|
|
|
|
|
+ pastTime = 0;
|
|
|
|
|
+ ChangeState(cookState.sell);
|
|
|
|
|
+ }
|
|
|
break;
|
|
break;
|
|
|
case cookState.run:
|
|
case cookState.run:
|
|
|
|
|
+ //ene.targetCharacter = target.GetComponent<Character>();
|
|
|
break;
|
|
break;
|
|
|
case cookState.sell:
|
|
case cookState.sell:
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case cookState.seize:
|
|
|
|
|
+ pastTime += Time.deltaTime;
|
|
|
|
|
+ if (pastTime >= seizeTime)
|
|
|
|
|
+ {
|
|
|
|
|
+ pastTime = 0;
|
|
|
|
|
+ ChangeState(cookState.back);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
default:
|
|
default:
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
@@ -187,13 +255,29 @@ public class Spirits_Cook : MonoBehaviour
|
|
|
dia.SetActive(true);
|
|
dia.SetActive(true);
|
|
|
isAct = true;
|
|
isAct = true;
|
|
|
col.enabled = true;
|
|
col.enabled = true;
|
|
|
|
|
+ ChangeState(cookState.sell);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if (die && !once)
|
|
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ StateAct(state);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (isInterval)
|
|
|
|
|
+ {
|
|
|
|
|
+ intervalTimePast += Time.deltaTime;
|
|
|
|
|
+ if (intervalTimePast >= intervalTimeSell)
|
|
|
|
|
+ {
|
|
|
|
|
+ intervalTimePast = 0;
|
|
|
|
|
+ isInterval = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void FixedUpdate()
|
|
|
|
|
+ {
|
|
|
|
|
+ if (isAct)
|
|
|
{
|
|
{
|
|
|
- once = true;
|
|
|
|
|
- col.enabled = false;
|
|
|
|
|
- dem.ChangeState(CharacterState.Die);
|
|
|
|
|
|
|
+ TargetInteract();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|