Beispiel #1
0
 public void RemoveMonster(MonsterSpawnLocation monster)
 {
     print("Cleaning up monster ");
     if (monster.gameObject != null)
     {
         Destroy(monster.gameObject);
     }
     monsters.Remove(monster);
 }
Beispiel #2
0
        private void CheckMonsters()
        {
            if (Random.value > monsterSpawnRate)
            {
                var mlat    = GPSLocationService.Instance.Latitude + Random.Range(-latitudeSpawnOffset, latitudeSpawnOffset);
                var mlon    = GPSLocationService.Instance.Longitude + Random.Range(-longitudeSpawnOffset, longitudeSpawnOffset);
                var monster = new MonsterSpawnLocation
                {
                    location       = new MapLocation(mlon, mlat),
                    spawnTimestamp = GPSLocationService.Instance.PlayerTimestamp
                };
                monsters.Add(monster);
            }

            //store players location for easy access in distance calculations
            var playerLocation = new MapLocation(GPSLocationService.Instance.Longitude, GPSLocationService.Instance.Latitude);
            //get the current Epoch time in seconds
            var now = Epoch.Now;

            foreach (MonsterSpawnLocation m in monsters)
            {
                var d = MathG.Distance(m.location, playerLocation);
                if (MathG.Distance(m.location, playerLocation) < monsterSeeDistance)
                {
                    m.lastSeenTimestamp = now;
                    m.footstepRange     = 4;
                    if (m.gameObject == null)
                    {
                        print("Monster seen, distance " + d + " started at " + m.spawnTimestamp);
                        SpawnMonster(m);
                    }
                    else
                    {
                        m.gameObject.SetActive(true);  //make sure the monster is visible
                    }
                    continue;
                }

                if (MathG.Distance(m.location, playerLocation) < monsterHearDistance)
                {
                    m.lastHeardTimestamp = now;
                    var footsteps = CalculateFootstepRange(d);
                    m.footstepRange = footsteps;
                    print("Monster heard, footsteps " + footsteps);
                }

                //hide monsters that can't be seen
                if (m.gameObject != null)
                {
                    m.gameObject.SetActive(false);
                }
            }
        }
Beispiel #3
0
        private void SpawnMonster(MonsterSpawnLocation monster)
        {
            var lon      = monster.location.Longitude;
            var lat      = monster.location.Latitude;
            var position = ConvertToWorldSpace(lon, lat);
            var rotation = Quaternion.AngleAxis(Random.Range(0, 360), Vector3.up);

            monster.gameObject = (GameObject)Instantiate(monsterPrefab, position, rotation);
            var controller = monster.gameObject.AddComponent <MonsterController>();

            controller.monsterSpawnLocation     = monster;
            controller.monsterService           = this;
            monster.gameObject.transform.parent = transform;
        }