示例#1
0
 //Send to PHP script
 public void startSendingProcess()
 {
     tempName = sender.nameGetter();
     scoreKeeper = GameObject.Find("DistanceCounter").GetComponent<DistanceCounter>();
     tempScore = scoreKeeper.scoreGetter ();
     //Puts the name and score into 1 line
     string scorestring = (tempName + "," + tempScore.ToString());
     WWWForm score = new WWWForm();
     score.AddField("score", scorestring);
     //Where the databse is hosted
     WWW w = new WWW("http://19083.hosts.ma-cloud.nl/aim3d/phpscript.php", score);
     StartCoroutine(WaitForRequest(w));
 }
    void Awake()
    {
        startPoint = transform.position;

        if (instance == null)
        {
            instance = this;
        }
        else if (instance != this)
        {
            Destroy(gameObject);
        }
    }
示例#3
0
    //Send to PHP script
    public void startSendingProcess()
    {
        tempName    = sender.nameGetter();
        scoreKeeper = GameObject.Find("DistanceCounter").GetComponent <DistanceCounter>();
        tempScore   = scoreKeeper.scoreGetter();
        //Puts the name and score into 1 line
        string  scorestring = (tempName + "," + tempScore.ToString());
        WWWForm score       = new WWWForm();

        score.AddField("score", scorestring);
        //Where the databse is hosted
        WWW w = new WWW("http://19083.hosts.ma-cloud.nl/aim3d/phpscript.php", score);

        StartCoroutine(WaitForRequest(w));
    }
示例#4
0
    IEnumerator TutorialSequence()
    {
        titleScreen.SetBool("isOpen", false);
        yield return(new WaitForSeconds(2f));

        yield return(StartCoroutine(WaitForDialogue(tutorialDialogue[0])));

        currentLevel.StartGame();
        yield return(new WaitForSeconds(4f));

        yield return(StartCoroutine(WaitForDialogue(tutorialDialogue[1])));

        player.Toggle();
        DistanceCounter counter = player.gameObject.AddComponent <DistanceCounter>();

        while (counter.distanceTravelled < 10f)
        {
            yield return(null);
        }
        Destroy(counter);
        player.Toggle();
        yield return(StartCoroutine(WaitForDialogue(tutorialDialogue[2])));

        currentLevel.StartPing();
        yield return(new WaitForSeconds((60f / 105f) * 8f));

        yield return(StartCoroutine(WaitForDialogue(tutorialDialogue[3])));

        player.Toggle();
        firstItem = false;
        while (!firstItem)
        {
            yield return(null);
        }
        player.Toggle();
        yield return(StartCoroutine(WaitForDialogue(tutorialDialogue[4])));

        player.Toggle();
        firstItem = false;
        while (!firstItem)
        {
            yield return(null);
        }
        player.Toggle();
        yield return(StartCoroutine(WaitForDialogue(tutorialDialogue[5])));

        player.Toggle();
    }
    // Start is called before the first frame update
    void Start()
    {
        distanceCounter = this.gameObject.GetComponent <DistanceCounter>();
        rotation        = this.gameObject.GetComponent <RotationSimulator>();
        demoGraph       = this.gameObject.GetComponent <RRTDrawer>();
        map             = this.gameObject.GetComponent <MapBuilder>();
        drone           = this.gameObject.GetComponent <PowerfulEngine>();
        root            = new RRTNode(50, 75);
        theRRT          = new List <RRTNode>();
        theRRT.Add(root);
        demoGraph.addRootNode(root);

        minDisNode  = root;
        requestList = new LinkedList <(RRTNode, Vector3)>();
        b           = true;
    }
