Example #1
0
 void OnTriggerExit(Collider other)
 {
     if (LayerMaskUtil.GetLayerMask(MyLayers.Interactable).Contains(other.gameObject.layer))
     {
         if (other.GetComponent <MonoInteractable>() == currentInteractable)
         {
             currentInteractable = null;
             EventBus.Post(new InteractableChangedEvent());
         }
     }
 }
Example #2
0
 void OnTriggerEnter(Collider other)
 {
     if (LayerMaskUtil.GetLayerMask(MyLayers.Interactable).Contains(other.gameObject.layer))
     {
         var interactble = other.gameObject.GetComponent <MonoInteractable>();
         if (interactble && interactble.enabled)
         {
             currentInteractable = interactble;
             EventBus.Post(new InteractableChangedEvent());
         }
     }
 }
Example #3
0
    IEnumerator CoroGenerateSheep()
    {
        yield return(new WaitUntil(() => GameContext.Instance));

        while (GameContext.Instance.pollutionState == PollutionState.None)
        {
            yield return(new WaitForSeconds(0.1f));

            var player = GameContext.Instance.player;
            foreach (var sheep in generatedSheep)
            {
                if (!sheep)
                {
                    continue;
                }
                if (Vector3.Distance(player.transform.position, sheep.transform.position) > maxSheepPlayerDist)
                {
                    Destroy(sheep);
                }
            }

            // 删除销毁的羊
            generatedSheep.RemoveAll(x => !x);

            // 尝试生成一个新的羊
            if (generatedSheep.Count < maxSheepCount &&
                (DateTime.Now - _lastGenerateTime).TotalSeconds > minGenerateTime)
            {
                var dist = sheepDistRange.random;
                var dir  = UnityEngine.Random.insideUnitCircle;
                var dir3 = new Vector3(dir.x, 0, dir.y);

                if (!Physics.Raycast(player.transform.position + Vector3.up, dir3, dist,
                                     LayerMaskUtil.GetLayerMask(0)))
                {
                    var npos          = player.transform.position + dir3 * dist;
                    var sheepInstance = Instantiate(prefab, transform);
                    sheepInstance.transform.position = npos;

                    generatedSheep.Add(sheepInstance);
                    _lastGenerateTime = DateTime.Now;
                    XDebug.Log("Generated new sheep");
                }
                else
                {
                    XDebug.Log("Position failed");
                }
            }
        }
    }