Esempio n. 1
0
        private void SplitAndEat(long tick, Voxel eater, int deltaHealth, Voxel voxel)
        {
            Debug.Assert(voxel.Weight > 0);

            int     weight   = voxel.Weight;
            int     owner    = voxel.Owner;
            Vector3 position = voxel.transform.position;

            m_voxelFactory.Release(voxel);

            for (int i = 0; i < deltaHealth; i++)
            {
                Voxel part = m_voxelFactory.Acquire((int)KnownVoxelTypes.Eatable);

                VoxelAbilities abilities = m_dataController.AllAbilities[m_dataController.PlayerIndex][part.Type];

                part.Owner  = owner;
                part.Weight = weight - 1;
                part.Height = abilities.EvaluateHeight(part.Weight);

                float voxelSideSize = Mathf.Pow(2, weight) * GameConstants.UnitSize;

                Vector3 partPostion = position;

                int   imod4   = i % 4;
                int   imod2   = i % 2;
                float vssDiv4 = voxelSideSize / 4.0f;
                float vssDiv2 = voxelSideSize / 2.0f;
                bool  bx      = (imod4 == 0 || imod4 == 1);
                bool  bz      = (imod2 == 1);
                partPostion.x += bx ? -vssDiv4 : vssDiv4;
                partPostion.z += bz ? -vssDiv4 : vssDiv4;
                partPostion.y += i < 4 ? 0 : vssDiv2; // (bx || !bz) && (!bx || bz) ? 0 : vssDiv2;

                part.transform.position = partPostion;

                eater.BeginEat(part, tick);
            }
        }
        private VoxelData CreateVoxel(Vector3 position, int type, int weight, int height)
        {
            Voxel voxel = m_factory.Acquire(type);

            voxel.transform.position = position;

            VoxelData data = m_factory.InstantiateData(type);

            data.Type = type;

            data.Height     = m_selectedAbilities.VariableHeight ? m_selectedAbilities.ClampHeight(height) : m_selectedAbilities.EvaluateHeight(weight);
            data.Altitude   = Mathf.RoundToInt(position.y / GameConstants.UnitSize);
            data.Weight     = weight;
            data.Owner      = Owner;
            data.Health     = m_selectedAbilities.DefaultHealth;
            data.VoxelRef   = voxel;
            data.Unit       = new VoxelUnitData();
            data.Unit.State = VoxelDataState.Idle;

            voxel.ReadFrom(data);
            voxel.WriteDebugInfo();

            return(data);
        }