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 } } }
// 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; } } } }
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; } }
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; } } }
// 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); } } }