Setting up schematics for the jewel matching logic.

In this tutorial we’ll create schematics to check if the jewels above, below, left and right of a jewel are matching (i.e. are of the same color). To make it as easy as possible, we’ll find the matching jewels by using a shapecast with additional distance and name checks. In our game, the color of the jewel is in the game object’s name, i.e. we’ll check for game objects having the same name.

Get Matches: Schematic

First, we’ll create a schematic that checks the nearby jewels. This is done by storing the machine object (executing the schematic) in a global selected data named match. Afterwards, we’ll check the nearby jewels using a shapecast and filters (as explained above) – if something was found, it’ll start this schematic on the found game objects (jewels). This is repeated until no matching jewels are found any longer – at the end, all matching jewels are stored in the match global selected data (which is processed by another schematic we’ll set up afterwards).

Open the Makinom editor, navigate to Schematics and create a new schematic. Change the following settings.

match3_03_matching_jewels1

Select Game Objects

Add > Game Object > Game Object > Select Game Objects

We’ll use this node to add the machine object to the match global selected data.

  • Data Key
    Set to match.
  • Data Origin
    Select Global.
  • Change Type
    Select Add.

Game Object

  • Object
    Select Machine Object.

Check Shape

Add > Game Object > Raycast > Check Shape

We’ll use this node to check the nearby game objects and filter the found game objects.

Shape Settings

  • Shape
    Select Circle 2D.
  • Check All
    Enable this setting.
  • Single Objects
    Enable this setting.

Origin

  • Vector3 Type
    Select Game Object.
  • Object
    Select Machine Object.
  • Value Origin
    Select Position.

Radius

  • Radius
    Set to 1 (Value).

Layer Mask

  • Float Type
    Select Layer Mask.
  • Layer Mask
    Select Everything.

Filter Game Objects

  • Use Filter
    Enable this setting.

Object Checks

Click on Add Object Check to add a check. We’ll check for game objects matching the machine object’s name.

  • Check Type
    Select Name.
  • Name
    Select Game Object Name.
  • Object
    Select Machine Object.
  • Check Type
    Select Is Equal.
  • Is Valid
    Enable this setting.

Distance Checks

Click on Add Distance Check to add a check.

The To Object game object defines which game object will be used for the distance check (beside the one found by the shapecast).

  • Object
    Select Machine Object.
  • Use Root
    Disable this setting.

We’ll check for game objects that have a distance of 1 or less to the machine object. We only want the jewels that are above, below, left or right of the jewel we’re currently checking – they have a distance of 1 (since that’s how we set up our grid, but we’ll check for 1.1 to make sure we don’t miss anything due to rounding). Without this check, we’d also get the jewels diagonally to the jewel.

  • Ignore Y Distance
    Disable this setting.
  • Check Type
    Select Is Less Equal.
  • Distance
    Set to 1.1 (Value).

Excluded Objects

Click on Add Excluded Object – we’ll exclude the already found matches to prevent checking the same game objects multiple times.

  • Object
    Select Selected Data.
  • Data Key
    Set to match.
  • Data Origin
    Select Global.

Hit Game Object

We need to remember the game objects found by the shapecast to be able to use them in the next node. We’ll store them in the local selected data check – local selected data is only available in the running schematic.

  • Use Hit Object
    Select Selected Data.
  • Data Key
    Set to check.
  • Data Origin
    Select Local.
  • Change Type
    Select Set.

Intermediate saving

Before adding the next node, we need to save the schematic – click on Save Schematic and save it as GetMatches in Assets/Schematics/. Otherwise we wouldn’t be able to use the schematic in itself.

Start Machine

Add > Machine > Start Machine

We’ll use this node to start this schematic on all found game objects.

This node is connected to the Success slot of the Check Shape node.

  • Schematic Asset
    Select GetMatches.
    I.e. the schematic we’re currently working on.
  • Execution Type
    Select Single.
  • Update Type
    Select Update.
  • Share Local Variables
    Enable this setting.
    We don’t really need to share variables for this schematic, but it’s a good practice to share variables (unless this would interfere with someting in your schematic) in this case. This schematic will be started very often in sequence, without sharing variables, each started schematic would create it’s own variable handling, which can reduce the performance (even if it’s only a little bit).
  • Share Selected Data
    Disable this setting.
    Sharing the local selected data would interfere with the check selected data.
  • Wait Between
    Enable this setting.
  • Wait
    Enable this setting.

Machine Object

  • Object
    Select Selected Data.
  • Data Key
    Set to check.
  • Data Origin
    Select Local.

Starting Object

  • Use Same Object
    Enable this setting.
    This will use the defined machine object also as starting object. When not using this option and selecting the same game object as starting object, each possible combination of machine and starting object would be used.

And that’s it for this schematic – don’t forget to save the changes.

Check Jewel: Schematic

Next, we’ll create the schematic that initates checking for the matching jewels. It’ll first check if the machine object (jewel) is already marked to be destroyed (due to matches) – if not, it’ll start the Get Matches schematic we just created. After Get Matches finished executing, we’ll have neighbouring matches stored in the global selected data match – all we need to do is check if 3 or more jewels match and mark them for destruction.

Create a new schematic and change the following settings.

match3_03_matching_jewels2

Selected Game Objects Contain

Add > Game Object > Game Object > Selected Game Objects Contain

We’ll use this node to check if the machine object is already marked for destruction – i.e. stored in the global selected data destroy.

  • Data Key
    Set to destroy.
  • Data Origin
    Select Global.

Game Object

  • Object
    Select Machine Object.

Start Machine

Add > Machine > Start Machine

In case the object isn’t stored in the global selected data destroy, we’ll start the Get Matches schematic on it.

This node is connected to the Failed slot of the Selected Game Objects Contain node.

  • Schematic Asset
    Select GetMatches.
  • Execution Type
    Select Single.
  • Update Type
    Select Update.
  • Share Local Variables
    Enable this setting.
    Again, this is for performance improvement.
  • Wait Between
    Enable this setting.
  • Wait
    Enable this setting.

Machine Object

  • Object
    Select Machine Object.

Starting Object

  • Use Same Object
    Enable this setting.

Selected Game Objects Count

Add > Game Object > Game Object > Selected Game Objects Count

We’ll use this node to check if the found matches (global selected data match) are 3 or more.

  • Data Key
    Set to match.
  • Data Origin
    Select Global.

Check Settings

  • Check Type
    Select Is Greater Equal.
  • Value
    Set to 3 (Value).

Select Game Objects

Add > Game Object > Game Object > Select Game Objects

In case 3 or more matches are found, we’ll add the matches to the global selected data destroy.

This node is connected to the Success slot of the Selected Game Objects Count node.

  • Data Key
    Set to destroy.
  • Data Origin
    Select Global.
  • Change Type
    Select Add.

Game Object

  • Object
    Select Selected Data.
  • Data Key
    Set to match.
  • Data Origin
    Select Global.

Clear Selected Data

Add > Value > Selected Data > Clear Selected Data

We’ll use this node to remove all data from the global selected data match to be ready for the next match check.

This node is connected to the Failed slot of the Selected Game Objects Count node and the Next slot of the previous Select Game Objects node.

  • Clear All
    Disable this setting.
  • Data Key
    Set to match.
  • Data Origin
    Select Global.

And that’s it for the schematic – click on Save Schematic and save it as CheckJewel in Assets/Schematics/.

The next tutorial will handle destroying jewels.