void GameState::OnUpdate(float time_diff) { if(IsActive()) { Vector2D speed = mSubmarine->GetAbsoluteSpeed(); speed.Rotate(mSubmarine->GetAbsoluteRotation()); float x = 3.f; // move view to where we'll be in x seconds Vector2D target = Vector2D(Input::GetInstance().GetDefaultWindow().GetWidth() / 2, Input::GetInstance().GetDefaultWindow().GetHeight() / 2) - mSubmarine->Position - speed * x; Vector2D diff = target - mScene->Position; mScene->Move(diff * time_diff); mScene->Update(time_diff); } }
void ComponentEnemy::Spawn(const Point2D& worldPosition) { std::shared_ptr<ComponentTransform2D> enemyTransformComponent = m_TransformComponent.lock(); if (enemyTransformComponent != nullptr) { enemyTransformComponent->SetWorldPosition(worldPosition); enemyTransformComponent->UpdateWorldTransform(); } std::shared_ptr<ComponentRigidBody> enemyRigidBodyComponent = m_RigidBodyComponent.lock(); if (enemyRigidBodyComponent != nullptr) { Vector2D direction = Transform2D::k_UpDefault; direction.Rotate((float)(rand() % 360)); enemyRigidBodyComponent->SetVelocity(direction * m_Speed); } }
void Ship::Shoot(const Vector2D &direction, const Resource_Projectile_t &projectile, Vector2D offset) { Projectile *p = (Projectile*)GetGameContext()->CreateEntityNoSpawn("projectile"); Q_ASSERT(p != nullptr); float volume = IsPlayer() ? 0.5f : 0.3f; offset.Rotate(GetAngle()); p->SetOwner(this); p->Teleport(GetOrigin() + offset); p->SetAngle(direction.Angle()); p->Init(projectile, IsPlayer()); p->Launch(direction, volume); if (projectile.fire_rate > 0.0f) shootDelay = GetGameContext()->GetGameTime() + 1.0f / projectile.fire_rate; GetGameContext()->SpawnEntity(p); }