Beispiel #1
0
        public static BlockCluster SpawnCluster(Vector3 position)
        {
            BlockCluster blockCluster = SpawnCluster();

            blockCluster.transform.position = position;
            return(blockCluster);
        }
Beispiel #2
0
        protected void RecalculateCluster()
        {
            DbLog.Log(string.Format("Recalculate cluster"), Color.green, this);
            List <Block>         unsortedBlocks     = new List <Block>(attachedBlockList);
            List <List <Block> > newClusterDataList = new List <List <Block> >();

            while (unsortedBlocks.Count > 0)
            {
                newClusterDataList.Add(CalculateCluster(unsortedBlocks));
            }

            if (newClusterDataList.Count != 1)
            {
                foreach (List <Block> cluserData in newClusterDataList)
                {
                    List <Vector3> blockPositions = new List <Vector3>();
                    foreach (Block block in cluserData)
                    {
                        blockPositions.Add(block.transform.position);
                    }
                    Vector3 clusterPosition = VectorUtils.FindCentroid(blockPositions);

                    BlockCluster blockCluster = SpawnCluster(clusterPosition);
                    foreach (Block block in cluserData)
                    {
                        RemoveBlock(block);
                        block.RegisterBlockCluster(blockCluster);
                    }

                    DbLog.Log(string.Format("Create new cluster {0}", blockCluster), Color.green, this);
                }
            }
        }
Beispiel #3
0
 protected virtual void Start()
 {
     if (BlockCluster == null && !isPreview)
     {
         RegisterBlockCluster(BlockCluster.SpawnCluster(transform.position));
     }
 }
Beispiel #4
0
        public static BlockCluster SpawnCluster()
        {
            BlockCluster blockClusterPrefab = Resources.Load <BlockCluster>("Prefabs/Construct/BlockCluster");
            BlockCluster blockCluster       = Instantiate(blockClusterPrefab);

            blockCluster.Init();
            return(blockCluster);
        }
Beispiel #5
0
        public virtual void RegisterBlockCluster(BlockCluster blockCluster)
        {
            if (BlockCluster == blockCluster)
            {
                return;
            }

            BlockCluster = blockCluster;
            BlockCluster.AddBlock(this);
        }
Beispiel #6
0
        public override void Init(Attachment targetAttachment, int baseAttachmentIndex, Vector3 rotation)
        {
            RegisterAttachment(targetAttachment);

            SwitchPreview(false);

            SetPosition(targetAttachment, baseAttachmentIndex, rotation);
            RegisterBlockCluster(BlockCluster.SpawnCluster(transform.position));
            targetAttachment.block.Attach(this);
            OnBlockCreated(this);
        }
Beispiel #7
0
 public override void RegisterBlockCluster(BlockCluster blockCluster)
 {
     base.RegisterBlockCluster(blockCluster);
     AddJointComponent(connectedAttachment);
 }