/////////////////////////////////////////////////////////////////////////// bool NeedsMoreWalkers() { bool enoughWalkersAlive = transform.childCount >= WalkerManager.Get().MaxWalkerCount; bool enoughWalkersSpawned = m_SpawnedCount >= MaxSpawnCount; return(!enoughWalkersAlive && !enoughWalkersSpawned); }
/////////////////////////////////////////////////////////////////////////// bool HandleWaypointChange() { Vector3 targetPoint = GetTargetPoint(); Vector2 selfToTarget2D = (targetPoint - transform.position).xz(); float distanceToTarget = selfToTarget2D.magnitude; if (distanceToTarget < ReachTargetThreshold) { int pathPointCount = WalkerPath.Get().PathLines.Length; m_CurrentTargetPointIndex++; if (m_CurrentTargetPointIndex >= pathPointCount) { GameManager.Get().m_RescuedWalkers++; GameManager.Get().AddTimeBonus(TimeBonusWhenRescued); AudioManager.Get().PlayRandomOneShot(WalkerManager.Get().gameObject, WalkerManager.Get().RescueSound, WalkerManager.Get().RescueSoundVolume); m_CurrentTargetPointIndex--; GameObject.Destroy(gameObject); return(false); } } return(true); }
/////////////////////////////////////////////////////////////////////////// void Attack() { List <Walker> walkersInRange = WalkerManager.Get().GetAllWalkers(transform.position.xz(), this); foreach (Walker walker in walkersInRange) { walker.Kill(); } }
public static WalkerManager Get() { if (!s_Instance) { s_Instance = GameObject.FindObjectOfType <WalkerManager>(); s_Instance.ReInit(); } return(s_Instance); }
/////////////////////////////////////////////////////////////////////////// void PlayNoergelSound() { Walker nearestWalker = WalkerManager.Get().GetNearestWalker(transform.position.xz(), DashNoergelRadius, transform.forward.xz(), DashNoergelDot); if (!nearestWalker) { return; } AudioManager.Get().PlayRandomOneShot(nearestWalker.gameObject, nearestWalker.NoergelSound, nearestWalker.NoergelSoundVolume); }
/////////////////////////////////////////////////////////////////////////// public void Kill() { if (IsKilled) { return; } IsKilled = true; AudioManager.Get().PlayRandomOneShot(WalkerManager.Get().gameObject, WalkerManager.Get().KillSound, WalkerManager.Get().KillSoundVolume); bloodPS.Play(); Speed = 0; model.SetActive(false); GameObject.Destroy(gameObject, 2f); }
/////////////////////////////////////////////////////////////////////////// public override void OnInspectorGUI() { WalkerManager walkerManager = (WalkerManager)target; DrawDefaultInspector(); // We only want to modify Scene data during play mode GUI.enabled = Application.isPlaying; if (GUILayout.Button("KillAll")) { walkerManager.KillAllWalkers(); } if (GUILayout.Button("Spawn Small")) { WalkerSpawner spawner = GameObject.FindObjectOfType <WalkerSpawner>(); WalkerSpawnerEditor.SpawnSingle(spawner, false); } if (GUILayout.Button("Spawn Big")) { WalkerSpawner spawner = GameObject.FindObjectOfType <WalkerSpawner>(); WalkerSpawnerEditor.SpawnSingle(spawner, true); } if (GUILayout.Button("Spawn Multiple")) { WalkerSpawner[] spawners = GameObject.FindObjectsOfType <WalkerSpawner>(); for (int s = 0; s < spawners.Length; ++s) { WalkerSpawnerEditor.SpawnMulti(spawners[s]); } } if (GUILayout.Button(walkerManager.enabled ? "Stop Spawning" : "Resume Spawning")) { WalkerSpawner[] spawners = GameObject.FindObjectsOfType <WalkerSpawner>(); for (int s = 0; s < spawners.Length; ++s) { spawners[s].enabled = !spawners[s].enabled; } } GUI.enabled = true; }
/////////////////////////////////////////////////////////////////////////// public override void OnInspectorGUI() { WalkerSpawner walkerSpawner = (WalkerSpawner)target; DrawDefaultInspector(); // We only want to modify Scene data during play mode GUI.enabled = Application.isPlaying; if (GUILayout.Button("KillAll")) { WalkerManager.Get().KillAllWalkers(); } if (GUILayout.Button("Spawn Smal")) { SpawnSingle(walkerSpawner, false); } if (GUILayout.Button("Spawn Big")) { SpawnSingle(walkerSpawner, true); } if (GUILayout.Button("Spawn Multiple")) { for (int i = 0; i < 20; ++i) { SpawnMulti(walkerSpawner); } } if (GUILayout.Button(walkerSpawner.enabled ? "Stop Spawning" : "Resume Spawning")) { walkerSpawner.enabled = !walkerSpawner.enabled; } GUI.enabled = true; }
/////////////////////////////////////////////////////////////////////////// public void SpawnWalker(float relativeSpawnOfBurst, bool isBigWalker) { Walker walker = GameObject.Instantiate(isBigWalker ? BigWalkerSpawnPrefab : SmallWalkerSpawnPrefab, WalkerManager.Get().transform); walker.ID = m_SpawnedCount; walker.gameObject.name = "Walker " + m_SpawnedCount; Vector2 offset = Vector2.zero; offset.x = Mathf.Cos(relativeSpawnOfBurst * Mathf.PI * 2.0f); offset.y = Mathf.Sin(relativeSpawnOfBurst * Mathf.PI * 2.0f); walker.transform.position = transform.position + offset.To3D(0.0f); m_SpawnedCount++; }
/////////////////////////////////////////////////////////////////////////// void TryInteraction() { bool doInteract = Input.GetButtonDown(GetInputPrefix() + "Interact"); if (doInteract) { CharAnim.SetTrigger("Work"); Vector2 selfPos = transform.position.xz(); Vector2 selfLookDir = transform.forward.xz(); selfLookDir.Normalize(); // 1) Traps if (EquippedTool && EquippedTool._ToolType != ToolType.Megaphone) { Trap nearestTrap = TrapManager.Get().GetNearestTrap(true, EquippedTool, selfPos, true, true, selfLookDir); if (nearestTrap) { if (EquippedTool) { AudioManager.Get().PlayRandomOneShot(gameObject, EquippedTool.RepairSound, EquippedTool.RepairSoundVolume); } nearestTrap.Interact(); return; } if (TrapManager.Get().GetNearestTrap(false, EquippedTool, selfPos, true, true, selfLookDir)) { PlayFailSound(); WorldSpaceCanvas.Get().AddText("Wrong Tool", transform.position); return; } } // 2) Trolley Tool nearestTool = ToolTrolley.Get().GetNearestTool(selfPos, true, selfLookDir); if (nearestTool) { ToolTrolley.Get().SwitchTool(ref EquippedTool, nearestTool); if (EquippedTool._ToolType == ToolType.Drill) { ToolVisuals[0].gameObject.SetActive(true); ToolVisuals[1].gameObject.SetActive(false); ToolVisuals[2].gameObject.SetActive(false); ToolVisuals[3].gameObject.SetActive(false); } else if (EquippedTool._ToolType == ToolType.Hammer) { ToolVisuals[0].gameObject.SetActive(false); ToolVisuals[1].gameObject.SetActive(true); ToolVisuals[2].gameObject.SetActive(false); ToolVisuals[3].gameObject.SetActive(false); } else if (EquippedTool._ToolType == ToolType.Megaphone) { ToolVisuals[0].gameObject.SetActive(false); ToolVisuals[1].gameObject.SetActive(false); ToolVisuals[2].gameObject.SetActive(true); ToolVisuals[3].gameObject.SetActive(false); } else if (EquippedTool._ToolType == ToolType.Mop) { ToolVisuals[0].gameObject.SetActive(false); ToolVisuals[1].gameObject.SetActive(false); ToolVisuals[2].gameObject.SetActive(false); ToolVisuals[3].gameObject.SetActive(true); } return; } // 3) Megaphone if (EquippedTool && EquippedTool._ToolType == ToolType.Megaphone) { if (Time.time - m_LastMegaphoneUsage > MegaphoneCooldown) { AudioManager.Get().PlayRandomOneShot(EquippedTool.gameObject, EquippedTool.RepairSound, EquippedTool.RepairSoundVolume); m_LastMegaphoneUsage = Time.time; Vector2 ownPos = transform.position.xz(); Vector2 ownForward = transform.forward.xz(); Vector2 MegaphoneImpactCenter = ownPos + ownForward * MegaphoneImpactDistance; List <Walker> walkers = WalkerManager.Get().GetAllWalkers(Vector2.zero, null); foreach (Walker walker in walkers) { Vector2 walkerPos = walker.transform.position.xz(); float dist = Vector2.Distance(walkerPos, MegaphoneImpactCenter); float impactAmount = 1.0f - Mathf.InverseLerp(MegaphoneInnerRadius, MegaphoneOuterRadius, dist); impactAmount = Mathf.Clamp01(impactAmount); if (impactAmount <= 0.0f) { continue; } float debugHeight = transform.position.y + 0.1f; Debug.DrawLine(MegaphoneImpactCenter.To3D(debugHeight), walkerPos.To3D(debugHeight)); Vector2 pushDir = (walkerPos - MegaphoneImpactCenter).normalized; /* * Vector2 orthogonalVector = new Vector2(ownForward.y, -ownForward.x); * * if (Vector2.Dot(orthogonalVector, pushDir) < 0.0f) * { * orthogonalVector *= -1.0f; * } * * pushDir = Vector2.Lerp(pushDir, orthogonalVector, MegaphoneOrthogonalPush).normalized; */ Debug.DrawLine(walkerPos.To3D(debugHeight), (walkerPos + pushDir * 3.0f).To3D(debugHeight), Color.red); walker.MegaphoneForceAmountNorm = impactAmount; walker.MegaphoneForceDirection = pushDir.normalized; walker.Reorient(); } } return; } // 4) Error PlayFailSound(); } }