private void OnTriggerStay(Collider other) { if (other.gameObject.CompareTag("TrapSquare")) { trapUI.UpdateTrapUIDetails(trapState, trapGnomeOn, selectedTrap); if (other.gameObject.GetComponent <TrapPlacementArea>() && !currentTrapLocation) { currentTrapLocation = other.gameObject.GetComponent <TrapPlacementArea>(); trapGnomeOn = currentTrapLocation.currentTrap; } // check to if there is a trap here... // if not allow the user to place a trap here.... if (currentTrapLocation && !other.gameObject.GetComponent <TrapPlacementArea>().hasTrap) { trapState = TrapStates.PlaceTrap; } else if (currentTrapLocation && other.gameObject.GetComponent <TrapPlacementArea>().hasTrap) { // else allow the user to pickup what is there. trapState = TrapStates.PickupTrap; } // updates the trap location if (trapGnomeOn != currentTrapLocation.currentTrap) { trapGnomeOn = currentTrapLocation.currentTrap; } } }
public void Start() { TrapLevelUpPannel = FindObjectOfType <UiManager>(); PlayerGameObject = GameObject.FindWithTag("Player"); _gameManager = GameManager.instance; MainCanvasGameObject = GameObject.FindWithTag("MainCanvas"); Terrain = Terrain.activeTerrain; ActualSelectedTrapTypes = TrapTypes.None; }
void OnDisable() { IsInTrapCreationMode = false; ActualSelectedTrapTypes = TrapTypes.None; TargetedTrap = null; if (ActualTrap != null) { Destroy(ActualTrap.TrapPrefab); } }
/// <summary> /// Creates An Instance Of 'Trap' /// </summary> /// <param name="type">Sets The Type Of The Trap</param> /// <param name="row">Sets The Row Of The Trap</param> /// <param name="column">Sets The Column Of The Trap</param> public Trap(TrapTypes type, int row, int column) { Type = type; maxDamage = (int)Type; Row = row; Column = column; fallenInto = false; }
public static int RequestUpgradeAmount(UpgradeType _Utype, TrapTypes _trapTypes) { switch (_trapTypes) { case TrapTypes.trap1: switch (_Utype) { case UpgradeType.CatchSuccessChance: return(Trap1Success); case UpgradeType.CatchCoolDown: return(Trap1CoolDown); case UpgradeType.CatchRaduis: return(Trap1Raduis); } break; case TrapTypes.trap2: switch (_Utype) { case UpgradeType.CatchSuccessChance: return(Trap2Success); case UpgradeType.CatchCoolDown: return(Trap2CoolDown); case UpgradeType.CatchRaduis: return(Trap2Raduis); } break; case TrapTypes.trap3: switch (_Utype) { case UpgradeType.CatchSuccessChance: return(Trap3Success); case UpgradeType.CatchCoolDown: return(Trap3CoolDown); case UpgradeType.CatchRaduis: return(Trap3Raduis); } break; } return(0); }
/// <summary> /// TEMP - toggles the trap type selected, gonna make controls for this soon, but this is good for debugging on UI /// </summary> public void ToggleTrapType() { if (selectedTrap.Equals(TrapTypes.Cable)) { selectedTrap = TrapTypes.BBQ; } else { selectedTrap = TrapTypes.Cable; } }
private void OnTriggerExit(Collider other) { // resets the current trap and gnome state on exit if (other.gameObject.CompareTag("TrapSquare")) { trapState = TrapStates.NoTraps; currentTrapLocation = null; trapGnomeOn = TrapTypes.None; trapUI.HideTrapUI(); } }
public void UpdateUi(TrapTypes trapTypes) { if (SelectedTrapType != TrapTypes.None) { transform.GetChild((int)SelectedTrapType).GetComponent <SelectionElement>().Unselect(); } if (trapTypes != TrapTypes.None) { transform.GetChild((int)trapTypes).GetComponent <SelectionElement>().Select(); } SelectedTrapType = trapTypes; }
private void OnTriggerEnter(Collider other) { // sets up the trap square if the user is on one if (other.gameObject.CompareTag("TrapSquare")) { if (other.gameObject.GetComponent <TrapPlacementArea>()) { currentTrapLocation = other.gameObject.GetComponent <TrapPlacementArea>(); trapGnomeOn = currentTrapLocation.currentTrap; trapUI.UpdateTrapUIDetails(trapState, trapGnomeOn, selectedTrap); trapUI.DisplayTrapUI(currentTrapLocation.transform.GetChild(0).transform); } } }
/// <summary> /// Updates the trap UI /// </summary> /// <param name="state">The state of the trap</param> /// <param name="type">The type of trap on the trap currently</param> /// <param name="userTrap">The trap type the user has active</param> public void UpdateTrapUIDetails(TrapStates state, TrapTypes type, TrapTypes userTrap) { if (state.Equals(TrapStates.PlaceTrap)) { prefabInstance.GetComponentsInChildren <Text>()[0].text = "Place " + userTrap.ToString() + " Trap"; } else if (state.Equals(TrapStates.PickupTrap)) { prefabInstance.GetComponentsInChildren <Text>()[0].text = "Pickup " + type.ToString() + " Trap"; } prefabInstance.GetComponentsInChildren <Text>()[1].text = userTrap.ToString() + " Trap Selected"; if (isGamepad) { if (state.Equals(TrapStates.PlaceTrap)) { prefabInstance.GetComponentsInChildren <Text>()[2].text = controllerPlace; } else if (state.Equals(TrapStates.PickupTrap)) { prefabInstance.GetComponentsInChildren <Text>()[2].text = controllerPickup; } prefabInstance.GetComponentsInChildren <Text>()[3].text = controllerToggle; } else { if (state.Equals(TrapStates.PlaceTrap)) { prefabInstance.GetComponentsInChildren <Text>()[2].text = keyboardPlace; } else if (state.Equals(TrapStates.PickupTrap)) { prefabInstance.GetComponentsInChildren <Text>()[2].text = keyboardPickup; } prefabInstance.GetComponentsInChildren <Text>()[3].text = keyboardToggle; } }
private void Update() { if (input.Gnome.UseTrap.phase.Equals(InputActionPhase.Performed) && canUseInput) { if (!trapState.Equals(TrapStates.PickupTrap) && trapState.Equals(TrapStates.PlaceTrap)) { // place trap down in area. switch (selectedTrap) { case TrapTypes.None: break; case TrapTypes.Cable: if (cableTraps > 0) { PlaceTrap(); currentTrapLocation.hasTrap = true; currentTrapLocation.currentTrap = TrapTypes.Cable; cableTraps -= 1; cablePlaced += 1; } break; case TrapTypes.BBQ: if (bbqTrays > 0) { PlaceTrap(); currentTrapLocation.hasTrap = true; currentTrapLocation.currentTrap = TrapTypes.BBQ; bbqTrays -= 1; bbqPlaced += 1; } break; default: break; } } else if (trapState.Equals(TrapStates.PickupTrap) && !trapState.Equals(TrapStates.PlaceTrap)) { // pick up trap in area. switch (trapGnomeOn) { case TrapTypes.None: break; case TrapTypes.Cable: PickupTrap(); currentTrapLocation.hasTrap = false; currentTrapLocation.currentTrap = TrapTypes.None; cableTraps += 1; cablePlaced -= 1; break; case TrapTypes.BBQ: PickupTrap(); currentTrapLocation.hasTrap = false; currentTrapLocation.currentTrap = TrapTypes.None; bbqTrays += 1; bbqPlaced -= 1; break; default: break; } } // input delay StartCoroutine(InputDelay()); } // toggle selected trap if (input.Gnome.ToggleTrap.phase == InputActionPhase.Performed) { if (canUseToggle) { if (selectedTrap.Equals(TrapTypes.Cable)) { selectedTrap = TrapTypes.BBQ; } else { selectedTrap = TrapTypes.Cable; } StartCoroutine(InputToggleDelay()); } } }
/// <summary> /// Starts A New Level, Resets The Necessary Variables For Each One /// And Randomizes a New Position For The Player, For The Exit, /// For The Map And For Each Trap in 'trapList' /// </summary> public void StartNewLevel() { Player.hasMap = false; // Level Difficulty currentLevelDifficulty = currentLevel + Board.Difficulty; // Number Of Traps (According To Cells and Level Difficulty) numberOfTraps = numberOfCells * currentLevelDifficulty / 25; // Cap The Number Of Traps Per Level According To Grid Size if (numberOfTraps > Convert.ToInt32(numberOfCells * 0.75)) { numberOfTraps = Convert.ToInt32(numberOfCells * 0.75); } numberOfWeapons = Convert.ToInt32(numberOfCells / (currentLevelDifficulty / 1.5)); if (numberOfWeapons < Convert.ToInt32(numberOfCells * 0.10)) { Console.Clear(); Console.WriteLine("REACHED WEAPONS CAP"); Console.ReadLine(); numberOfWeapons = Convert.ToInt32(numberOfCells * 0.10); } numberOfFood = Convert.ToInt32(numberOfCells / (currentLevelDifficulty / 2.5)); if (numberOfFood < Convert.ToInt32(numberOfCells * 0.15)) { Console.Clear(); Console.WriteLine("REACHED FOOD CAP"); Console.ReadLine(); numberOfFood = Convert.ToInt32(numberOfCells * 0.15); } CellList.Clear(); trapList.Clear(); weaponList.Clear(); foodList.Clear(); // Create Cell's According To Grid Size for (int i = 0; i < Board.Rows; i++) { for (int j = 0; j < Board.Columns; j++) { CellList.Add(new Cell(i, j)); } } Random random = new Random(); // Sets Player's Beginning Position (Cell) Player.position = new Position(random.Next(Board.Rows), 0); // Sets Exit's Position (Cell) exit = new Position(random.Next(Board.Rows), Board.Columns - 1); // Sets Map's Position (Cell) map = new Position(exit.Row, exit.Column); while (map.Row == exit.Row && map.Column == exit.Column) { map = new Position(random.Next(Board.Rows), random.Next(Board.Columns)); } // Creates Array With Possible 'TrapTypes' Array trapTypes = Enum.GetValues(typeof(TrapTypes)); for (int i = 0; i < numberOfTraps; i++) { int row = 0; int column = 0; // Sets Trap Type (Randomly) TrapTypes randomType = (TrapTypes)trapTypes.GetValue (random.Next(trapTypes.Length)); bool validPosition = false; // Loops Until Trap's Position Is Valid while (!validPosition) { // Sets Trap's Position (Cell) row = random.Next(Board.Rows); column = random.Next(Board.Columns); // Restricts Trap's Position if (row == exit.Row && column == exit.Column) { continue; } else if (row == Player.position.Row && column == Player.position.Column) { continue; } else { validPosition = true; } } // Adds Trap To 'trapList' trapList.Add(new Trap(randomType, row, column)); } // Creates Array With Possible 'weaponTypes' Array weaponTypes = Enum.GetValues( typeof(PossibleItems.weaponTypes)); for (int i = 0; i < numberOfWeapons; i++) { Weapon newWeapon; int row = 0; int column = 0; // Sets Weapon Type (Randomly) PossibleItems.weaponTypes randomType = (PossibleItems.weaponTypes)weaponTypes.GetValue( random.Next(weaponTypes.Length)); switch (randomType) { case PossibleItems.weaponTypes.LongClaw: newWeapon = new Weapon("LongClaw", 14, 0.8f, 6); break; case PossibleItems.weaponTypes.Ryno: newWeapon = new Weapon("Ryno", 16, 0.7f, 8); break; case PossibleItems.weaponTypes.LightSaber: newWeapon = new Weapon("Light Saber", 18, 0.9f, 5); break; case PossibleItems.weaponTypes.BladesOfChaos: newWeapon = new Weapon( "Blades Of Chaos", 20, 0.9f, 12); break; case PossibleItems.weaponTypes.Mjolnir: newWeapon = new Weapon("Mjolnir", 25, 0.6f, 30); break; case PossibleItems.weaponTypes.InfinityGauntlet: newWeapon = new Weapon( "Infinity Gauntlet", 35, 0.4f, 10); break; default: newWeapon = new Weapon("", 0, 0, 0); break; } bool validPosition = false; // Loops Until Weapon's Position Is Valid while (!validPosition) { // Sets Weapon's Position (Cell) row = random.Next(Board.Rows); column = random.Next(Board.Columns); // Restricts Weapon's Position if (row == exit.Row && column == exit.Column) { continue; } else if (row == Player.position.Row && column == Player.position.Column) { continue; } else { validPosition = true; } } // Sets New Position For The Weapon newWeapon.Position.Row = row; newWeapon.Position.Column = column; // Adds Weapon To 'weaponList' weaponList.Add(newWeapon); } // Creates Array With Possible 'foodTypes' Array foodTypes = Enum.GetValues(typeof(PossibleItems.foodTypes)); for (int i = 0; i < numberOfFood; i++) { Food newFood; int row = 0; int column = 0; // Sets Food Type (Randomly) PossibleItems.foodTypes randomType = (PossibleItems.foodTypes)weaponTypes.GetValue( random.Next(foodTypes.Length)); switch (randomType) { case PossibleItems.foodTypes.SliceOfCheese: newFood = new Food("Slice of Cheese", 2, 0.1f); break; case PossibleItems.foodTypes.BigMac: newFood = new Food("Big Mac", 5, 0.4f); break; case PossibleItems.foodTypes.Ratatouille: newFood = new Food("Ratatouille", 18, 0.7f); break; case PossibleItems.foodTypes.Pasta: newFood = new Food("Pasta", 6, 0.9f); break; case PossibleItems.foodTypes.BucketOfChicken: newFood = new Food("Bucket of Chicken", 9, 0.5f); break; default: newFood = new Food("", 0, 0); break; } bool validPosition = false; // Loops Until Food's Position Is Valid while (!validPosition) { // Sets Food's Position (Cell) row = random.Next(Board.Rows); column = random.Next(Board.Columns); // Restricts Foods's Position if (row == exit.Row && column == exit.Column) { continue; } else if (row == Player.position.Row && column == Player.position.Column) { continue; } else { validPosition = true; } } // Sets New Position For The Food newFood.Position.Row = row; newFood.Position.Column = column; // Adds Weapon To 'weaponList' foodList.Add(newFood); } }
public void Update() { if (_gameManager.IsTheSunAwakeAndTheBirdAreSinging) { if (Input.GetKey("1")) { IsInTrapCreationMode = true; UpdateUi(TrapTypes.NeedleTrap); } if (Input.GetKey("2")) { IsInTrapCreationMode = true; UpdateUi(TrapTypes.BaitTrap); } if (Input.GetKey("3")) { IsInTrapCreationMode = true; UpdateUi(TrapTypes.MudTrap); } if (Input.GetKey("4")) { IsInTrapCreationMode = true; UpdateUi(TrapTypes.LandmineTrap); } } else { IsInTrapCreationMode = false; ActualSelectedTrapTypes = TrapTypes.None; Debug.Log(TargetedTrap); TargetedTrap = null; Debug.Log(TargetedTrap); if (ActualTrap != null) { Destroy(ActualTrap.TrapPrefab); } } if (IsInTrapCreationMode) { // hackfix : avoid allowing traps then put in pause TutorialOpen.instance.OpenTutorial(GameVariables.Tutorials.traps); } if (IsInTrapCreationMode) { TargetedTrap = null; if (SelectedTrapType != ActualSelectedTrapTypes) { if (ActualTrap != null) { Destroy(ActualTrap.TrapPrefab); } CreateTrapPrevu(); ActualSelectedTrapTypes = SelectedTrapType; } Vector3 cursorPosition = GetCursorPosition(); var normalizedPos = new Vector2(Mathf.InverseLerp(0f, Terrain.terrainData.size.x, cursorPosition.x), Mathf.InverseLerp(0, Terrain.terrainData.size.z, cursorPosition.z)); ActualTrap.TrapPrefab.transform.rotation = Quaternion.LookRotation(Terrain.terrainData.GetInterpolatedNormal(normalizedPos.x, normalizedPos.y), Terrain.terrainData.GetInterpolatedNormal(normalizedPos.x, normalizedPos.y)); ActualTrap.TrapPrefab.transform.position = cursorPosition; if (Input.GetMouseButtonDown(0) && GameManager.instance.SpendGold(ActualTrap.UpgradeCosts[0])) { CreateTrap(); } if (Input.GetMouseButtonDown(1)) { IsInTrapCreationMode = false; UpdateUi(TrapTypes.None); ActualSelectedTrapTypes = TrapTypes.None; Destroy(ActualTrap.TrapPrefab); } } else if (IsTargetable() && _gameManager.IsTheSunAwakeAndTheBirdAreSinging) { if (Input.GetMouseButtonDown(0)) { TargetedTrap.LevelUp(); } if (Input.GetMouseButtonDown(1)) { var cl = TargetedTrap; TargetedTrap = null; cl.Destroy(); } } }
private void OnTriggerEnter(Collider col) { // Trap collisions if (col.gameObject.GetComponent <Trap>()) { var colTrapComponent = col.GetComponent <Trap>(); //direction towards the col var colliderWithoutZ = new Vector3(colTrapComponent.GetColliderCenterPosition().x, colTrapComponent.GetColliderCenterPosition().y, 0); var playerWithoutZ = new Vector3(playerMovement.GetColliderCenterPosition().x, playerMovement.GetColliderCenterPosition().y, 0); //Vector3 toCollider = (col.transform.position - playerMovement.GetColliderCenterPosition()).normalized; Vector3 toCollider = colliderWithoutZ - playerWithoutZ; RaycastHit hit; if (Physics.Raycast(playerMovement.GetColliderCenterPosition(), toCollider, out hit)) { if (debug) { Debug.DrawRay(playerMovement.GetColliderCenterPosition(), toCollider, Color.blue, 1.0f); } // Contact point info Vector3 contactPoint = hit.point; Vector3 contactPointNormal = hit.normal; // Get trap infos TrapConfig trapConfig = col.gameObject.GetComponent <Trap>().GetTrapConfig(); TrapTypes trapType = trapConfig.GetTrapType(); //*** Damage ***// // Instant kill or trap damage if (trapConfig.IsInstantKill()) { playerHealth.TakeDamage(playerHealth.GetCurrentHealth()); } else { playerHealth.TakeDamage(trapConfig.GetTrapDamage()); } //*** Knockback ***// //Freeze player for a time && Push him on the opposite side if (trapConfig.IsKockbackEnabled()) { playerMovement.Knockback(trapConfig.GetHitKnockbackTime(), trapConfig.GetKnockbackForceX(), trapConfig.GetKnockbackForceY(), contactPointNormal); } //*** Collision effect ***// SpawnTrapCollisionParticleByContact(contactPoint, contactPointNormal, trapConfig); SpawnTrapHitParticle(trapConfig); //*** Player Hit effect ***// //***TRAPS SPECIFIC LOGIC***// Call trap-specific code switch (trapType) { #region VOID case TrapTypes.Void: break; #endregion #region FIRE case TrapTypes.Fire: break; #endregion #region SPIKES case TrapTypes.Spikes: break; #endregion #region LASER case TrapTypes.Laser: break; #endregion default: break; } } } }
public Trap(TrapTypes trapType, string infoText, string pathToImage) : base(infoText, pathToImage) { this.trapType = trapType; }
private void SetupTrap() { TrapTypes[] potentialTrapTypes = { TrapTypes.ConcussiveBlast, TrapTypes.DirectDamage, TrapTypes.ElectrifiedZone, TrapTypes.EMP, TrapTypes.FaradayCage, TrapTypes.MalwareInjection, TrapTypes.NerveGas, TrapTypes.NeurotoxinCloud, TrapTypes.ParalysisAgent, TrapTypes.RustAgent, TrapTypes.Spam }; trapType = potentialTrapTypes[Random.Range(0, potentialTrapTypes.Length)]; switch (trapType) { case TrapTypes.ConcussiveBlast: trapName = "Concussive Blast"; trapDescription = "On this Location: Block use of Head and Exoskeleton cards"; break; case TrapTypes.DirectDamage: // Deal 15% damage CharacterData runner = FindObjectOfType <MapData>().GetRunner(); float maxHealth = runner.GetMaximumHealth(); int damageToTake = Mathf.FloorToInt(maxHealth * 0.2f); if (damageToTake < 1) { damageToTake = 1; } trapAmount = damageToTake; trapName = "Trap"; trapDescription = "Took " + trapAmount.ToString() + " damage."; break; case TrapTypes.ElectrifiedZone: trapName = "Electrified Zone"; trapAmount = 3; trapDescription = "Take " + trapAmount + " Damage. Every time you move onto this location, take " + trapAmount + " damage"; break; case TrapTypes.EMP: trapName = "EMP"; trapAmount = 30; trapDescription = "On this location: Your Cyber and Tech cards have a " + trapAmount + "% chance to fizzle"; break; case TrapTypes.FaradayCage: trapName = "Faraday Cage"; trapDescription = "On this location: Block use of Hacker cards"; break; case TrapTypes.MalwareInjection: trapName = "Malware Injection"; trapAmount = 5; trapDescription = "Add " + trapAmount + " Malware cards to your deck. These cards are destroyed when used"; break; case TrapTypes.NerveGas: trapName = "Nerve Gas"; trapAmount = 30; trapDescription = "On this location: Your Bio cards have a " + trapAmount + "% chance to fizzle"; break; case TrapTypes.NeurotoxinCloud: trapName = "Neurotoxin Cloud"; trapAmount = 1; trapDescription = "Take " + trapAmount + " Damage. During combat on this location: Take " + trapAmount + " Damage at the start of each of your turns"; break; case TrapTypes.ParalysisAgent: trapName = "Paralysis Agent"; trapDescription = "On this location: Block use of Arm and Leg cards"; break; case TrapTypes.RustAgent: trapName = "Rust Agent"; trapAmount = 30; trapDescription = "On this location: Your Mech cards have a " + trapAmount + "% chance to fizzle"; break; case TrapTypes.Spam: trapName = "Spam"; trapAmount = 1; trapDescription = "Add " + trapAmount + " Spam card to your deck"; break; } }