private void ProcessInVesselPointerOver()
    {
        foreach (GameObject go in _InVesselPointerOver)
        {
            if (Input.GetKeyDown(KeyCode.Mouse0))
            {
                GameObjectManager.setGameObjectLayer(go, 11); // Now macrophage is considered as an immunity cell
                MoveToward move     = go.GetComponent <MoveToward>();
                Playable   playable = go.GetComponent <Playable>();
                if (playable)
                {
                    //Global.data.trackedEntities.
                    foreach (PairEStatTrackedEntityInt trackedEntity in Global.data.trackedEntities)
                    {
                        if (trackedEntity.a == playable.trackedEntity)
                        {
                            trackedEntity.b++;
                            break;
                        }
                    }
                }
                GameObject target = PathSystem.GetClosestWaypoint(go, _Waypoints);

                GameObjectManager.addComponent(go, typeof(PathFollower), new
                {
                    destination = PathSystem.ComputeDestination(target.transform.position, _EndWaypoints)
                });                                      // Compute destination (the closest one from start waypoint)

                move.target = target.transform.position; // Move cell to closest waypoint
            }
        }
    }
Beispiel #2
0
    // Use to process your families.
    protected override void onProcess(int familiesUpdateCount)
    {
        foreach (GameObject waypointGO in _triggeredWaypoints)
        {
            GameObject[] targets = waypointGO.GetComponent <Triggered3D>().Targets;
            foreach (GameObject targetGO in targets)
            {
                PathFollower follower = targetGO.GetComponent <PathFollower>();
                Node         current  = waypointGO.GetComponent <Node>();

                if (follower != null)
                {
                    if (current.Equals(follower.destination))
                    {
                        GameObjectManager.removeComponent(follower);
                        followersPath.Remove(targetGO);
                        continue;
                    }

                    if (follower.previousWaypoint == null || !follower.previousWaypoint.Equals(current))
                    {
                        ComputeNextWaypoint(targetGO, follower, current);
                        follower.previousWaypoint = current;
                    }
                    MoveToward move = targetGO.GetComponent <MoveToward>();
                    move.target = follower.nextWaypoint.gameObject.transform.position;
                }
            }
        }
    }
Beispiel #3
0
    private void MakeDecision(GameObject go)
    {
        Pathogene    pathogene = go.GetComponent <Pathogene>();
        PathFollower follower  = go.GetComponent <PathFollower>();
        MoveToward   move      = go.GetComponent <MoveToward>();

        if (pathogene.target == null) // No target, maybe already dead or pathogene just spawned
        {
            pathogene.target = FindNextTarget(go.transform.position);
            if (pathogene.target == null)
            {
                return;
            }

            Node next = GetClosestWaypointTo(go.transform.position).GetComponent <Node>();
            Node dest = GetClosestWaypointTo(pathogene.target.transform.position).GetComponent <Node>();

            if (follower == null) // We could have reach the final waypoint, PathFollower component may have been removed
            {
                GameObjectManager.addComponent <PathFollower>(go, new
                {
                    nextWaypoint = next,
                    destination  = dest
                });
            }
            else
            {
                follower.nextWaypoint = next;
                follower.destination  = dest;
            }
            move.target = next.transform.position;
        }
        else if (follower == null) // Final waypoint has been reached, but target still exists
        {
            move.target = pathogene.target.transform.position;
        }

        // Pathogenes are opportunists : if a cell is closer than their target, they will go kill it
        Triggered3D triggered = go.GetComponent <Triggered3D>();

        if (triggered != null) // Cell in range ?
        {
            foreach (GameObject target in triggered.Targets)
            {
                if (target.GetComponent <Cell>() != null && target.GetComponent <Removed>() == null)
                {
                    move.target = target.transform.position;
                    return;
                }
            }
        }
    }
    protected override void onProcess(int familiesUpdateCount)
    {
        int count = _MoveTowardGO.Count;

        for (int i = 0; i < count; i++)
        {
            GameObject go         = _MoveTowardGO.getAt(i);
            MoveToward moveToward = go.GetComponent <MoveToward>();
            float      speed      = ((moveToward.useOverride) ? moveToward.overrideSpeed : moveToward.speed);
            go.transform.position  = Vector3.MoveTowards(go.transform.position, moveToward.target, speed * Time.deltaTime);
            moveToward.useOverride = false;
        }
    }
