コード例 #1
0
    public Herd NewHerd(HerdMember member)
    {
        Herd newHerd = new Herd(member);

        herds.Add(newHerd);
        return(newHerd);
    }
コード例 #2
0
 public void RemoveMember(HerdMember member)
 {
     herdMembers.Remove(member);
     if (herdMembers.Count == 0)
     {
         HerdList.Instance.RemoveHerd(this);
     }
 }
コード例 #3
0
    private void OnTriggerStay(Collider other)
    {
        HerdMember member = other.gameObject.GetComponent <HerdMember>();

        if (member != null && member.GetState() == HerdMember.MemberState.Roam && !member.IsDisoriented())
        {
            herd.AddMember(member);
            member.SetState(HerdMember.MemberState.Rejoin);
        }
    }
コード例 #4
0
ファイル: Herd.cs プロジェクト: theloneplant/RhythmHerd
    private void Cheer(int numberOfCheers)
    {
        LinkedListNode <HerdMember> currentMember = members.First;

        for (int i = 0; i <= numberOfCheers; i++)
        {
            HerdMember member = currentMember?.Value;
            member?.Cheer();
            currentMember = currentMember?.Next;
        }
    }
コード例 #5
0
    public List <HerdMember> GetcloseSheeps()
    {
        List <HerdMember> members  = new List <HerdMember>();
        List <Voisin>     lVoisins = voisin.GetVoisinsInRange(maxDistance);

        for (int i = 0; i < lVoisins.Count; i++)
        {
            HerdMember hMember = lVoisins[i].gameObject.GetComponent <HerdMember>() as HerdMember;
            if (hMember)
            {
                members.Add(hMember);
            }
        }

        return(members);
    }
コード例 #6
0
    void OnTriggerStay2D(Collider2D collider)
    {
        HerdMember sheep = collider.GetComponent <HerdMember>();

        if (sheep != null && SheepEvacuated < MaxSheepEvac)
        {
            SheepEvacuated++;
            if (SheepEvacuated == MaxSheepEvac)
            {
                triggerBox.isTrigger = false;
            }

            EvacSheep(sheep, () =>
            {
                Game.Instance.carManager.ExitCar(gameObject);
            });
        }
    }
コード例 #7
0
    public Herd GetHerd()
    {
        Herd minHerd  = null;
        int  minCount = int.MaxValue;

        for (int i = 0; i < sheepsInRange.Count; i++)
        {
            HerdMember member = sheepsInRange[i].GetComponent <HerdMember>() as HerdMember;
            Herd       herd   = member.GetHerd();
            int        count  = herd.MemberCount();
            if (count < minCount)
            {
                minHerd  = herd;
                minCount = count;
            }
        }
        return(minHerd);
    }
コード例 #8
0
    public List <HerdMember> GetAllConnectedSheeps(HerdMember root)
    {
        List <HerdMember> detectedSheeps = new List <HerdMember>();

        detectedSheeps.Add(root);

        for (int i = 0; i < detectedSheeps.Count; i++)
        {
            List <HerdMember> closeSheeps = detectedSheeps[i].GetcloseSheeps();
            for (int j = 0; j < closeSheeps.Count; j++)
            {
                if (!detectedSheeps.Contains(closeSheeps[j]))
                {
                    detectedSheeps.Add(closeSheeps[j]);
                }
            }
        }
        return(detectedSheeps);
    }
コード例 #9
0
    public void EvacSheep(HerdMember sheep, Action OnComplete)
    {
        sheep.DisableUI();
        sheep.GetComponent <SheepComponent>().AIenabled = false;

        Game.Instance.sfx.PlaySaveMouton();
        Sequence sqc = DOTween.Sequence();

        MoveToCheckpoint(sheep.transform, (Vector2)plateformCheckpoint.transform.position, sqc);
        sqc.AppendCallback(() =>
        {
            Instantiate(sheepCaughtPrefab, popUpLocation.transform.position, Quaternion.identity);
        });
        MoveToCheckpoint(sheep.transform, (Vector2)camionCheckpoint.transform.position, sqc);
        sqc.OnComplete(() =>
        {
            sheep.Evac(null);
            OnComplete.Invoke();
        });
    }
コード例 #10
0
ファイル: Herd.cs プロジェクト: theloneplant/RhythmHerd
 private void Start()
 {
     members = new LinkedList <HerdMember>();
     for (int i = 0; i < memberCount; i++)
     {
         HerdMember member = Instantiate(memberPrefab, transform);
         members.AddLast(member);
         member.SetState(HerdMember.MemberState.Joined);
     }
     foreach (HerdMember member in members)
     {
         Vector2   offset    = Vector2.zero;
         const int MAX_TRIES = 20;
         for (int j = 0; j < MAX_TRIES && ClosestMember(offset) < minimumSeparation; j++)
         {
             offset = Random.insideUnitCircle * herdRadius;
         }
         member.Offset   = offset;
         member.Position = offset;
     }
 }
コード例 #11
0
    public void SpawnPref(int NbToSpawn)
    {
        Vector3 pos;

        for (int i = 0; i < NbToSpawn; i++)
        {
            GameObject newSheep = null;
            pos = new Vector3(Random.Range(m_xMin, m_xMax), Random.Range(m_yMin, m_yMax));
            if (Random.Range(0.0f, 1.0f) <= chanceOfSpawningBlackSheep)
            {
                newSheep = Instantiate(blackSheepPrefab, pos, Quaternion.identity, m_UnitContain);
            }
            else
            {
                newSheep = Instantiate(m_SheepPrefab, pos, Quaternion.identity, m_UnitContain);
            }
            HerdMember member = newSheep.GetComponent <HerdMember>();
            if (member)
            {
                member.DisableUI();
            }
        }
    }
コード例 #12
0
 public Herd(HerdMember firstMember)
 {
     herdMembers.Add(firstMember);
     firstMember.SetHerd(this);
 }
コード例 #13
0
ファイル: Herd.cs プロジェクト: theloneplant/RhythmHerd
 public void AddMember(HerdMember newMember)
 {
     newMember.SetState(HerdMember.MemberState.Roam);
     members.AddFirst(newMember);
 }