- Official Sites
This is an old revision of the document!
A feature that's becoming more and more common, especially with paid watches that can't be edited, is the ability to change the color of an item or items on your watch face via tap action. This tutorial will explain the most efficient method for doing this. We'll be using arrays, so you're going to need (at least) version 3.4 of WatchMaker to pull this off.
function setclr() if var_clrnum==7 then var_clrnum=1 else var_clrnum=var_clrnum+1 end end
We start in the main script by initializing our variables. we do this to avoid having a variable set to NULL, which is always a good idea. The two variables we care about are “var_clrnum,” which is color selection, and “var_color1” which is the color itself. If you were wanting to have themes, where each theme has multiple colors that go together, you'd simply add a var_color2, var_color3, etc. in the same manner. Everything else would stay the same, and you'd use the same, single, var_clrnum, to set the color on everything.
Let's take a closer look at that “var_color1.” This is called an array (or table). What we've done here is set 7 separate values to the same variable, each being a color in hexadecimal format. These seven values are comma-separated, and since they're strings, each must have a string identifier. In this case, we used apostrophes as string identifiers, but you can use quotes if you're one of *those* people. In an array, we determine which value we want like this: var_color1, var_color1, and so on. So, all we need to do to change the color is change the number in the brackets. That's where var_clrnum comes in.
In the script, we set up a function that acts as a toggle. Each time we call the function, which we'll do via tap action, we increase the value of var_clrnum by one. When we reach the maximum (the number of entries in our array) value of 7, we simply set it back to 1. That way, var_clrnum is never a number that does not represent a value in var_color1.
All we have to do now is set the Color field of our object(s) to: var_color1[var_clrnum]
…and set the desired tap action to call the function. All the tap action does is cycle var_clrnum through it's 1-7 loop like we discussed earlier. Simple. Effective. I should clarify that the example reflects what will be shown when you look at the tap action, but is different from what you'd actually type in. The entire “Script:” part is added by WatchMaker. All you type in is the function call. In this case: setclr()
Add or remove colors by simply adding or removing colors in the var_color1 array, and changing the function to ensure that the maximum number matches the number of colors. It is important that if you added a var_color2, var_color3, etc., that they all have the same number of entries as var_color1. Var_clrnum should never be allowed to have a value that doesn't map to a color in any array that uses it, or you could end up with errors. (Remember that whole “Null” thing we were trying to avoid?)