示例#6
0
    void Start()
    {
        distanceCounter = GameObject.Find("DistanceCounter").GetComponent <DistanceCounter>();

        //Get the prefab chunks from resource folder
        chunk1 = Resources.Load <GameObject>("Chunk1");
        chunk2 = Resources.Load <GameObject>("Chunk2");
        chunk3 = Resources.Load <GameObject>("Chunk3");
        chunk4 = Resources.Load <GameObject>("Chunk4");
        chunk5 = Resources.Load <GameObject>("Chunk5");
        chunk6 = Resources.Load <GameObject>("Chunk6");
        chunks = new List <GameObject>();

        //Put the chunks into a list
        chunks.Add(chunk1);
        chunks.Add(chunk2);
        chunks.Add(chunk3);
        chunks.Add(chunk4);
        chunks.Add(chunk5);
        chunks.Add(chunk6);

        tempFloat = transform.position.z;
    }
示例#7
0
    void Start()
    {
        distanceCounter = GameObject.Find("DistanceCounter").GetComponent<DistanceCounter>();

        //Get the prefab chunks from resource folder
        chunk1 = Resources.Load<GameObject>("Chunk1");
        chunk2 = Resources.Load<GameObject>("Chunk2");
        chunk3 = Resources.Load<GameObject>("Chunk3");
        chunk4 = Resources.Load<GameObject>("Chunk4");
        chunk5 = Resources.Load<GameObject>("Chunk5");
        chunk6 = Resources.Load<GameObject>("Chunk6");
        chunks = new List<GameObject>();

        //Put the chunks into a list
        chunks.Add(chunk1);
        chunks.Add(chunk2);
        chunks.Add(chunk3);
        chunks.Add(chunk4);
        chunks.Add(chunk5);
        chunks.Add(chunk6);

        tempFloat = transform.position.z;
    }
示例#8
0
 // Use this for initialization
 void Start()
 {
     distanceCounter = GameObject.Find("DistanceCounter").GetComponent <DistanceCounter>();
     distanceText    = GameObject.Find("DistanceFloatText").GetComponent <TextMesh>();
 }
示例#9
0
文件: UI.cs 项目: SkaterDanny/AIM-3D
 // Use this for initialization
 void Start()
 {
     distanceCounter = GameObject.Find("DistanceCounter").GetComponent<DistanceCounter>();
     distanceText = GameObject.Find("DistanceFloatText").GetComponent<TextMesh>();
 }
