From 60b35b35ab3fe78bbf74a40446e46067a3554728 Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Thu, 28 Aug 2025 00:25:32 -0400 Subject: [PATCH] feat: Add rotating light so the details of the teapot can be seen --- .../slides/lib/slides/slide_16_models.dart | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/slides/lib/slides/slide_16_models.dart b/packages/slides/lib/slides/slide_16_models.dart index b6f1a84..3a1141f 100644 --- a/packages/slides/lib/slides/slide_16_models.dart +++ b/packages/slides/lib/slides/slide_16_models.dart @@ -1,10 +1,13 @@ import 'dart:async'; +import 'dart:math'; import 'package:flame/game.dart'; +import 'package:flame/geometry.dart'; import 'package:flame_3d/camera.dart'; import 'package:flame_3d/components.dart'; import 'package:flame_3d/model.dart'; import 'package:flame_3d/parser.dart'; +import 'package:flame_3d/resources.dart'; import 'package:flame_3d_workshop_slides/slides/components/slide.dart'; import 'package:flame_3d_workshop_slides/slides/components/slide_game.dart'; import 'package:flame_3d_workshop_slides/slides/components/slide_text.dart'; @@ -39,8 +42,28 @@ class _TeapotModel extends FlameGame { LightComponent.ambient( intensity: 10.0, ), + _RotatingLight(), ModelComponent(model: teapot), ]); return super.onLoad(); } } + +class _RotatingLight extends LightComponent { + double _angle = 0.0; + _RotatingLight() + : super.point( + intensity: 100.0, + position: Vector3(0, _height, 0), + ); + + @override + void update(double dt) { + _angle = (_angle + dt) % tau; + position.setValues(_radius * sin(_angle), _height, _radius * cos(_angle)); + super.update(dt); + } + + static const _radius = 3.0; + static const _height = 0.75; +}