private List <AiStartingLocation> ReadStartingLocations(EndianReader reader, long rootAddress, string sectionKey) { var result = new List <AiStartingLocation>(); var blockNode = SquadHierarchy.AiNodes[sectionKey]; var blockRef = new BlockReference(blockNode, reader, rootAddress); var name = OffsetById(blockNode, FieldId.Name); var position = OffsetById(blockNode, FieldId.Position); var rotation = OffsetById(blockNode, FieldId.Rotation); for (int i = 0; i < blockRef.TagBlock.Count; i++) { var loc = new AiStartingLocation(this, blockRef, i, sectionKey); var baseAddress = blockRef.TagBlock.Pointer.Address + blockRef.BlockSize * i; reader.Seek(baseAddress + name, SeekOrigin.Begin); loc.Name = reader.ReadObject <StringId>(); reader.Seek(baseAddress + position, SeekOrigin.Begin); loc.Position = reader.ReadObject <RealVector3D>(); reader.Seek(baseAddress + rotation, SeekOrigin.Begin); loc.Rotation = reader.ReadObject <RealVector3D>(); result.Add(loc); } return(result); }
private void BindStartLocation(AiStartingLocation pos, Helix.Element3D model) { var binding = new MultiBinding { Converter = EulerTransformConverter.Instance, Mode = BindingMode.TwoWay }; binding.Bindings.Add(new Binding(nameof(AiStartingLocation.Position)) { Mode = BindingMode.TwoWay }); binding.Bindings.Add(new Binding(nameof(AiStartingLocation.Rotation)) { Mode = BindingMode.TwoWay }); model.DataContext = pos; BindingOperations.SetBinding(model, Helix.Element3D.TransformProperty, binding); }