地图组件和ECS框架完成
This commit is contained in:
90
lib/ecs/component.dart
Normal file
90
lib/ecs/component.dart
Normal 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,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user