示例#1
0
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);
    }
}
示例#2
0
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);
	}
}
示例#3
0
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);
}