企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
## Target类 在Ship类中,还内置了一个Target类。 在SE中摄像头射线扫描、探测器、自动武器等获取目标的手段都是返回一个MyDetectedEntityInfo类型的变量,它里面挂载了目标坐标、射线碰撞点等多个信息,但这些信息的类型比较乱,而且它没有内置的方法来处理这些信息。 因此这里特意封装了一个Target类来储存它,并且在Ship类中扫描、追踪等方法里都统一使用这个类,而不使用默认的MyDetectedEntityInfo。 在Target类中,MyDetectedEntityInfo作为一个成员属性也封装在了里面,在使用的时候非常方便。 这个类比较简单,就不做过多介绍了。 ``` //在访问class里的class时,使用这个方法 void Main(){ Ship.Target MyTarget = new Ship.Target(); } public class Ship { public class Target { public string Name; //名字 public long EntityId; //唯一ID,当这个值为0可判断该Target是空的 public double Diameter; //半径 public int TimeStamp; //记录时间戳、基于Ship类中的timetick的值来记录 public Vector3D Position; public Vector3D Velocity; public Vector3D Acceleration; public Vector3D HitPosition; public MatrixD Orientation; public Vector3D AccurateLockPositionToTarget; public MyDetectedEntityInfo EntityInfo; public Target(){ this.EntityId = 0; this.TimeStamp = 0; this.EntityInfo = new MyDetectedEntityInfo(); } public Target(MyDetectedEntityInfo thisEntity){ this.EntityId = thisEntity.EntityId; this.Name = thisEntity.Name; this.Diameter = Vector3D.Distance(thisEntity.BoundingBox.Max, thisEntity.BoundingBox.Min)/2; Vector3D.TryParse(thisEntity.Position.ToString(), out this.Position); Vector3D.TryParse(thisEntity.Velocity.ToString(), out this.Velocity); Vector3D.TryParse(thisEntity.HitPosition.ToString(), out this.HitPosition); this.Acceleration = new Vector3D(); this.Orientation = thisEntity.Orientation; this.TimeStamp = Ship.timetick; this.EntityInfo = thisEntity; } public void UpdatePhysical(MyDetectedEntityInfo NewInfo){ this.Diameter = Vector3D.Distance(NewInfo.BoundingBox.Max, NewInfo.BoundingBox.Min)/2; Vector3D.TryParse(NewInfo.Position.ToString(), out this.Position); Vector3D.TryParse(NewInfo.HitPosition.ToString(), out this.HitPosition); Vector3D velocity = new Vector3D(); Vector3D.TryParse(NewInfo.Velocity.ToString(), out velocity); this.Acceleration = (velocity - this.Velocity)*60/(Ship.timetick - this.TimeStamp > 0 ? Ship.timetick - this.TimeStamp : 1); this.Velocity = velocity; this.Orientation = NewInfo.Orientation; this.TimeStamp = Ship.timetick; this.EntityInfo = NewInfo; } public void UpdatePhysical(Target _T){ this.UpdatePhysical(_T.EntityInfo); } public bool IsEmpty(){ return this.EntityId == 0; } } } ```