Esempio n. 1
0
 public void escape_player(Message m)
 {
     playerTransform = m.MessageSource.transform;
     if (m.MessageValue == gameObject.transform.name)
     {
         mySwarmState = SwarmState.Escaping_player;
     }
 }
Esempio n. 2
0
    // Update is called once per frame
    void Update()
    {
        myTransform.position = prev_pos;

        switch (mySwarmState)
        {
        case SwarmState.Wandering_around:
        {
            WanderAround();

            UpdatePosition();
        }
        break;

        case SwarmState.Moving_away_player:
        {
            MoveAwayFromPlayers();

            UpdatePosition();
        }
        break;

        case SwarmState.Chasing_player:
        {
            myTransform.rotation  = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);
            myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
        }
        break;

        case SwarmState.Escaping_player:
        {
            transform.rotation    = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(myTransform.position - playerTransform.position), 0.001f * Time.deltaTime);
            myTransform.position -= myTransform.forward * 1 * Time.deltaTime;

            timer += Time.deltaTime;

            if (timer > escaping_time)
            {
                mySwarmState = SwarmState.Wandering_around;
                timer        = 0;
            }
        }
        break;
        }

        prev_pos = myTransform.position;

        move.x              = 0;
        move.y              = 0.008f + amplitude * (Mathf.Sin(2 * Mathf.PI * frequency * Time.time) - Mathf.Sin(2 * Mathf.PI * frequency * (Time.time - Time.deltaTime)));
        move.z              = 0;
        transform.position += move * 5 * Time.deltaTime;

        transform.position = new Vector3(Mathf.Clamp(transform.position.x, -3, 3),
                                         Mathf.Clamp(transform.position.y, downlimit, uplimit),
                                         Mathf.Clamp(transform.position.z, -3, 3));

        myTransform.Rotate(new Vector3(-transform.eulerAngles.x, 0, -transform.eulerAngles.z));
    }
Esempio n. 3
0
    private void WanderAround()
    {
        if ((player1.position - myTransform.position).sqrMagnitude < distanceToPlayers * distanceToPlayers || counterNextPlayer1 != 0)
        {
            mySwarmState       = SwarmState.Moving_away_player;
            counterNextPlayer1 = 0f;
        }
        else
        {
            if ((player2.position - myTransform.position).sqrMagnitude < distanceToPlayers * distanceToPlayers || counterNextPlayer2 != 0)
            {
                mySwarmState       = SwarmState.Moving_away_player;
                counterNextPlayer2 = 0f;
            }
            else
            {
                tiempo += Time.deltaTime;

                if (transform.localPosition.x > xMax)
                {
                    x      = Random.Range(-speedMax, speedMin);
                    angulo = Mathf.Atan2(x, z) * (180 / 3.141592f) + 90;
                    transform.localRotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, angulo, 0), 0.0001f * Time.deltaTime);
                    tiempo = 0.0f;
                }
                if (transform.localPosition.x < xMin)
                {
                    x      = Random.Range(speedMin, speedMax);
                    angulo = Mathf.Atan2(x, z) * (180 / 3.141592f) + 90;
                    transform.localRotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, angulo, 0), 0.0001f * Time.deltaTime);
                    tiempo = 0.0f;
                }
                if (transform.localPosition.z > zMax)
                {
                    z      = Random.Range(-speedMax, speedMin);
                    angulo = Mathf.Atan2(x, z) * (180 / 3.141592f) + 90;
                    transform.localRotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, angulo, 0), 0.0001f * Time.deltaTime);
                    tiempo = 0.0f;
                }
                if (transform.localPosition.z < zMin)
                {
                    z      = Random.Range(speedMin, speedMax);
                    angulo = Mathf.Atan2(x, z) * (180 / 3.141592f) + 90;
                    transform.localRotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, angulo, 0), 0.0001f * Time.deltaTime);
                    tiempo = 0.0f;
                }

                if (tiempo > 5.0f)
                {
                    x      = Random.Range(-speedMax, speedMax);
                    z      = Random.Range(-speedMax, speedMax);
                    angulo = Mathf.Atan2(x, z) * (180 / 3.141592f) + 90;
                    transform.localRotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, angulo, 0), 0.0001f * Time.deltaTime);
                    tiempo = 0.0f;
                }
            }
        }
    }
Esempio n. 4
0
 void Update()
 {
     if (behaviour.Exit())
     {
         foreach (SwarmBase state in states)
         {
             if (state.Enter())
             {
                 behaviour = state;
                 stateType = behaviour.stateType;
             }
         }
     }
     behaviour.Run();
 }
Esempio n. 5
0
    protected override void OnStart()
    {
        GameObject go = GameObject.FindGameObjectWithTag("Player");

        target = go.transform;

        x      = Random.Range(-speedMax, speedMax);
        z      = Random.Range(-speedMax, speedMax);
        angulo = Mathf.Atan2(x, z) * (180 / 3.141592f) + 90;
        transform.localRotation = Quaternion.Euler(0, angulo, 0);

        prev_pos = myTransform.position;

        mySwarmState = SwarmState.Wandering_around;

        Messenger.RegisterListener(new Listener("Insect_catched_player1", gameObject, "escape_player"));
        Messenger.RegisterListener(new Listener("Insect_catched_player2", gameObject, "escape_player"));
    }