Beispiel #5
0
    private void RandomizeSpeed(GameObject go)
    {
        MoveToward mv = go.GetComponent <MoveToward>();

        mv.speed = Random.Range(mv.speed - SPEED_SHIFT, mv.speed + SPEED_SHIFT);
    }
    private void MakeDecision()
    {
        foreach (GameObject go in _Active)
        {
            Macrophage  macrophage = go.GetComponent <Macrophage>();
            MoveToward  move       = go.GetComponent <MoveToward>();
            Triggered3D triggered  = go.GetComponent <Triggered3D>();

            bool shouldRecompute = false;

            // Is the a pathogene nearby ?
            if (triggered != null)
            {
                Eater      eater            = go.GetComponent <Eater>();
                float      minDistance      = float.MaxValue;
                GameObject targetedPosition = null;

                // Compute closest eatable thing
                foreach (GameObject target in triggered.Targets)
                {
                    Eatable eatable = target.GetComponent <Eatable>();
                    if (eatable != null && (eatable.eatableMask & eater.eatingMask) > 0)
                    {
                        float distance = Vector3.Distance(go.transform.position, target.transform.position);
                        if (distance < minDistance)
                        {
                            minDistance      = distance;
                            targetedPosition = target;
                        }
                    }
                }

                if (targetedPosition != null) // Found something to eat
                {
                    // Move to it
                    move.target = targetedPosition.transform.position;

                    // Update last decision made
                    macrophage.lastDescision = DECISIONS.CHASE;

                    continue;
                }

                if (macrophage.lastDescision.Equals(DECISIONS.CHASE)) // Last decision was chase but nothing is eatable in our range
                {
                    shouldRecompute = true;                           // We need to recompute a path to the closest EndNode.
                }
            }

            if (macrophage.lastDescision.Equals(DECISIONS.CHASE) || shouldRecompute) // No pathogene to hunt in the area
            {
                // Recompute closest Waypoint
                GameObject   _target  = PathSystem.GetClosestWaypoint(go, _Waypoints);
                PathFollower follower = go.GetComponent <PathFollower>();

                // Update destination
                follower.destination = PathSystem.ComputeDestination(_target.transform.position, _EndWaypoints);
                move.target          = _target.transform.position;

                // Update decision
                macrophage.lastDescision = DECISIONS.FOLLOW_PATH;
            }
        }
    }
Beispiel #7
0
    // Use to process your families.
    protected override void onProcess(int familiesUpdateCount)
    {
        foreach (GameObject triggerVolume in _StartTriggerGO)
        {
            StartLoopTrigger triggerComp = triggerVolume.GetComponent <StartLoopTrigger>();
            if (triggerComp.deckPool.Count > 0)
            {
                triggerComp.cooldownDeck -= Time.deltaTime;
                if (triggerComp.cooldownDeck <= 0)
                {
                    triggerComp.cooldownDeck = triggerComp.deckRate;
                    GameObject prefab = triggerComp.deckPool.Pop <GameObject>();

                    // Instanciate the GameObject
                    GameObject go = Object.Instantiate(prefab);
                    go.SetActive(true);

                    // Bind it to FYFY
                    GameObjectManager.bind(go);

                    // Set GameObject's position
                    go.transform.position = randomStartPosition(triggerVolume);
                }
            }

            if (triggerComp.randomGoPool.Count > 0)
            {
                triggerComp.cooldownRandom -= Time.deltaTime;
                if (triggerComp.cooldownRandom <= 0)
                {
                    triggerComp.cooldownRandom = triggerComp.randomGoRate;
                    GameObject prefab = triggerComp.randomGoPool.Pop <GameObject>();

                    // Instanciate the GameObject
                    GameObject go = Object.Instantiate(prefab);
                    go.SetActive(true);

                    // Bind it to FYFY
                    GameObjectManager.bind(go);

                    // Set GameObject's position
                    go.transform.position = randomStartPosition(triggerVolume);
                }
            }
        }

        foreach (GameObject triggerVolume in _InTriggerGO)
        {
            InLoopTrigger triggerComp = triggerVolume.GetComponent <InLoopTrigger>();
            Triggered3D   triggered   = triggerVolume.GetComponent <Triggered3D>();
            foreach (GameObject go in triggered.Targets)
            {
                MoveToward moveToward = go.GetComponent <MoveToward>();
                if (moveToward)  // Immuno layer
                {
                    moveToward.useOverride   = true;
                    moveToward.overrideSpeed = triggerComp.speedMult;
                }

                if (moveToward && moveToward.target != triggerComp.target.position && go.layer != 11) // Immuno layer
                {
                    moveToward.target = triggerComp.target.position;
                }
            }
        }

        foreach (GameObject triggerVolume in _EndTriggerGO)
        {
            EndLoopTrigger triggerComp = triggerVolume.GetComponent <EndLoopTrigger>();
            Triggered3D    triggered   = triggerVolume.GetComponent <Triggered3D>();
            foreach (GameObject go in triggered.Targets)
            {
                go.transform.position = randomStartPosition(triggerComp.teleport);
            }
        }
    }