public int TransportObject(InteractionObject whichObject, GameObject whichGoal, WalkToGoal walktogoal, PickUp pickup, float pickuptime, Vector3 holdpointPosition, Vector3 holdPointRotation, int cascade) { if (cascade == 0) // first communicate some basics to pickup script { pickup.SetPickUpTime(pickuptime); pickup.SetCurrentIO(whichObject); cascade++; } if (cascade == 1) // walk to the object { // public bool WalkTo(Transform CurrentGoal, bool DrawPath, float maxspeed, float mindist, float anglecut) // to check what the parameters mean bool ObjectReached = walktogoal.WalkTo(whichObject.transform, false, 0.4f, 0.2f, 120); // walk towards object to be pickup if (ObjectReached) { cascade++; } } if (cascade == 2) // pick it up { pickup.SetHoldPoint(holdpointPosition, holdPointRotation); // tell script how to hold this object. This is somehow overwritten if in cascade==0. Here it is called multiple times, but it's computationally light so that's ok float pickedup = pickup.PickUpObject(whichObject); // returns value from 0 to 1 indicating when it has picked up the object if (pickedup > 0.50) { cascade++; } // start walking towards goal before reaching 1, that is before object is perfectly in place. This gives a more fluent movement. } if (cascade == 3) // walk to the goal { bool GoalReached = walktogoal.WalkTo(whichGoal.transform, false, 0.4f, 0.2f, 120); if (GoalReached) { cascade++; } } if (cascade == 4) // drop object { float dropped = pickup.DropObject(whichGoal.transform); if (dropped > 0.99f) { pickup.LetGo(); cascade++; } } return(cascade); }
// Use this for initialization void Start() { CharacterWalkTo = Character.GetComponent <WalkToGoal>(); CharacterPickUp = Character.GetComponent <PickUp>(); // set all goal transforms on a different layer, and disable collisions to normal layer if (dropPoint1 != null) { dropPoint1.layer = 1; } if (dropPoint2 != null) { dropPoint2.layer = 1; } if (dropPoint3 != null) { dropPoint3.layer = 1; } Physics.IgnoreLayerCollision(0, 1, true); }
IEnumerator RunWave(EnemyWave wave) { WaitForSeconds spawnWait = new WaitForSeconds(wave.TimeBetweenSpawns); int spawnCount = wave.Count; for (int i = spawnCount; i > 0; i--) { for (int j = 0; j < wave.Enemies.Length; j++) { Vector2 spawnTile = GameManager.Instance.mapManager.StartTiles[Random.Range(0, GameManager.Instance.mapManager.StartTiles.Count)]; GameObject spawnTileObject = GameManager.Instance.mapManager.GetTile((int)spawnTile.x, (int)spawnTile.y); GameObject enemySpawned = Instantiate(wave.Enemies[j].BaseEnemy, spawnTileObject.transform.position + (Vector3.up * 2), Quaternion.Euler(0f, 0f, 0f)); EnemyBehavior enemyInfo = enemySpawned.GetComponent <EnemyBehavior>(); enemyInfo.SetInitialValues(wave, wave.Enemies[j]); WalkToGoal enemyWalk = enemySpawned.GetComponent <WalkToGoal>(); enemyWalk.SetValues(enemyInfo, spawnTile); currentlyExistingEnemies.Add(enemySpawned); yield return(new WaitForSeconds(Random.Range(0.01f, 0.2f))); } yield return(spawnWait); } currentlySpawningEnemies = false; }
public bool CharacterHasReachedGoal; //use this to trigger cascades of behavior (e.g. walk to goal, then grab it etc.) // Use this for initialization void Start() { CharacterWalkToGoal = Character.GetComponent <WalkToGoal>(); }