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); }
/// <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); }
public MenuItemData(TilingRule mRule, TilingRule.Transform mNewValue) { this.m_Rule = mRule; this.m_NewValue = mNewValue; }