void SpawnObstacle(Vector3 pos, Direction dir){ if (obstaclesList.Count > 0) { LinkedListNode<ObstacleScript> oldest = obstaclesList.Last; do { ObstacleScript oldestObstacle = oldest.Value; if (!oldestObstacle.isCrash && (Mathf.Abs(differenceAlongDirection(play.transform.position, oldestObstacle.transform.position, dirAfterTurn(PlayerScript.currentDirection, true))) > chunkReuseDistance || differenceAlongDirection(play.transform.position, oldestObstacle.transform.position) > chunkReuseDistance)) { HealthBarScript oldHealth = oldestObstacle.GetComponent<HealthBarScript>(); oldHealth.health = 100f; oldHealth.healthBar.parent.gameObject.SetActive(false); oldHealth.UpdateHealthBar(); oldHealth.transform.position = pos; oldestObstacle.transform.eulerAngles = new Vector3(0, (int)dir, 0); oldestObstacle.ResetDirection(); obstaclesList.Remove(oldest); obstaclesList.AddFirst(oldestObstacle); return; } oldest = oldest.Previous; } while (oldest != null); } //or else, just spawn a new obstacle int obstacleType = Random.Range(0, obstaclePrefabs.Length); GameObject obstacle = Instantiate(obstaclePrefabs[obstacleType], pos, Quaternion.identity); obstacle.transform.eulerAngles = new Vector3(0, (int)dir, 0); ObstacleScript ob = obstacle.GetComponent<ObstacleScript>(); obstaclesList.AddFirst(ob); }
public void ObstacleInteraction(ObstacleScript obstacle) { if (GetGunInHolster() == null) { HolsterGun(); _playerController.SwitchState <PushingState>(obstacle); } }
public override void ResetState(IInteractable obstacle) { _obstacleScript = (ObstacleScript)obstacle; _obstacleIKLeftHand = _playerController.ObstacleIKLeftHand; _obstacleIKRightHand = _playerController.ObstacleIKRightHand; _hasHitObstacle = false; }
private int spawnWalls(int i, int currentTotalWalls) { // control the speed variable if (currentTotalWalls == 1) { currentWallSpeed = 0.1f; } else if (currentTotalWalls % 5 == 0) { currentWallSpeed = currentWallSpeed + 0.07f; } setRespawnTime(Random.Range(1.5f, 4.0f)); // Spawn wall and obstacle N times where N times is requried to be set; if ((i % 2) == 0) { // increment walls only when wall is spawned currentTotalWalls++; randWall = Random.Range(1, 4); // adds random walls to the scene and assign speed as each object is instantiated if (randWall == 1) { GameObject a = Instantiate(wallBasic1) as GameObject; a.transform.position = new Vector3(-1.193203f, 6.31f, 92f); WallScript ws = a.GetComponent <WallScript>(); ws.setWallSpeed(currentWallSpeed); } else if (randWall == 2) { GameObject a = Instantiate(wallBasic2) as GameObject; a.transform.position = new Vector3(-5.893f, 6.31f, 92f); WallScript ws = a.GetComponent <WallScript>(); ws.setWallSpeed(currentWallSpeed); } else if (randWall == 3) { GameObject a = Instantiate(wallBasic3) as GameObject; a.transform.position = new Vector3(3.158229f, 6.31f, 92f); WallScript ws = a.GetComponent <WallScript>(); ws.setWallSpeed(currentWallSpeed); } } else { // adds ball obstacle to the scene in random x location. float randomX = Random.Range(-7f, 7f); GameObject obstacle = Instantiate(ballObject) as GameObject; obstacle.transform.position = new Vector3(randomX, 5f, 90f); ObstacleScript os = obstacle.GetComponent <ObstacleScript>(); os.setObstacleSpeed(currentWallSpeed); } return(currentTotalWalls); }
//obstacle avoidance public Vector3 AvoidObstacle(List <GameObject> avoidThese) { Vector3 ultimateForce = Vector3.zero; foreach (var obst in avoidThese) { float dotForward = Vector3.Dot(obst.transform.position - transform.position, transform.forward); ObstacleScript obScript = obst.GetComponent <ObstacleScript>(); if (obScript != null) { //is it in front and close enough if (dotForward > 0 && dotForward < maxObstacleRadius) { //will I collide on the left-right plane float dotRight = Vector3.Dot(obst.transform.position - transform.position, transform.right); if (dotRight < radius + obScript.radius) { //will it collide on up-down plane float dotUp = Vector3.Dot(obst.transform.position - transform.position, transform.up); if (dotUp < radius + obScript.radius) { if (dotUp > 0) { ultimateForce += -transform.up * (maxObstacleRadius - dotForward) * dotUp; } if (dotUp > 0) { ultimateForce += transform.up * (maxObstacleRadius - dotForward) * -dotUp; } if (dotRight > 0) { ultimateForce += -transform.right * (maxObstacleRadius - dotForward) * dotRight; } if (dotRight > 0) { ultimateForce += transform.right * (maxObstacleRadius - dotForward) * -dotRight; } //odd edge case if (dotRight == 0 && dotUp == 0) { ultimateForce += (transform.right * Random.Range(.001f, 1f) + transform.up * Random.Range(.001f, 1f)).normalized * (maxObstacleRadius - dotForward); } } } } } } return(ultimateForce.normalized); }
void OnCollisionEnter2D(Collision2D collision) { ObstacleScript obstacle = collision.collider.GetComponent <ObstacleScript>(); if (obstacle != null) { obstacle.TakeDamage(damage); } CombatScript disc = collision.collider.GetComponent <CombatScript>(); if (disc != null) { disc.catchDisc(); Destroy(gameObject); } }
void Stun(ObstacleScript obstacle, int multiplier) { Health -= obstacle.Damage; if (Health > 0) { StopMomentum(false); StartCoroutine(WaitAfterBounceback()); StartCoroutine(ResetAfterBounceback()); Physics2D.IgnoreCollision(_activeObstacle, _boxCollider); _bounceBack = true; _rigidBody.AddForce(new Vector2(multiplier * 3500, 8000)); _renderer.color = new Color(0.8f, 0.2f, 0.2f); } else { Die(); } UpdateHealthBar(); }
public void moveObstacle() { if (CarScript.moveDir == 0) { float y_pos = upObstacle.transform.position.y; float x_pos = upObstacle.transform.position.x; float z_pos = upObstacle.transform.position.z; float y_player = CarScript.yPos; y_pos -= upObstacle.renderer.bounds.size.y/2.0f; y_player += CarScript.yHeight/2.0f; //upObstacle.transform.position = new Vector3(x_pos,(y_pos+y_player)/2.0f + upObstacle.renderer.bounds.size.y/2.0f,z_pos); ObstacleScript obsScript = (ObstacleScript) upObstacle.GetComponent(typeof(ObstacleScript)); if (obsScript) { obsScript.yTarget = (y_pos+y_player)/2.0f + upObstacle.renderer.bounds.size.y/2.0f; //obsScript.yTarget = y_player + upObstacle.renderer.bounds.size.y/2.0f; obsScript.doMove = true; } } else if (CarScript.moveDir == 1) { float y_pos = downObstacle.transform.position.y; float x_pos = downObstacle.transform.position.x; float z_pos = downObstacle.transform.position.z; float y_player = CarScript.yPos; y_pos += downObstacle.renderer.bounds.size.y/2.0f; y_player -= CarScript.yHeight/2.0f; //downObstacle.transform.position = new Vector3(x_pos,(y_pos+y_player)/2.0f - downObstacle.renderer.bounds.size.y/2.0f,z_pos); ObstacleScript obsScript = (ObstacleScript) downObstacle.GetComponent(typeof(ObstacleScript)); if (obsScript) { obsScript.yTarget = (y_pos+y_player)/2.0f - downObstacle.renderer.bounds.size.y/2.0f; //obsScript.yTarget = y_player - downObstacle.renderer.bounds.size.y/2.0f; obsScript.doMove = true; } } }
void Awake() { instance = this; tr = GetComponent <Transform>(); }
public void CreateNextObstacle(float prevY) { GameObject newObstacle; int obsType = 1; if (SelectedLevelScript.selectedLevel == 1) { obsType = obstTypeLvl1[obstacleIndex]; } else if (SelectedLevelScript.selectedLevel == 2) { obsType = obstTypeLvl2[obstacleIndex]; } else if (SelectedLevelScript.selectedLevel == 3) { obsType = obstTypeLvl3[obstacleIndex]; } else if (SelectedLevelScript.selectedLevel == 4) { obsType = obstTypeLvl4[obstacleIndex]; }else if (SelectedLevelScript.selectedLevel == 5) { obsType = obstTypeLvl5[obstacleIndex]; } // Create correct type of obstacle if(obsType == 0) newObstacle = (GameObject) GameObject.Instantiate(Resources.Load("Obstacle_green", typeof(GameObject))); else newObstacle = (GameObject) GameObject.Instantiate(Resources.Load("Obstacle_red", typeof(GameObject))); // Set id ObstacleScript obsScript = (ObstacleScript) newObstacle.GetComponent(typeof(ObstacleScript)); if (obsScript) { obsScript.id = obstacleCount; } //calculate position float obsDist = 0; float obsAmount = 0; int obsSide = 0; float freeSpace = 0; if (SelectedLevelScript.selectedLevel == 1) { obsDist = obstDistanceLvl1[obstacleIndex]; obsAmount = obstAmountLvl1[obstacleIndex]; obsSide = obstSideLvl1[obstacleIndex]; freeSpace = (0.1f+0.6f*(obsAmount / 100)) * BackgroundScript.stage_bounds.size.x; } else if (SelectedLevelScript.selectedLevel == 2) { obsDist = obstDistanceLvl2[obstacleIndex]; obsAmount = obstAmountLvl2[obstacleIndex]; obsSide = obstSideLvl2[obstacleIndex]; freeSpace = (0.1f + 0.5f * (obsAmount / 100)) * BackgroundScript.stage_bounds.size.x; } else if (SelectedLevelScript.selectedLevel == 3) { obsDist = obstDistanceLvl3[obstacleIndex]; obsAmount = obstAmountLvl3[obstacleIndex]; obsSide = obstSideLvl3[obstacleIndex]; freeSpace = (0.1f + 0.45f * (obsAmount / 100)) * BackgroundScript.stage_bounds.size.x; } else if (SelectedLevelScript.selectedLevel == 4) { obsDist = obstDistanceLvl4[obstacleIndex]; obsAmount = obstAmountLvl4[obstacleIndex]; obsSide = obstSideLvl4[obstacleIndex]; freeSpace = (0.1f + 0.45f * (obsAmount / 100)) * BackgroundScript.stage_bounds.size.x; } else if (SelectedLevelScript.selectedLevel == 5) { obsDist = obstDistanceLvl5[obstacleIndex]; obsAmount = obstAmountLvl5[obstacleIndex]; obsSide = obstSideLvl5[obstacleIndex]; freeSpace = (0.1f + 0.40f * (obsAmount / 100)) * BackgroundScript.stage_bounds.size.x; } if (SelectedLevelScript.selectedLevel == 1 && iteration < 1 && obstacleIndex < 40) { if (freeSpace < 4.5f) freeSpace = 4.5f; } else if (iteration > 3) { if (freeSpace < 3f) freeSpace = 3f; } else { if (freeSpace < 4f) freeSpace = 4f; } float max_speed = CarScript.getMaxSpeed(); if (SelectedLevelScript.selectedLevel == 1) { max_speed = 250 + CarScript.score / 2.0f; if (max_speed > 400) max_speed = 400; } else if (SelectedLevelScript.selectedLevel == 2) { max_speed = 300 + CarScript.score / 2.0f; if (max_speed > 450) max_speed = 450; } else if (SelectedLevelScript.selectedLevel == 3) { max_speed = 360 + CarScript.score / 2.0f; if (max_speed > 500) max_speed = 500; } else if (SelectedLevelScript.selectedLevel == 4) { max_speed = 420 + CarScript.score; if (max_speed > 600) max_speed = 600; } else if (SelectedLevelScript.selectedLevel == 5) { max_speed = 510 + CarScript.score; if (max_speed > 700) max_speed = 700; } CarScript.setMaxSpeed (max_speed); float x_pos; if (obsSide == 0) { x_pos = BackgroundScript.stage_bounds.max.x - freeSpace - newObstacle.collider2D.bounds.size.x/2; } else { x_pos = BackgroundScript.stage_bounds.min.x+freeSpace+newObstacle.collider2D.bounds.size.x/2; } float y_space = obsDist / 12f; if (y_space < 4.5f) y_space = 4.5f; float y_pos = prevY+y_space; if (obstacleIndex == 0) y_pos += 4; newObstacle.transform.position = new Vector3(x_pos,y_pos,0); obstacleIndex++; obstacleCount++; if (obstacleIndex > 99) { obstacleIndex = 0; iteration++; } }
public void ObstacleInteraction(ObstacleScript obstacle) { _playerController.SwitchState <PushingState>(obstacle); }
// Use this for initialization void Start() { instance = this; trans = GetComponent <Transform>(); }