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(); } }
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_; }