Skip to content
ChuanXin-Unity edited this page Jul 8, 2021 · 2 revisions

Welcome to the 2d-extras wiki!

Custom Rules for Rule Tile (Thanks to @johnsoncodehk)

Features

  • Inheritable RuleTile
  • Customizable attributes
  • Can expand or rewrite neighbor rules and GUI display
  • Can be used by RuleOverrideTile
  • Template script (Menu: Assets/Create/Custom Rule Tile Script)
  • Neighbor rules tooltip
  • Backward compatible

Video (Thanks to Vinark117)

How to make Custom Rule Tiles in Unity Video

Usage

  • Custom Attributes:
public class MyTile : RuleTile { public string tileId; public bool isWater; }
  • Custom Rules:
public class MyTile : RuleTile<MyTile.Neighbor> { public class Neighbor { public const int MyRule1 = 0; public const int MyRule2 = 1; } public override bool RuleMatch(int neighbor, TileBase tile) { switch (neighbor) { case Neighbor.MyRule1: return false; case Neighbor.MyRule2: return true; } return true; } }
  • Expansion Rules
public class MyTile : RuleTile<MyTile.Neighbor> { public class Neighbor : RuleTile.TilingRule.Neighbor { // 0, 1, 2 is using in RuleTile.TilingRule.Neighbor public const int MyRule1 = 3; public const int MyRule2 = 4; } public override bool RuleMatch(int neighbor, TileBase tile) { switch (neighbor) { case Neighbor.MyRule1: return false; case Neighbor.MyRule2: return true; } return base.RuleMatch(neighbor, tile); } }
  • Siblings Tile 1
public class MyTile : RuleTile<MyTile.Neighbor> { public List<TileBase> sibings = new List<TileBase>(); public class Neighbor : RuleTile.TilingRule.Neighbor { public const int Sibing = 3; } public override bool RuleMatch(int neighbor, TileBase tile) { switch (neighbor) { case Neighbor.Sibing: return sibings.Contains(tile); } return base.RuleMatch(neighbor, tile); } }
  • Siblings Tile 2
public class MyTile : RuleTile<MyTile.Neighbor> { public int siblingGroup; public class Neighbor : RuleTile.TilingRule.Neighbor { public const int Sibing = 3; } public override bool RuleMatch(int neighbor, TileBase tile) { MyTile myTile = tile as MyTile; switch (neighbor) { case Neighbor.Sibing: return myTile && myTile.siblingGroup == siblingGroup; } return base.RuleMatch(neighbor, tile); } }
Clone this wiki locally