地图组件和ECS框架完成

This commit is contained in:
2026-01-13 15:39:45 +08:00
parent 9d45d4c726
commit 566ec47a73
24 changed files with 17072 additions and 66 deletions

90
lib/ecs/component.dart Normal file
View File

@@ -0,0 +1,90 @@
import 'package:flutter/material.dart';
import 'package:maplibre_gl/maplibre_gl.dart';
import 'entity.dart';
/// 组件基类 - 代表实体的属性
abstract class Component {
final String id;
Entity? entity;
Component({String? id}) : id = id ?? "${DateTime.now().millisecondsSinceEpoch}";
}
/// 标绘组件 - 用于在地图上绘制图形
class PlotComponent extends Component {
final String plotType;
final List<LatLng> coordinates;
final Color color;
final double strokeWidth;
PlotComponent({
super.id,
required this.plotType,
required this.coordinates,
this.color = Colors.red,
this.strokeWidth = 2.0,
});
}
/// 图标组件 - 用于在地图上显示图标
class IconComponent extends Component {
final String iconPath;
LatLng position;
final double size;
IconComponent({
super.id,
required this.iconPath,
required this.position,
this.size = 30.0,
});
}
/// 拖尾组件 - 用于显示移动实体的轨迹
class TrailComponent extends Component {
final List<LatLng> trailPoints;
final Color trailColor;
final double maxLength;
TrailComponent({
super.id,
List<LatLng>? trailPoints,
this.trailColor = Colors.blue,
this.maxLength = 20.0,
}) : trailPoints = trailPoints ?? [];
void addPoint(LatLng point) {
trailPoints.add(point);
if (trailPoints.length > maxLength) {
trailPoints.removeAt(0);
}
}
}
/// 音频组件 - 用于播放与实体相关的音频
class AudioComponent extends Component {
final String audioPath;
final bool loop;
final double volume;
AudioComponent({
super.id,
required this.audioPath,
this.loop = false,
this.volume = 1.0,
});
}
/// 移动组件 - 用于控制实体的移动
class MovementComponent extends Component {
LatLng position;
LatLng? target;
double speed;
MovementComponent({
super.id,
required this.position,
this.target,
this.speed = 1.0,
});
}