示例#1
0
 public void SetTask(CollectType collectType, EnvironmentCreate environmentCreate, Transform commender)
 {
     this.collectType       = collectType;
     this.environmentCreate = environmentCreate;
     this.commender         = commender;
     FSM.SetState(new NPCFindCollect(FSM));
 }
示例#2
0
    private IEnumerator Dispatch()
    {
        yield return(new WaitForSeconds(3f));

        float minDistance = float.MaxValue;

        // 寻找离房子最近的资源区域
        foreach (var x in EnvironmentCreate.environmentCreates)
        {
            if (minDistance > Vector3.Distance(transform.position, x.transform.position))
            {
                minDistance       = Vector3.Distance(transform.position, x.transform.position);
                environmentCreate = x;
            }
        }
        while (true)
        {
            if (NPCQueue.Count > 0)
            {
                // 如果需要取出NPC就将NPC打入玩家的账户
                if (NPCDebt > 0)
                {
                    NPC npc = NPCQueue.Dequeue();
                    playerInteraction.NPCQueue.Enqueue(npc);
                    NPCDebt--;
                    NPCNumber--;
                    houseData._NPC = NPCNumber;
                }
                // 否则就指挥NPC进行采集
                else if (isCollect && isCollectHouse)
                {
                    bool isTemp = true;         // 检查是否还有资源可以采集
                    switch (collectType)
                    {
                    case CollectType.石头:
                        isTemp = environmentCreate.stoneListPosition.Count > 0 ? true : false;
                        break;

                    case CollectType.木头:
                        isTemp = environmentCreate.woodListPosition.Count > 0 ? true : false;
                        break;

                    case CollectType.食物:
                        isTemp = environmentCreate.foodListPosition.Count > 0 ? true : false;
                        break;

                    case CollectType.回复药:
                        isTemp = environmentCreate.medicineListPosition.Count > 0 ? true : false;
                        break;

                    default:
                        break;
                    }
                    if (isTemp)
                    {
                        NPC npc = NPCQueue.Dequeue();
                        npc.transform.position = birthPoint.position;
                        npc.gameObject.SetActive(true);
                        npc.SetTask(collectType, environmentCreate, transform);
                    }
                }

                yield return(new WaitForSeconds(3f));
            }
            yield return(new WaitForSeconds(0.1f));
        }
    }
示例#3
0
 void Awake()
 {
     _ins = this;
 }