Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }