Example #1
0
 public Event(int _id, float _duration, float _area, Enums.HerdState _type)
 {
     id       = _id;
     duration = _duration;
     area     = _area;
     type     = _type;
 }
Example #2
0
    public void Reset()
    {
        string dir = "DataAnalysis\\" + GM.sheepBehaviour + "\\Event\\";

        if (!Directory.Exists(dir))
        {
            Directory.CreateDirectory(dir);
        }

        // name
        fileName = dir + GM.iterationCount + "_" + GM.nOfSheep + ".csv";

        using (StreamWriter sw = File.CreateText(fileName))
        {
            sw.WriteLine("id,duration,area,event");
        }

        // init first state and event
        state           = Enums.HerdState.Packing;
        dispersingEvent = new Event(0, -float.MaxValue, .0f, Enums.HerdState.Dispersing);
        packingEvent    = new Event(0, Time.time, .0f, Enums.HerdState.Packing);
    }
Example #3
0
    void Update()
    {
        // get state
        state = CalculateState();

        // track dispersing event
        if (state == Enums.HerdState.Dispersing)
        {
            if (dispersingEvent.area != .0f)
            {
                // area and timestamp when packing ended
                packingEvent.area = ConvexHull.GetArea(GM.sheepList);
                float requiredChange = dispersingEvent.area * areaThreshold;
                float areaChange     = dispersingEvent.area - packingEvent.area;

                // check if packing was strong enough
                float dispersingDuration = packingEvent.duration - dispersingEvent.duration;
                // valid packing event
                if (areaChange > requiredChange && dispersingDuration > dispersingTimeThreshold)
                {
                    // set timers
                    dispersingEvent.duration = dispersingDuration;
                    packingEvent.duration    = Time.time - packingEvent.duration;

                    // save previous dispersing and current packing
                    if (dispersingEvent.id != 0 && dispersingEvent.id <= 50)
                    {
                        using (StreamWriter sw = File.AppendText(fileName))
                        {
                            dispersingEvent.duration *= GM.speedup;
                            packingEvent.duration    *= GM.speedup;

                            sw.WriteLine(dispersingEvent.ToString());
                            sw.WriteLine(packingEvent.ToString());
                        }
                    }
                    if (dispersingEvent.id >= eventsLimit)
                    {
                        GM.Reset();

                        if (GM.iterationCount > GM.iterations)
                        {
#if UNITY_EDITOR
                            UnityEditor.EditorApplication.isPlaying = false;
#else
                            Application.Quit();
#endif
                        }
                        else
                        {
                            Reset();
                        }
                    }
                    else
                    {
                        dispersingEvent = new Event(packingEvent.id + 1, Time.time, .0f, Enums.HerdState.Dispersing);
                        packingEvent    = new Event(dispersingEvent.id + 1, .0f, .0f, Enums.HerdState.Packing);
                    }
                }
                // false event
                else
                {
                    dispersingEvent.area = .0f;
                }
            }
        }
        // track packing event
        else
        {
            // area and timestamp when packing triggered
            if (dispersingEvent.area == .0f)
            {
                packingEvent.duration = Time.time;
                dispersingEvent.area  = ConvexHull.GetArea(GM.sheepList);
            }
        }
    }