public void Attack() { attacking = true; cooldown -= Time.deltaTime; if (cooldown <= 0) { if (target != null) { if (target.tag == "Rabbit") { target.GetComponent <RabbitProperties>().health--; if (target.GetComponent <RabbitProperties>().health <= 0) { currentState = RabbitState.Move; attacking = false; } } else { // Decrement enemy resources } cooldown = Random.Range(1, 2); } } }
protected override sealed void Target(int xCoord, int zCoord) { base.Target(xCoord, zCoord); if (currentX == xCoord && currentZ == zCoord) { if (state == RabbitState.FoodTargeting) { state = RabbitState.Eating; } else if (state == RabbitState.MateTargeting) { state = RabbitState.Mating; } if (Mathf.Abs(targetZ) == 1 && Mathf.Abs(targetX) == 1) { targetX = 0; } } else { previousHopPoint = transform.position; targetHopPoint = ecosystem.terrainManager.terrain[currentX, currentZ] + Vector3.up * 0.5f; currentlyHopping = true; } }
/// <summary> /// Initializes a new instance of the <see cref="RabbitBehavior" /> class. /// </summary> public RabbitBehavior() { this.velocity = new Vector2(0.2f, 0); this.initialDirection = Vector2.UnitX; this.State = RabbitState.still; this.stillTime = TimeSpan.Zero; }
void OnCollisionEnter(Collision col) { if (State != RabbitState.Destroy && col.transform.tag == "Wolf") { print(transform.name + " was mauled."); State = RabbitState.Dead; } }
//Runs each frame if inPlayerRange private void Run() { rabbitState = RabbitState.running; if (goRun) { StartCoroutine(RunCoroutine()); } }
// Use this for initialization void Start() { rBody = GetComponent <Rigidbody2D>(); properties = GetComponent <RabbitProperties>(); queuedLayers.Add((int)RabbitState.Move); currentState = RabbitState.Move; cooldown = 1f; gm = GameObject.FindGameObjectWithTag("GameManager").GetComponent <GameManagment>(); }
protected override sealed void IncreaseHunger(float rate) { base.IncreaseHunger(rate); if (hunger >= 100) { state = RabbitState.Dying; } }
// Use this for initialization void Start() { rBody = GetComponent <Rigidbody2D>(); properties = GetComponent <RabbitProperties>(); queuedLayers.Add((int)RabbitState.Move); currentState = RabbitState.Move; cooldown = 1f; gm = GameObject.FindGameObjectWithTag("GameManager").GetComponent <GameManagment>(); //Debug.Log(gm); Debug.Log("Reminder: 0 = Attack, 1 = Mine, 2 = Move"); }
void OnTriggerStay(Collider other) { if (!targetFlower) { if (other.gameObject.CompareTag("flower")) { targetFlower = other.gameObject.GetComponent <Flower>(); state = RabbitState.Targeting; } } }
void PerformStateAction() { int x = 0; int z = 0; switch (state) { case RabbitState.Searching: HopToNearbySquareAfterDelay(2, x, z); break; case RabbitState.Targeting: if (!targetFlower) { state = RabbitState.Searching; if (Mathf.Abs(targetZ) == 1 && Mathf.Abs(targetX) == 1) { targetX = 0; } return; } x = targetFlower.xCoord; z = targetFlower.zCoord; HopToNearbySquareAfterDelay(1, x, z); break; case RabbitState.Dying: Die(); break; case RabbitState.Eating: EatFlower(); break; case RabbitState.Fleeing: if (!wolfToFleeFrom) { state = RabbitState.Searching; if (Mathf.Abs(targetZ) == 1 && Mathf.Abs(targetX) == 1) { targetX = 0; } return; } x = wolfToFleeFrom.currentX; z = wolfToFleeFrom.currentZ; HopToNearbySquareAfterDelay(3, x, z); ClearWolfWhenSafe(); break; } }
void SetPriority() { if (state == RabbitState.FoodSearching || state == RabbitState.MateSearching) { if (reproduction > hunger) { state = RabbitState.MateSearching; } else { state = RabbitState.FoodSearching; } } }
public Material GetMaterial(RabbitState rabbitState) { switch (rabbitState) { case RabbitState.Run: return(runMaterial); case RabbitState.Warning: return(warningMaterial); default: return(sleepMaterial); } }
void Target() { if (!targetFlower) { state = RabbitState.Searching; if (Mathf.Abs(targetZ) == 1 && Mathf.Abs(targetX) == 1) { targetX = 0; } return; } int x = targetFlower.xCoord; int z = targetFlower.zCoord; int xChange = 0; int zChange = 0; if (currentX != x) { xChange = currentX > x ? -1 : 1; } if (currentZ != z) { zChange = currentZ > z ? -1 : 1; } currentX += xChange; targetX = xChange; currentZ += zChange; targetZ = zChange; if (currentX == x && currentZ == z) { state = RabbitState.Eating; if (Mathf.Abs(targetZ) == 1 && Mathf.Abs(targetX) == 1) { targetX = 0; } } else { previousHopPoint = transform.position; targetHopPoint = ecosystem.terrainManager.terrain[currentX, currentZ] + Vector3.up * 0.5f; currentlyHopping = true; } }
void EatFlower() { eatTimer += Time.deltaTime; if (eatTimer > 1) { hunger -= hungerLossOnEat; state = RabbitState.Searching; eatTimer = 0; if (!ecosystem.resourcesToRemove.Contains(targetFlower) && targetFlower) { ecosystem.resourcesToRemove.Add(targetFlower); } } }
void SetState(bool move, bool mine, bool attack) { if (move) { currentState = RabbitState.Move; } else if (mine) { currentState = RabbitState.Mine; } else if (attack) { currentState = RabbitState.Attack; } }
void IncreaseHunger() { hungerTimer += Time.deltaTime; if (hungerTimer > hungerIncreaseRate) { hungerTimer = 0; hunger++; } if (hunger >= 100) { state = RabbitState.Dying; } }
private void OnTriggerEnter2D(Collider2D other) { if (other.gameObject.tag == "Spike") { rabbitState = RabbitState.dead; StopCoroutine("RunCoroutine"); alive = false; anim.SetTrigger("die"); ScreenShake.instance.ShakeFixed(0.3f, 0.05f); psDead.gameObject.SetActive(true); //Wwise Stukje AkSoundEngine.PostEvent("Rabbit_Dead", gameObject); StartCoroutine(DieCoroutine()); } }
/* * Public Functions */ public void Init(RoodkapjeManager manager, Vector3 pos, Quaternion rot) { this.manager = manager; GetComponentInChildren <Renderer>().enabled = true; GetComponent <Collider>().enabled = true; GetComponent <NavMeshAgent>().enabled = true; transform.position = pos; transform.rotation = rot; State = RabbitState.Idle; fleeRadius = manager.fleeRadius; safeRadius = manager.safeRadius; startleTime = Random.Range(0.25f, 0.5f); }
void Mate() { mateTimer += Time.deltaTime; if (mateTimer > 1) { if (!gender) { CreateOffSpring(ecosystem.rabbit); } mateTimer = 0; reproduction = 0; state = RabbitState.FoodSearching; mate = null; } }
// Update is called once per frame void Update() { try { if (queuedLayers == null || queuedLayers.Count == 0) { queuedLayers.Add((int)RabbitState.Move); // default state } else { queuedLayers.Sort(); // Ascending order sort, Sorts according to highest priority (0 = highest priority) if (queuedLayers[0] == (int)RabbitState.Move) // index 0 will have lowest value after sort { // Call move function currentState = RabbitState.Move; Move(); print("Move"); } else if (queuedLayers[0] == (int)RabbitState.Mine) { // Call mine function currentState = RabbitState.Mine; Mine(); print("Mine"); } else if (queuedLayers[0] == (int)RabbitState.Attack) { // Call attack function currentState = RabbitState.Attack; Attack(); print("Attack"); } queuedLayers.RemoveAt(0); // Remove the highest priority action after execution // may need to change the position of this } } catch (System.IndexOutOfRangeException e) { throw new System.ArgumentOutOfRangeException("index parameter is out of range.", e); } if (GetComponent <RabbitProperties>().health <= 0) { Destroy(this.gameObject); } }
//Runs each frame private void CheckStateTransitions() { if (rabbitState == RabbitState.idle) { if (isInPlayerRange) { Run(); } } else if (rabbitState == RabbitState.running) { if (isRunning == false) { rabbitState = RabbitState.idle; goRun = true; } } }
void OnTriggerStay(Collider other) { if (!wolfToFleeFrom && state != RabbitState.Dying) { if (other.gameObject.CompareTag("wolf") && !other.isTrigger) { state = RabbitState.Fleeing; wolfToFleeFrom = other.gameObject.GetComponent <Wolf>(); } } if (!targetFlower && state != RabbitState.Fleeing) { if (other.gameObject.CompareTag("flower")) { targetFlower = other.gameObject.GetComponent <Flower>(); state = RabbitState.Targeting; } } }
private float tState; // Timer variable for state events /* * Built-in Functions */ void Start() { GetComponent <Renderer>().material = materials[Random.Range(0, materials.Length)]; wolf = FindObjectOfType <Wolf>(); agent = GetComponent <NavMeshAgent>(); /*voice = gameObject.AddComponent<AudioSource>(); * voice.playOnAwake = false; * voice.pitch = Random.Range(0.85f, 1.25f); * voice.spatialBlend = 1;*/ feet = gameObject.AddComponent <AudioSource>(); feet.playOnAwake = false; feet.pitch = Random.Range(0.85f, 1.15f); feet.spatialBlend = 1; State = RabbitState.Idle; }
/// <summary> /// Applies the impulse. /// </summary> public void ApplyImpulse() { if (this.state == RabbitState.dead || this.state == RabbitState.dying) { return; } // Position this.position.X = Transform.X; this.position.Y = Transform.Y; Vector2 direction = this.position - this.moonPosition; float distanceLenghtSquare = direction.LengthSquared(); direction.Normalize(); //this.velocity += Utils.RotateVectorAroundPoint(direction * 5000 / distanceLenghtSquare, this.moonPosition, 30); this.velocity += Utils.RotateVectorAroundPoint(direction * 5000 / distanceLenghtSquare, this.moonPosition, 30); this.State = RabbitState.afloat; }
void OnTriggerStay(Collider other) { if (!wolfToFleeFrom && state != RabbitState.Dying) { if (other.gameObject.CompareTag("wolf") && !other.isTrigger) { state = RabbitState.Fleeing; wolfToFleeFrom = other.gameObject.GetComponent <Wolf>(); } } if (!targetFlower && state != RabbitState.Fleeing) { if (other.gameObject.CompareTag("flower")) { targetFlower = other.gameObject.GetComponent <Flower>(); state = RabbitState.FoodTargeting; } } if (state == RabbitState.MateSearching) { if (other.gameObject.CompareTag("rabbit")) { //Generates garbage Rabbit r = other.gameObject.GetComponent <Rabbit>(); if (r.state == RabbitState.MateSearching && gender != r.gender) { mate = r; state = RabbitState.MateTargeting; r.mate = this; r.state = RabbitState.MateTargeting; } } } }
//------------------------------------------------------------------------ void ChasingUpdate() { if( target != null ) { agent.SetDestination( target.position ); } else { if( Vector3.Distance( trans.position, agent.destination ) < agent.stoppingDistance + nextWaypointOffset ) { state = RabbitState.idle; MoveToNextWaypoint(); } } }
/// <summary> /// Allows this instance to execute custom logic during its <c>Update</c>. /// </summary> /// <param name="gameTime">The game time.</param> /// <remarks> /// This method will not be executed if the <see cref="T:WaveEngine.Framework.Component" />, or the <see cref="T:WaveEngine.Framework.Entity" /> /// owning it are not <c>Active</c>. /// </remarks> protected override void Update(TimeSpan gameTime) { // Position this.position.X = Transform.X; this.position.Y = Transform.Y; Vector2 distance = this.moonPosition - this.position; float distanceSquare = distance.LengthSquared(); // CheckCollision float force = this.moonForce * ((this.moonMass * this.mass) / distanceSquare); distance.Normalize(); this.velocity += distance * force; this.position += this.velocity * (float)gameTime.TotalMilliseconds; Vector2 newDistance = this.moonPosition - this.position; float newDistanceLength = newDistance.Length(); if (newDistanceLength < this.moonRadio) { this.velocity = Vector2.Zero; switch (this.state) { case RabbitState.afloat: this.State = RabbitState.still; break; case RabbitState.dying: this.State = RabbitState.dead; break; } } else if (newDistanceLength > this.gravityRadio) { this.State = RabbitState.dying; } else { this.Transform.X = this.position.X; this.Transform.Y = this.position.Y; } // Rotation if (this.state == RabbitState.dying) { this.Transform.Rotation += (float)gameTime.TotalMilliseconds / 250; } else { float angle = Vector2.Angle(this.initialDirection, distance); this.Transform.Rotation = -angle; } // Still Time if (this.state == RabbitState.still) { this.stillTime += gameTime; if (this.stillTime > TimeSpan.FromSeconds(3)) { this.State = RabbitState.dead; } } else { this.stillTime = TimeSpan.Zero; } }
public void JumpFromBirth() { _rabbitState = RabbitState.Born; //returns like 1,1,1 Vector3 movementVector3 = GameManager.Instance.GetRandomMovementVectorWithinGameBounds(); JumpNormal (movementVector3); StartCoroutine (JumpFromBirth_Coroutine()); }
public IEnumerator JumpFromBirth_Coroutine() { yield return new WaitForSeconds (2); _rabbitState = RabbitState.Baby; }
//---------------------------------------------------------------------------- // Private methods //---------------------------------------------------------------------------- /// <summary> /// We handle collision from positionVector to positionVector by distance. /// It is better for gameplay than Colliders. /// </summary> private IEnumerator RabbitCollisionDetection_Coroutine() { while (true) { yield return new WaitForSeconds (_DELAY_BETWEEN_COLLISION_DETECTION); float distance; Debug.Log ("FOR: "); foreach (GameObject nextGameObject in GameManager.Instance.CurrentGameLevel.GameObjects) { //TODO: Remove this bug. Somehow the list of gameobjects has null (from a recent failed removal?) if (nextGameObject == null) { continue; } if (nextGameObject != gameObject) { Debug.Log ("\tgameobject: " + gameObject); Debug.Log ("\tnextGameObject: " + nextGameObject); distance = Vector3.Distance (transform.position, nextGameObject.transform.position); if (distance < _MINIMUM_DISTANCE_FOR_COLLISION) { //KEEP //Debug.Log ("\td: " + distance + " between " + transform.name + " & " + nextGameObject.name); if (nextGameObject.GetComponent<Carrot>() != null) { GameManager.Instance.CurrentGameLevel.RemoveGameObject (nextGameObject); _spriteAnimator.SetTrigger (_EAT_TRIGGER); _rabbitState = RabbitState.Adult; _isEating = true; break; } else if (_rabbitState == RabbitState.Adult && nextGameObject.GetComponent<Rabbit>() != null && nextGameObject.GetComponent<Rabbit>()._rabbitState == RabbitState.Adult) { GameObject makingLoveGameObject = GameManager.Instance.CurrentGameLevel.InstantiatePrefabType (PrefabType.MakingLove, 0); makingLoveGameObject.transform.position = gameObject.transform.position; GameManager.Instance.CurrentGameLevel.RemoveGameObject (nextGameObject); GameManager.Instance.CurrentGameLevel.RemoveGameObject (gameObject); break; } else if ( nextGameObject.GetComponent<Trap>()) { //Make blood splatter //GameObject makingLoveGameObject = GameManager.Instance.CurrentGameLevel.InstantiatePrefabType (PrefabType.MakingLove, 0); nextGameObject.GetComponent<Trap>().CloseTrapOnRabbit(); GameManager.Instance.CurrentGameLevel.RemoveGameObject (gameObject); break; } } } } } }
//---------------------------------------------------------------------------- // Public methods //---------------------------------------------------------------------------- public void SetInstantlyAsAdult() { _rabbitState = RabbitState.Adult; }
//------------------------------------------------------------------------ void OnEnterInteractive(GameObject _go) { if( _go.CompareTag("Player") ) { state = RabbitState.attacking; ActivateInteraction(); } }
/* * Built-in Functions */ void Start() { GetComponent<Renderer>().material = materials[Random.Range(0, materials.Length)]; wolf = FindObjectOfType<Wolf>(); agent = GetComponent<NavMeshAgent>(); /*voice = gameObject.AddComponent<AudioSource>(); voice.playOnAwake = false; voice.pitch = Random.Range(0.85f, 1.25f); voice.spatialBlend = 1;*/ feet = gameObject.AddComponent<AudioSource>(); feet.playOnAwake = false; feet.pitch = Random.Range(0.85f, 1.15f); feet.spatialBlend = 1; State = RabbitState.Idle; }
void Update() { wolfPos = wolf.transform.position; _distance = Vector3.Distance(wolfPos, transform.position); if (_distance > manager.safeRadius) return; switch (State) { case RabbitState.Idle: if (_distance <= fleeRadius) // Dat konijn ook: ziet hij je niet van voren, dan hoort hij je wel met zijn oren. { State = RabbitState.Startled; //voice.PlayOneShot(gasps[Random.Range(0, gasps.Length)], 1.5f); } else if (tState >= Random.Range(2, 4)) { agent.SetDestination(transform.position + new Vector3(Random.Range(-5, 5), 0, Random.Range(-5, 5))); } break; case RabbitState.Startled: if (tState >= startleTime) { State = RabbitState.Flee; //voice.clip = whimpers[Random.Range(0, whimpers.Length)]; //voice.Play(); } break; case RabbitState.Flee: agent.SetDestination(transform.position + (transform.position - wolfPos) / _distance * safeRadius); if (_distance >= safeRadius) { agent.SetDestination(transform.position); State = RabbitState.Idle; } /*if (!feet.isPlaying) { feet.clip = walks[Random.Range(0, walks.Length)]; feet.Play(); } if (!voice.isPlaying && tState % 4 < Time.deltaTime) { voice.clip = whimpers[Random.Range(0, whimpers.Length)]; voice.Play(); }*/ break; case RabbitState.Dead: if (tState == 0) { GetComponentInChildren<Renderer>().enabled = false; GetComponent<Collider>().enabled = false; GetComponent<NavMeshAgent>().enabled = false; manager.BloodLevel += 2; for (int i = 0; i < gibs.Length; i++) { GameObject g = (GameObject)Instantiate(gibs[i], gibPositions[i] + transform.position, transform.rotation); } /*voice.clip = shrieks[Random.Range(0, shrieks.Length)]; voice.Play();*/ feet.clip = gore[Random.Range(0, gore.Length)]; feet.Play(); Instantiate(roodKwakje, transform.position, Quaternion.identity); // Want mathijs wilde meer impact voor een ontploffende roodkap } //if (!voice.isPlaying) State = RabbitState.Destroy; break; case RabbitState.Destroy: break; } tState += Time.deltaTime; }
/* * Public Functions */ public void Init(RoodkapjeManager manager, Vector3 pos, Quaternion rot) { this.manager = manager; GetComponentInChildren<Renderer>().enabled = true; GetComponent<Collider>().enabled = true; GetComponent<NavMeshAgent>().enabled = true; transform.position = pos; transform.rotation = rot; State = RabbitState.Idle; fleeRadius = manager.fleeRadius; safeRadius = manager.safeRadius; startleTime = Random.Range(0.25f, 0.5f); }
//------------------------------------------------------------------------ void OnEnterSight(GameObject _go) { if( _go.CompareTag("Player") ) { state = RabbitState.chasing; target = _go.transform; } }
void Update() { wolfPos = wolf.transform.position; _distance = Vector3.Distance(wolfPos, transform.position); if (_distance > manager.safeRadius) { return; } switch (State) { case RabbitState.Idle: if (_distance <= fleeRadius) // Dat konijn ook: ziet hij je niet van voren, dan hoort hij je wel met zijn oren. { State = RabbitState.Startled; //voice.PlayOneShot(gasps[Random.Range(0, gasps.Length)], 1.5f); } else if (tState >= Random.Range(2, 4)) { agent.SetDestination(transform.position + new Vector3(Random.Range(-5, 5), 0, Random.Range(-5, 5))); } break; case RabbitState.Startled: if (tState >= startleTime) { State = RabbitState.Flee; //voice.clip = whimpers[Random.Range(0, whimpers.Length)]; //voice.Play(); } break; case RabbitState.Flee: agent.SetDestination(transform.position + (transform.position - wolfPos) / _distance * safeRadius); if (_distance >= safeRadius) { agent.SetDestination(transform.position); State = RabbitState.Idle; } /*if (!feet.isPlaying) * { * feet.clip = walks[Random.Range(0, walks.Length)]; * feet.Play(); * } * * if (!voice.isPlaying && tState % 4 < Time.deltaTime) * { * voice.clip = whimpers[Random.Range(0, whimpers.Length)]; * voice.Play(); * }*/ break; case RabbitState.Dead: if (tState == 0) { GetComponentInChildren <Renderer>().enabled = false; GetComponent <Collider>().enabled = false; GetComponent <NavMeshAgent>().enabled = false; manager.BloodLevel += 2; for (int i = 0; i < gibs.Length; i++) { GameObject g = (GameObject)Instantiate(gibs[i], gibPositions[i] + transform.position, transform.rotation); } /*voice.clip = shrieks[Random.Range(0, shrieks.Length)]; * voice.Play();*/ feet.clip = gore[Random.Range(0, gore.Length)]; feet.Play(); Instantiate(roodKwakje, transform.position, Quaternion.identity); // Want mathijs wilde meer impact voor een ontploffende roodkap } //if (!voice.isPlaying) State = RabbitState.Destroy; break; case RabbitState.Destroy: break; } tState += Time.deltaTime; }