Beispiel #1
0
        private void AddBlocks()
        {
            Debug.Assert(m_tmpLocationsAndRefBlocks.Count == 0);

            Quaternion rotation;

            foreach (var loc in m_addLocations)
            {
                loc.Orientation.GetQuaternion(out rotation);
                MyCubeGrid.MyBlockLocation blockLocation = new MyCubeGrid.MyBlockLocation(
                    loc.BlockDefinition.Id, loc.Position, loc.Position, loc.Position, rotation, MyEntityIdentifier.AllocateId(), MySession.Static.LocalPlayerId);

                m_tmpLocationsAndRefBlocks.Add(new Tuple <MyCubeGrid.MyBlockLocation, MySlimBlock>(blockLocation, loc.RefBlock));
            }

            foreach (var location in m_tmpLocationsAndRefBlocks)
            {
                var block = m_grid.BuildGeneratedBlock(location.Item1, Vector3I.Zero);
                if (block != null)
                {
                    var compound = block.FatBlock as MyCompoundCubeBlock;
                    if (compound != null)
                    {
                        foreach (var blockInCompound in compound.GetBlocks())
                        {
                            Quaternion q;
                            location.Item1.Orientation.GetQuaternion(out q);
                            MyBlockOrientation r = new MyBlockOrientation(ref q);
                            if (blockInCompound.Orientation == r && blockInCompound.BlockDefinition.Id == location.Item1.BlockDefinition)
                            {
                                block = blockInCompound;
                                break;
                            }
                        }
                    }

                    var refBlock = location.Item2;
                    if (block != null && block.BlockDefinition.IsGeneratedBlock && refBlock != null)
                    {
                        block.SetGeneratedBlockIntegrity(refBlock);
                    }
                }
            }

            m_tmpLocationsAndRefBlocks.Clear();
        }
        private void AddBlocks()
        {
            HashSet <MyCubeGrid.MyBlockLocation> locations = new HashSet <MyCubeGrid.MyBlockLocation>();

            Quaternion rotation;

            foreach (var loc in m_addLocations)
            {
                loc.Orientation.GetQuaternion(out rotation);
                MyCubeGrid.MyBlockLocation blockLocation = new MyCubeGrid.MyBlockLocation(
                    loc.BlockDefinition.Id, loc.Position, loc.Position, loc.Position, rotation, MyEntityIdentifier.AllocateId(), MySession.LocalPlayerId, MySession.LocalCharacter != null ? MySession.LocalCharacter.EntityId : 0);

                locations.Add(blockLocation);
            }

            foreach (var location in locations)
            {
                m_grid.BuildGeneratedBlock(location, Vector3I.Zero);
            }
        }