示例#10
0
        public void Init()
        {
            groups = new List <CountersGroup>();

            //TIME counters (8)
            var globalCurrentTime = new CurrentTimeCounter();

            var raceTimer = new TimerCounter("Race timer");

            var raceDuration = new TriggeredFuncCounter <Race, TimeSpan?>("Race duration", @"{0:hh\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.DurationOfRace);
                x.AddTrigger(nameof(Race.DurationOfRace), model.Race);
            });

            var raceStartTime = new TriggeredFuncCounter <Race, DateTime?>("Race start time", @"{0:HH\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.StartTime);
                x.AddTrigger(nameof(Race.StartTime), model.Race);
            });

            var raceEstimatedFinishTime = new TriggeredFuncCounter <Race, DateTime?>("Estimated finish time", @"{0:HH\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.EstimatedFinishTime);
                x.AddTrigger(nameof(Race.EstimatedFinishTime), model.Race);
            });

            var segmentTimer = new TriggeredFuncCounter <Race, TimeSpan?>("Timer at the end of segment", @"{0:hh\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.TimeOffsetAtTheEndOfCurrentSegment);
                x.AddTrigger(nameof(Race.TimeOffsetAtTheEndOfCurrentSegment), model.Race);
            });

            var timeToTurn = new RemainingTimeCounter("Time to turn").With(x =>
            {
                x.SetBase(raceTimer);
                x.SetTarget(segmentTimer);
                x.Size = CounterSize.XL;
            });

            var raceRemainingTime = new RemainingTimeCounter("Remaining race time").With(x =>
            {
                x.SetBase(raceTimer);
                x.SetTarget(raceDuration);
            });

            var segmentEndTime = new TriggeredFuncCounter <Race, DateTime?>("Time at end of segment", @"{0:HH\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.TimeAtTheEndOfCurrentSegment);
                x.AddTrigger("TimeAtTheEndOfCurrentSegment", model.Race);
            });

            //GPS Counters (1)
            var gpsCoords = new TriggeredFuncCounter <GlobalModel, string>("GPS", "{0}").With(x =>
            {
                x.BindTo(model, y =>
                {
                    if (y.LastLocaton == null)
                    {
                        return("N/A");
                    }
                    return(string.Format("Lat = {0:F5}\nLon = {1:F5}\nAcc = {2:F3}\nSpd = {3:F1} {4}",
                                         y.LastLocaton.Latitude,
                                         y.LastLocaton.Longitude,
                                         y.LastLocaton.Accuracy,
                                         y.LastLocaton.SpeedKmh,
                                         @"-\|/-\|/"[gpsSymbol++ % 8]));
                });
                x.AddTrigger("LastLocation", model);
                x.AddTrigger("Value", globalCurrentTime);
                x.Size         = CounterSize.XS;
                x.ValueChanged = y =>
                {
                    var z   = y as TriggeredFuncCounter <GlobalModel, string>;
                    var loc = z.BindingContext?.LastLocaton;
                    if (loc == null)
                    {
                        return;
                    }
                    if (loc.GpsOn)
                    {
                        if (!y.IsRunning)
                        {
                            y.Start();
                        }
                    }
                    else
                    {
                        if (y.IsRunning)
                        {
                            y.Stop();
                        }
                    }
                    var gpsage = (DateTime.Now.ToUniversalTime() - loc.Time).TotalSeconds;
                    y.SetImportant(gpsage > 5 || loc.Accuracy > 50);
                    y.SetCritical(gpsage > 30 || loc.Accuracy > 100);
                };
            });

            //SEGMENT info (3)
            var currentSegmentNo = new TriggeredFuncCounter <Race, int?>("Segment no", "{0}").With(x =>
            {
                x.BindTo(model.Race, y => y.CurrentSegment?.No);
                x.AddTrigger(nameof(Race.CurrentSegment), model.Race);
            });

            var currentSegmentSpeed = new TriggeredFuncCounter <Race, double?>("Speed at segment").With(x =>
            {
                x.BindTo(model.Race, y => y.CurrentSegment?.Speed);
                x.AddTrigger(nameof(Race.CurrentSegment), model.Race);
            });

            var currentSegmentLength = new TriggeredFuncCounter <Race, double?>("Length of segment").With(x =>
            {
                x.BindTo(model.Race, y => y.CurrentSegment?.Length);
                x.AddTrigger(nameof(Race.CurrentSegment), model.Race);
            });


            //DISTANCE counters (4)
            var globalDistance = new DistanceCounter("Global distance");

            //var raceDistance3 = new DistanceCounter3("S(by speed)");
            var segmentDistance = new DistanceCounter("Segment distance").With(x => {
                x.Subscribe("Value", y => {
                    if (model.Race.CurrentSegment != null && y.Value.HasValue)
                    {
                        model.Race.CurrentSegment.PassedDistance = y.Value.Value;
                    }
                });
            });

            var raceLength = new TriggeredFuncCounter <Race, double?>("Length of race").With(x =>
            {
                x.BindTo(model.Race, y => y.LengthOfRace);
                x.AddTrigger(nameof(Race.LengthOfRace), model.Race);
            });

            var segmentDistanceToTurn = new RemainingDistanceCounter("Distance to turn").With(x =>
            {
                x.SetBase(segmentDistance);
                x.SetTarget(currentSegmentLength);
                x.Size = CounterSize.XXL;
            });

            var racePassedDistance = new TriggeredFuncCounter <Race, double?>("Race distance").With(x =>
            {
                x.BindTo(model.Race, y =>
                {
                    return(y.Segments.TakeWhile(z => z.Passed).Sum(z => z.Length)
                           + segmentDistance.Value);
                });
                x.AddTrigger(nameof(Race.Segments), model.Race);
                x.AddTrigger(nameof(IRaceCounter <double?> .Value), segmentDistance);
            });

            var raceDistanceToFinish = new RemainingDistanceCounter("Distance to finish").With(x =>
            {
                x.SetBase(racePassedDistance);
                x.SetTarget(raceLength);
            });


            //SPEED (6)
            var raceAverageSpeed      = new AvgSpeedKmhCounter("Avg race speed", 86400);
            var segmentAvgSpeed       = new AvgSpeedKmhCounter("Avg segment speed", 86400);
            var segment15SecondsSpeed = new AvgSpeedKmhCounter("Avg segment speed 30 sec", 15);
            var segment5SecondsSpeed  = new AvgSpeedKmhCounter("Current speed", 5)
            {
                Size  = CounterSize.XXL,
                Color = CounterColor.Green
            }.With(x => x.AddTrigger("Value", raceTimer));

            var recommendedSpeed2 = new TriggeredFuncCounter <Race, double?>("Recommended speed value", "{0}").With(x =>
            {
                x.BindTo(model.Race, y =>
                {
                    if (y.IsRunning)
                    {
                        var timerFromStart           = raceTimer.Value;
                        var timerAtEndOfSegment      = y.TimeOffsetAtTheEndOfCurrentSegment;
                        var timeLeft                 = timerAtEndOfSegment - timerFromStart;
                        var remainingRaceTimeSeconds = raceRemainingTime.Value.GetValue().TotalSeconds;
                        if (timeLeft?.TotalSeconds <= 1)
                        {
                            return(remainingRaceTimeSeconds > 0 ? 1000 : 0);
                        }
                        var distanceLeft = y.CurrentSegment?.Length - segmentDistance?.Value;
                        var speed        = distanceLeft / timeLeft?.TotalSeconds * 3.6;
                        if (speed >= 90)
                        {
                            return(1000);
                        }
                        if (speed <= 1)
                        {
                            return(0);
                        }
                        return(speed);
                    }
                    return(0);
                });
                x.AddTrigger(nameof(Race.CurrentSegment), model.Race);
                x.AddTrigger(nameof(Race.IsRunning), model.Race);
                x.AddTrigger(nameof(IRaceCounter <TimeSpan?> .Value), raceTimer);
                x.AddTrigger(nameof(IRaceCounter <TimeSpan?> .Value), raceRemainingTime);
            });

            var recommendedSpeed = new TriggeredFuncCounter <Race, double?>("Recommended speed value", "{0}").With(x =>
            {
                x.BindTo(model.Race, y =>
                {
                    if (y.IsRunning)
                    {
                        var timeLeft = timeToTurn.Value;
                        var remainingRaceTimeSeconds = raceRemainingTime.Value.GetValue().TotalSeconds;
                        if (timeLeft?.TotalSeconds <= 1)
                        {
                            return(remainingRaceTimeSeconds > 0 ? 1000 : 0);
                        }
                        var distanceLeft = segmentDistanceToTurn.Value;
                        var speed        = distanceLeft / timeLeft?.TotalSeconds * 3.6;
                        if (distanceLeft < 0 || speed <= 1)
                        {
                            return(0);
                        }
                        if (speed >= 90)
                        {
                            return(1000);
                        }
                        return(speed);
                    }
                    return(0);
                });
                x.AddTrigger(nameof(Race.CurrentSegment), model.Race);
                x.AddTrigger(nameof(Race.IsRunning), model.Race);
                x.AddTrigger(nameof(IRaceCounter <TimeSpan?> .Value), raceTimer);
                x.AddTrigger(nameof(IRaceCounter <TimeSpan?> .Value), raceRemainingTime);
            });


            var recommendedSpeedString = new TriggeredFuncCounter <Race, string>("Recommended speed", "{0}").With(x =>
            {
                x.BindTo(model.Race, y =>
                {
                    if (!y.IsRunning)
                    {
                        return("0");
                    }
                    var speed = Convert.ToInt32(recommendedSpeed.Value);
                    if (speed == 1000)
                    {
                        return("MAX");
                    }
                    if (speed == 0)
                    {
                        return("STOP");
                    }
                    return(speed.ToString());
                });
                x.AddTrigger("Value", recommendedSpeed);
                x.AddTrigger("Value", segment5SecondsSpeed);
                x.Size = CounterSize.XXL;
                x.SetImportant(true);
                x.ValueChanged = y =>
                {
                    var speed = (int)recommendedSpeed.Value.GetValue();
                    if (speed == 0 || speed == 1000)
                    {
                        x.SetCritical(true);
                        return;
                    }
                    var avgSpeed = segment5SecondsSpeed.Value;
                    var rel      = avgSpeed > 0.5 ? Math.Abs(speed / avgSpeed) : 1000;
                    x.SetImportant(rel > 1.5 || rel < 0.75);
                    x.SetCritical(rel > 2 || rel < 1 / 2);
                };
            });

            //Mixed
            var lagLeadTime = new TriggeredFuncCounter <Race, TimeSpan>("Delay time", @"{0:hh\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.DelayTime);
                x.AddTrigger("Value", recommendedSpeed);
                x.AddTrigger("Value", segment5SecondsSpeed);
                x.Size = CounterSize.XL;
                x.SetImportant(false);
                x.SetCritical(false);
                x.ValueChanged = y =>
                {
                    var seconds = y.Value.TotalSeconds;
                    if (y.Value.Days == 1)
                    {
                        x.Color = CounterColor.Red;
                    }
                    {
                        if (seconds < -30)
                        {
                            x.Color = CounterColor.Red;
                        }
                        if (seconds >= -30 && seconds <= 30)
                        {
                            x.Color = CounterColor.White;
                        }
                        if (seconds > 30)
                        {
                            x.Color = CounterColor.Green;
                        }
                    }
                    //x.SetImportant(seconds > 30);
                    //x.SetCritical(seconds > 60);
                };
                x.ApproximationCount    = 5;
                x.ApproximationFunction = y =>
                {
                    if (!y.Any())
                    {
                        return(TimeSpan.FromSeconds(0));
                    }
                    if (y.Any(z => z.Days == 1))
                    {
                        return(TimeSpan.FromDays(1));
                    }
                    var avgSeconds = y.Select(z => z.TotalSeconds).Average();
                    return(TimeSpan.FromSeconds(avgSeconds));
                };
            });

            //speech
            var lastSpeedNotification    = 0;
            var lastDistanceNotification = 0;
            //var lastRoundedLen = 0;
            var lastNotificationTime    = DateTime.Now;
            var minNotificationInterval = TimeSpan.FromSeconds(2);

            model.Race.Subscribe(nameof(Race.CurrentSegment), x =>
            {
                lock (this)
                {
                    if (model.Race.CurrentSegment != null && model.Race.IsRunning)
                    {
                        var len = (int)model.Race.CurrentSegment.Length;
                        lastDistanceNotification = len;
                        model.Speech?.Speak($"Сегмент {len}");
                    }
                }
            });


            segmentDistanceToTurn.Subscribe(nameof(IRaceCounter <double?> .Value), x =>
            {
                lock (this)
                {
                    if (model.Race.CurrentSegment != null && model.Race.IsRunning)
                    {
                        var len   = x.Value.GetValue();
                        var k     = len > 1000 ? 1000 : len > 100 ? 100 : len > 50 ? 50 : 10;
                        var len10 = (int)(Math.Round(len / k) * k);
                        var speed = segmentAvgSpeed.Value;
                        if (speed < 0.01)
                        {
                            return;
                        }
                        if (Math.Abs(len - len10) > speed / 2)
                        {
                            return;
                        }
                        if (lastDistanceNotification == len10)
                        {
                            return;
                        }

                        lastDistanceNotification = len10;
                        if (len10 == 0)
                        {
                            model.Speech?.Speak($"Поворот");
                        }
                        else
                        {
                            if (DateTime.Now - lastNotificationTime < minNotificationInterval)
                            {
                                return;
                            }
                            if (len10 > 0)
                            {
                                model.Speech?.Speak($"Еще {len10}");
                            }
                            else
                            {
                                if (len < -50)
                                {
                                    model.Speech?.Speak(GetRandomPhrase(len < -200 ? "lost2" : "lost1", model.UseBadLanguage));
                                }
                            }
                        }
                        lastNotificationTime = DateTime.Now;
                    }
                }
            });

            recommendedSpeed.Subscribe(nameof(IRaceCounter <double?> .Value), x =>
            {
                lock (this)
                {
                    if (DateTime.Now - lastNotificationTime < minNotificationInterval)
                    {
                        return;
                    }
                    if (model.Race.CurrentSegment != null && model.Race.IsRunning)
                    {
                        var curSpeed = (int)Math.Round(segmentAvgSpeed.Value);
                        var recSpeed = (int)Math.Round(recommendedSpeed.Value.GetValue());
                        var speedStr = recSpeed >= 1000 ? GetRandomPhrase("maxSpeed", model.UseBadLanguage) : $"Скорость {recSpeed}";
                        if (Math.Abs(lastSpeedNotification - recSpeed) < 5)
                        {
                            return;
                        }
                        if (Math.Abs(curSpeed - recSpeed) < 5)
                        {
                            return;
                        }
                        lastSpeedNotification = recSpeed;
                        lastNotificationTime  = DateTime.Now;
                        model.Speech?.Speak(speedStr);
                    }
                }
            });

            //making groups
            var group0 = new ObservableRangeCollection <IRaceCounter>()
            {
                globalCurrentTime,
                raceStartTime,
                raceEstimatedFinishTime,
                raceTimer,
                raceRemainingTime
            };


            var group1 = new ObservableRangeCollection <IRaceCounter>()
            {
                gpsCoords,
                segmentDistanceToTurn,
                timeToTurn
            };

            var group2 = new ObservableRangeCollection <IRaceCounter>()
            {
                segment5SecondsSpeed,
                recommendedSpeedString,
                lagLeadTime
            };

            var group3 = new ObservableRangeCollection <IRaceCounter>()
            {
                raceLength, raceDuration, globalDistance, racePassedDistance, segmentDistance,
                raceDistanceToFinish, raceAverageSpeed, segmentAvgSpeed, currentSegmentSpeed, currentSegmentLength
            };

            groups.Add(new CountersGroup {
                Counters = group0, Weight = 0.5
            });
            groups.Add(new CountersGroup {
                Counters = group1
            });
            groups.Add(new CountersGroup {
                Counters = group2
            });
            groups.Add(new CountersGroup {
                Counters = group3
            });

            HiddenCounters = new List <IRaceCounter>();
            HiddenCounters.AddRange(new IRaceCounter[]
            {
                raceAverageSpeed,
                raceRemainingTime,
                recommendedSpeed,
                raceLength,
                currentSegmentNo,
                currentSegmentSpeed,
                currentSegmentLength,
                segmentAvgSpeed,
                segmentDistance,
                segmentEndTime,
                segmentTimer,
                segment15SecondsSpeed
            });

            SegmentCounters = new List <IRaceCounter>()
            {
                segmentTimer,
                segmentEndTime,
                segmentAvgSpeed,
                segmentDistance,
                segment5SecondsSpeed
            };

            AllCounters = HiddenCounters
                          .Union(Groups.SelectMany(x => x.Counters))
                          .Distinct()
                          .ToList();

            foreach (var c in AllCounters)
            {
                c.Init();
            }
        }
示例#11
0
 void Start()
 {
     distanceCounter = GameObject.Find("DistanceCounter").GetComponent <DistanceCounter>();
     tempFloat       = transform.position.z;
 }
示例#12
0
 void Start()
 {
     distanceCounter = GameObject.Find("DistanceCounter").GetComponent<DistanceCounter>();
     tempFloat = transform.position.z;
 }