Esempio n. 6
0
 private void MoveAwayFromPlayers()
 {
     if ((player1.position - myTransform.position).sqrMagnitude < distanceToPlayers * distanceToPlayers || counterNextPlayer1 != 0)
     {
         if (counterNextPlayer1 == 0)
         {
             float length = Vector3.Distance(transform.position, player1.position);
             x  = (transform.position.x - player1.position.x) / length;
             x *= speedMax;
             z  = (transform.position.z - player1.position.z) / length;
             z *= speedMax;
         }
         counterNextPlayer1 += Time.deltaTime;
         if (counterNextPlayer1 > waitingNextToPlayer)
         {
             counterNextPlayer1 = 0.0f;
         }
     }
     else
     {
         if ((player2.position - myTransform.position).sqrMagnitude < distanceToPlayers * distanceToPlayers || counterNextPlayer2 != 0)
         {
             if (counterNextPlayer2 == 0)
             {
                 float length = Vector3.Distance(transform.position, player2.position);
                 x  = (transform.position.x - player2.position.x) / length;
                 x *= speedMax;
                 z  = (transform.position.z - player2.position.z) / length;
                 z *= speedMax;
             }
             counterNextPlayer2 += Time.deltaTime;
             if (counterNextPlayer2 > waitingNextToPlayer)
             {
                 counterNextPlayer2 = 0.0f;
             }
         }
         else
         {
             mySwarmState = SwarmState.Wandering_around;
             timer        = 0f;
         }
     }
 }
Esempio n. 7
0
 void Start()
 {
     controller = GetComponent <SwarmerController>();
     stateType  = SwarmState.ERROR;
 }
Esempio n. 8
0
        public override void CheckRange(Player player, GameTime gameTime)
        {
            if (State == SwarmState.MovingToDestination)
            return;

              // Get aggro
              if (!IsAggro && gameTime.TotalGameTime - LastAttack > AttackCooldown)
              {
            float distSqr = Vector2.DistanceSquared(player.Position, Position);

            if (distSqr < AggroRange * AggroRange)
            {
              IsAggro = true;
              Player = player;
            }
              }

              // If center point is over player
              if (player.Hitbox.Over(Position))
              {
            Game1.EventMan.Notify(Events.PlayerSwarmedBySwarm, this);
            State = SwarmState.Attacking;
              }
        }
Esempio n. 9
0
 void MoveTo(Vector2 destination)
 {
     Destination = destination;
       State = SwarmState.MovingToDestination;
 }
Esempio n. 10
0
        public override void Update(GameTime gameTime)
        {
            //float timeDelta = (float)gameTime.ElapsedGameTime.TotalSeconds;

              if (State == SwarmState.MovingToDestination)
              {
            if (Vector2.Distance(Position, Destination) < 10)
            {
              State = SwarmState.Neutral;
              Velocity = Vector2.Zero;
              LastAttack = gameTime.TotalGameTime;
            }
            else
            {
              double angle = Math.Atan2(Destination.Y - Position.Y, Destination.X - Position.X);

              Velocity.X = (float)Math.Cos(angle) * SwarmSpeed;
              Velocity.Y = (float)Math.Sin(angle) * SwarmSpeed;
            }
              }
              else if (IsAggro)
              {
            Point playerCenter = Player.Hitbox.Center;
            double angle = Math.Atan2(playerCenter.Y - Position.Y, playerCenter.X - Position.X);
            DrawInFront = true;

            Velocity.X = (float)Math.Cos(angle) * SwarmSpeed;
            Velocity.Y = (float)Math.Sin(angle) * SwarmSpeed;
              }
              else
              {
            DrawInFront = false;
              }

              //Position.X += Velocity.X * timeDelta;
              //Position.Y += Velocity.Y * timeDelta;

              foreach (var item in Flies)
            item.UpdatePosition(Position);

              UpdateMovement(gameTime);
        }
    // Update is called once per frame
    void Update()
    {
        switch (mySwarmState)
        {
        case SwarmState.Idle:

            if (Vector3.Distance(my_user.position, myTransform.position) > 0.2)
            {
                mySwarmState = SwarmState.Following_user;
            }

            break;

        case SwarmState.Following_user:

            if (Vector3.Distance(my_user.position, myTransform.position) < 0.007)
            {
                mySwarmState = SwarmState.Idle;
            }
            else
            {
                //myTransform.rotation = Quaternion.Slerp (myTransform.rotation, Quaternion.LookRotation (my_user.position - myTransform.position), 80 * Time.deltaTime);
                myTransform.position = my_user.position;                //myTransform.forward * moveSpeed * Time.deltaTime;
            }

            break;

        case SwarmState.Guiding_hunter_to_other_user:

            if (Vector3.Distance(my_user.position, myTransform.position) < 5)
            {
                myTransform.rotation  = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(other_user.position - myTransform.position), rotationSpeed * Time.deltaTime);
                myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
            }

            timer += Time.deltaTime;

            if (timer > pasivetime2)
            {
                mySwarmState = SwarmState.Guiding_hunter_to_other_insects;
                timer        = 0;
            }

            break;

        case SwarmState.Guiding_hunter_to_other_insects:

            if (Vector3.Distance(my_user.position, myTransform.position) < 4)
            {
                myTransform.rotation  = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(other_insects.position - myTransform.position), rotationSpeed * Time.deltaTime);
                myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
            }

            timer += Time.deltaTime;

            if (timer > pasivetime3)
            {
                mySwarmState = SwarmState.Following_user;
                timer        = 0;
            }

            break;
        }

        myTransform.position = new Vector3(myTransform.position.x, insectsHeight, myTransform.position.z);

        myTransform.Rotate(new Vector3(-transform.eulerAngles.x, 0, -transform.eulerAngles.z));
    }
 // Use this for initialization
 void OnStart()
 {
     mySwarmState = SwarmState.Idle;
 }