コード例 #1
0
        private static Matrix4x4 ApplyRandomTransform(
            TilingRule.Transform type,
            Matrix4x4 original,
            float perlinScale,
            Vector3Int position)
        {
            var perlin = GetPerlinValue(position, perlinScale, 200000f);

            switch (type)
            {
            case TilingRule.Transform.MirrorX:
                return(original * Matrix4x4.TRS(
                           Vector3.zero,
                           Quaternion.identity,
                           new Vector3(perlin < 0.5 ? 1f : -1f, 1f, 1f)));

            case TilingRule.Transform.MirrorY:
                return(original * Matrix4x4.TRS(
                           Vector3.zero,
                           Quaternion.identity,
                           new Vector3(1f, perlin < 0.5 ? 1f : -1f, 1f)));

            case TilingRule.Transform.Rotated:
                var angle = Mathf.Clamp(Mathf.FloorToInt(perlin * 4), 0, 3) * 90;
                return(Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0f, 0f, -angle), Vector3.one));
            }
            return(original);
        }
コード例 #2
0
ファイル: RuleTilePlus.cs プロジェクト: BLumbye/Underworld
        /// <summary>
        /// Returns a random transform matrix given the random transform rule.
        /// </summary>
        /// <param name="type">Random transform rule.</param>
        /// <param name="original">The original transform matrix.</param>
        /// <param name="perlinScale">The Perlin Scale factor of the Tile.</param>
        /// <param name="position">Position of the Tile on the Tilemap.</param>
        /// <returns>A random transform matrix.</returns>
        public virtual Matrix4x4 ApplyRandomTransform(TilingRule.Transform type, Matrix4x4 original, float perlinScale, Vector3Int position)
        {
            float perlin = GetPerlinValue(position, perlinScale, 200000f);

            switch (type)
            {
            case TilingRule.Transform.MirrorXY:
                return(original * Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(Math.Abs(perlin - 0.5) > 0.25 ? 1f : -1f, perlin < 0.5 ? 1f : -1f, 1f)));

            case TilingRule.Transform.MirrorX:
                return(original * Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(perlin < 0.5 ? 1f : -1f, 1f, 1f)));

            case TilingRule.Transform.MirrorY:
                return(original * Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(1f, perlin < 0.5 ? 1f : -1f, 1f)));

            case TilingRule.Transform.Rotated:
                int angle = Mathf.Clamp(Mathf.FloorToInt(perlin * m_RotationCount), 0, m_RotationCount - 1) * m_RotationAngle;
                return(Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0f, 0f, -angle), Vector3.one));
            }
            return(original);
        }
コード例 #3
0
 public MenuItemData(TilingRule mRule, TilingRule.Transform mNewValue)
 {
     this.m_Rule     = mRule;
     this.m_NewValue = mNewValue;
 }