Exemple #1
0
    void UpdateState()
    {
        if (distanceMoved_ > settings_.Range)
        {
            Die();
            return;
        }

        float distance = settings_.Speed * Time.fixedDeltaTime;

        if (bouncesLeft_ > 0)
        {
            bool updateAngle = false;

            // Move X
            Vector3 newPosX = position_;
            newPosX.x += Direction.x * distance;
            if (map_.GetCollisionTileValue(newPosX) != MapBuilder.TileWalkable)
            {
                Direction.x *= -1;
                updateAngle  = true;
            }

            // Move Y
            Vector3 newPosY = position_;
            newPosY.y += Direction.y * distance;
            if (map_.GetCollisionTileValue(newPosY) != MapBuilder.TileWalkable)
            {
                Direction.y *= -1;
                updateAngle  = true;
            }

            if (updateAngle)
            {
                float rotationDegrees = Mathf.Atan2(Direction.x, -Direction.y) * Mathf.Rad2Deg + 180;
                rotation_ = Quaternion.Euler(0, 0, rotationDegrees);
                bouncesLeft_--;
            }
        }

        position_      += Direction * distance;
        distanceMoved_ += distance;
        if (map_.GetCollisionTileValue(position_) != MapBuilder.TileWalkable)
        {
            Die();
            return;
        }

        transform_.SetPositionAndRotation(position_, rotation_);
    }
    void UpdateState()
    {
        if (distanceMoved_ > range_)
        {
            Die();
            return;
        }

        var directionToPlayer = (AiBlackboard.Instance.PlayerPosition - position_).normalized;

        Direction = Vector3.RotateTowards(Direction, directionToPlayer, Time.deltaTime * turnSpeed_, 1.0f);

        float rotationDegrees = Mathf.Atan2(Direction.x, -Direction.y) * Mathf.Rad2Deg;

        transform_.rotation = Quaternion.Euler(0, 0, rotationDegrees + RotationOffset);

        float distance = speed_ * Time.fixedDeltaTime;

        position_      += Direction * distance;
        distanceMoved_ += distance;

        if (collideWalls_ && map_.GetCollisionTileValue(position_) != MapBuilder.TileWalkable)
        {
            Die();
            return;
        }

        transform_.position = position_;
    }
    private void Update()
    {
        float dt    = Time.deltaTime;
        float time  = Time.time;
        var   myPos = transform_.position;

        UpdateFlash(time, expireTime_);

        var   playerPos       = AiBlackboard.Instance.PlayerPosition + Vector3.up * 0.5f;
        var   diff            = playerPos - myPos;
        float attractDistance = CurrentRunData.Instance.PlayerAttractDistance * AttractDistanceMul;
        float sqrDistance     = attractDistance * attractDistance;

        if (diff.sqrMagnitude < sqrDistance && time > throwEndTime_)
        {
            var direction = diff.normalized;
            force_ = direction * AttractPower;
        }

        float forceMagnitude = force_.magnitude;

        if (forceMagnitude > 0.1f)
        {
            var         newPos        = myPos + force_ * dt;
            const float LookAheadSize = 0.5f;
            var         lookAhead     = newPos + force_.normalized * LookAheadSize;
            if (map_.GetCollisionTileValue(lookAhead) == MapBuilder.TileWalkable)
            {
                transform_.position = newPos;
            }

            forceMagnitude -= dt * 2;
            force_          = Vector3.ClampMagnitude(force_, forceMagnitude);
        }

        if (diff.sqrMagnitude < sqrPickupDistance_ && time > throwEndTime_)
        {
            AudioManager.Instance.PlaySfxClip(PickUpSound, 1);
            GameEvents.RaiseAutoPickUp(Type, Value, transform_.position);
            Die();
        }

        if (time > expireTime_)
        {
            Die();
        }
    }
Exemple #4
0
    void UpdateState()
    {
        if (distanceMoved_ > range_)
        {
            Die();
            return;
        }

        float distance = speed_ * Time.fixedDeltaTime;

        position_      += Direction * distance;
        distanceMoved_ += distance;
        if (collideWalls_ && map_.GetCollisionTileValue(position_) != MapBuilder.TileWalkable)
        {
            Die();
            return;
        }

        transform_.position = position_;
    }