// Use to process your families. protected override void onProcess(int familiesUpdateCount) { if (Input.GetMouseButtonDown(0)) { // Only one GO is under pointer GameObject leverFocused_GO = levers.First(); if (leverFocused_GO != null) { Lever lever = leverFocused_GO.GetComponent <Lever> (); // Check if the hero is near to the boiler (only hero can produce this component thanks to Unity Physics layers) Triggered3D triggered = leverFocused_GO.GetComponent <Triggered3D> (); if (triggered != null) { lever.isOn = !lever.isOn; SpriteRenderer sr = leverFocused_GO.GetComponent <SpriteRenderer> (); if (lever.isOn) { sr.sprite = lever.on; MonitoringManager.trace(fm, "turnOn", MonitoringManager.Source.PLAYER); } else { sr.sprite = lever.off; MonitoringManager.trace(fm, "turnOff", MonitoringManager.Source.PLAYER); } } } } }
// Use to process your families. protected override void onProcess(int familiesUpdateCount) { if (Input.GetMouseButtonDown(0) && exit_GO.GetComponent <PointerOver>() != null) { ComponentMonitoring monitor = exit_GO.GetComponent <ComponentMonitoring> (); // Check if hero is near to exit (only hero can produce this component thanks to Unity Physics layers) Triggered3D triggered = exit_GO.GetComponent <Triggered3D> (); if (triggered != null) { MonitoringManager.trace(monitor, "perform", MonitoringManager.Source.PLAYER); GameObjectManager.setGameObjectState(endScreen_GO, true); foreach (FSystem sys in FSystemManager.fixedUpdateSystems()) { sys.Pause = true; } foreach (FSystem sys in FSystemManager.lateUpdateSystems()) { sys.Pause = true; } foreach (FSystem sys in FSystemManager.updateSystems()) { sys.Pause = true; } } } }
// Use to process your families. protected override void onProcess(int familiesUpdateCount) { if (!gameInfo.First().GetComponent <GameInfo>().triggered&& !gameInfo.First().GetComponent <GameInfo>().levelEditorMode) { gameInfo.First().GetComponent <GameInfo>().levelLost = false; foreach (GameObject target in obstacles) { Triggered3D t = target.GetComponent <Triggered3D>(); if (t) { //if the obstacle is triggered foreach (GameObject go in t.Targets) { //for each go that triggered the obstacle if (go.tag == "Object") { //if go is the ball foreach (FSystem s in FSystemManager.fixedUpdateSystems()) { if (s.ToString() == "ApplyForce" || s.ToString() == "MoveSystem") { s.Pause = true;//pause the game } } gameInfo.First().GetComponent <GameInfo>().gamePaused = true; gameInfo.First().GetComponent <GameInfo>().levelLost = true; gameInfo.First().GetComponent <GameInfo>().triggered = true; } } } } } gameInfo.First().GetComponent <GameInfo> ().levelLostText.SetActive(gameInfo.First().GetComponent <GameInfo>().levelLost); //show the text if the level is failed }
// Use to process your families. protected override void onProcess(int familiesUpdateCount) { foreach (GameObject ff in forcefields) { Triggered3D trig = ff.GetComponent <Triggered3D> (); if (trig != null) { foreach (GameObject go in trig.Targets) { if (go.tag == "Object") { Move mv = go.GetComponent <Move>(); if (ff.GetComponent <ForceField>().ffType == 0 || ff.GetComponent <ForceField>().ffType == 1) {//if attractive or repulsive //CircleEuler(ff, go, mv, 1000); CircleVerlet(ff, go, mv, 1000); } else if (ff.GetComponent <ForceField>().ffType == 2) {//if uniform Uniform(ff, go, mv, 1000); } } } } } }
// Use to process your families. protected override void onProcess(int familiesUpdateCount) { if (Input.GetMouseButtonDown(0)) { // Only one GO could be under pointer GameObject boiler_go = boilers.First(); if (boiler_go != null) { // Check if the hero is near to the boiler (only hero can produce this component thanks to Unity Physics layers) Triggered3D triggered = boiler_go.GetComponent <Triggered3D> (); if (triggered != null) { ComponentMonitoring cm = boiler_go.GetComponent <ComponentMonitoring> (); Boiler boiler = boiler_go.GetComponent <Boiler> (); if (boiler.isOn) { MonitoringManager.trace(cm, "turnOff", MonitoringManager.Source.PLAYER); } else { MonitoringManager.trace(cm, "turnOn", MonitoringManager.Source.PLAYER); } // Check if boiler is on OR boiler is not constrained OR the constraint is ok if (boiler.isOn || boiler.constraint == null || boiler.constraint.activeInHierarchy) { Animator anim = boiler_go.GetComponent <Animator> (); boiler.isOn = !boiler.isOn; anim.SetBool("isOn", boiler.isOn); } } } } }
// Use to process your families. protected override void onProcess(int familiesUpdateCount) { if (Input.GetMouseButtonDown(0)) { // Only one GO is under pointer GameObject door_GO = doors.First(); if (door_GO != null) { // Check if hero is near to the door (only hero can produce this component thanks to Unity Physics layers) Triggered3D triggered = door_GO.GetComponent <Triggered3D> (); if (triggered != null) { Door door = door_GO.GetComponent <Door> (); ComponentMonitoring monitor = door_GO.GetComponent <ComponentMonitoring> (); if (door.isOpen) { MonitoringManager.trace(monitor, "turnOff", MonitoringManager.Source.PLAYER); } else { MonitoringManager.trace(monitor, "turnOn", MonitoringManager.Source.PLAYER); } // Check if the door is constrained if (door.constraint == null || door.constraint.activeInHierarchy) { Animator anim = door_GO.GetComponentInParent <Animator> (); door.isOpen = !door.isOpen; anim.SetBool("isOpen", door.isOpen); } } } } }
// Use to process your families. protected override void onProcess(int familiesUpdateCount) { if (!gameInfo.First().GetComponent <GameInfo>().triggered&& !gameInfo.First().GetComponent <GameInfo>().levelEditorMode) { gameInfo.First().GetComponent <GameInfo>().levelCleared = false; foreach (GameObject target in targets) { Triggered3D t = target.GetComponent <Triggered3D>(); if (t) { //if the target is triggered foreach (GameObject go in t.Targets) { //for each go that triggered the target if (go.tag == "Object") { //if go is the ball foreach (FSystem s in FSystemManager.fixedUpdateSystems()) { if (s.ToString() == "ApplyForce" || s.ToString() == "MoveSystem") { s.Pause = true;//pause the game } } gameInfo.First().GetComponent <GameInfo>().gamePaused = true; gameInfo.First().GetComponent <GameInfo>().levelCleared = true; gameInfo.First().GetComponent <GameInfo>().triggered = true; } } } } } gameInfo.First().GetComponent <GameInfo> ().levelClearedText.SetActive(gameInfo.First().GetComponent <GameInfo>().levelCleared); //show the text if the level is cleared if (editorMode && !gameInfo.First().GetComponent <GameInfo>().levelEditorMode) { if (gameInfo.First().GetComponent <GameInfo>().validating) { foreach (Transform child in gameInfo.First().GetComponent <GameInfo>().levelClearedText.transform) { if (child.gameObject.name == "Retry") { child.gameObject.GetComponentInChildren <Text>().text = "Validate"; } } } else { foreach (Transform child in gameInfo.First().GetComponent <GameInfo>().levelClearedText.transform) { if (child.gameObject.name == "Retry") { child.gameObject.GetComponentInChildren <Text>().text = "Retry"; } } } } editorMode = gameInfo.First().GetComponent <GameInfo>().levelEditorMode; }
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; } } } }
private void onNewCollision(GameObject robot) { if (activeCoin) { Triggered3D trigger = robot.GetComponent <Triggered3D>(); foreach (GameObject target in trigger.Targets) { //Check if the player collide with a coin if (target.CompareTag("Coin")) { gameData.totalCoin++; target.GetComponent <AudioSource>().Play(); MainLoop.instance.StartCoroutine(coinDestroy(target)); } } } }
private void onNewCollision(GameObject robot) { if (activeRedDetector) { Triggered3D trigger = robot.GetComponent <Triggered3D>(); foreach (GameObject target in trigger.Targets) { //Check if the player collide with a detection cell if (target.GetComponent <Detector>() != null) { //end level Debug.Log("Repéré !"); GameObjectManager.addComponent <NewEnd>(endpanel_f.First(), new { endType = NewEnd.Detected }); } } } }
private void Freeze(BCell src) { Triggered3D trigerred = src.gameObject.GetComponent <Triggered3D>(); if (trigerred != null) { foreach (GameObject target in trigerred.Targets) { Eatable eatable = target.GetComponent <Eatable>(); if (eatable != null && (eatable.eatableMask & src.freezeMask) > 0 && target.GetComponent <Removed>() == null) { GameObjectManager.addComponent <Frozen>(target, new { remainingTime = src.freezeTime, totalTime = src.freezeTime }); } } if (trigerred.Targets.Length > 0) { src.cooldown = src.delay; } } }
// Use to process your families. protected override void onProcess(int familiesUpdateCount) { if (bubble_GO != null) { if (!hintLever) { // parse all levers near to hero (only hero can produce Triggered3D component thanks to Unity Physics layers) if (levers.Count > 0) { GameObjectManager.setGameObjectState(bubble_GO, true); TextMesh text = bubble_GO.GetComponentInChildren <TextMesh> (); text.text = "+2 is written\non theses levers"; startDisplaying = Time.timeSinceLevelLoad; hintLever = true; } } if (!hintBoiler) { // Check if boiler is near to hero (only hero can produce Triggered3D component thanks to Unity Physics layers) Triggered3D triggered = boiler_GO.GetComponent <Triggered3D> (); if (triggered != null) { GameObjectManager.setGameObjectState(bubble_GO, true); TextMesh text = bubble_GO.GetComponentInChildren <TextMesh> (); text.text = "Wow a boiler!\nIt is turned off."; startDisplaying = Time.timeSinceLevelLoad; hintBoiler = true; } } if (!hintDoor) { // Check if door is near to hero (only hero can produce Triggered3D component thanks to Unity Physics layers) Triggered3D triggered = door_GO.GetComponent <Triggered3D> (); if (triggered != null) { GameObjectManager.setGameObjectState(bubble_GO, true); TextMesh text = bubble_GO.GetComponentInChildren <TextMesh> (); text.text = "This door is locked\nI need a key!"; startDisplaying = Time.timeSinceLevelLoad; hintDoor = true; } } if (!hintIceWall && iceWall_GO.GetComponent <BoxCollider> ().enabled) { InCollision3D collision = iceWall_GO.GetComponent <InCollision3D> (); if (collision != null) { foreach (GameObject target in collision.Targets) { if (target == hero_GO) { GameObjectManager.setGameObjectState(bubble_GO, true); TextMesh text = bubble_GO.GetComponentInChildren <TextMesh> (); text.text = "Damn! The path\nis blocked by an\nice wall!"; startDisplaying = Time.timeSinceLevelLoad; hintIceWall = true; } } } } if (!hintKey || !hintMatchstick) { // Parse all active GO takable in game and near to player (only hero can produce Triggered3D component thanks to Unity Physics layers) foreach (GameObject go in inGameObjects) { if (!hintKey && go.name == "Key") { GameObjectManager.setGameObjectState(bubble_GO, true); TextMesh text = bubble_GO.GetComponentInChildren <TextMesh> (); text.text = "A key, It can\nbe useful!"; startDisplaying = Time.timeSinceLevelLoad; hintKey = true; } if (!hintMatchstick && go.name == "Matchstick") { GameObjectManager.setGameObjectState(bubble_GO, true); TextMesh text = bubble_GO.GetComponentInChildren <TextMesh> (); text.text = "Some matchsticks:\nuseful to make\na fire!"; startDisplaying = Time.timeSinceLevelLoad; hintMatchstick = true; } } } if (bubble_GO.activeSelf && startDisplaying + 4 < Time.timeSinceLevelLoad) { GameObjectManager.setGameObjectState(bubble_GO, false); } } }
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); } } }