- Official Sites
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 version 3.4 (or higher) 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 . Just be consistent throughout each array. Don't mix string identifiers, or things can get ugly.
Since, in an array, a variable can have multiple values, 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?)
One last thing: Capitalization and auto-correct can get you into trouble. You'll notice there is no capitalization in any of the example code (except where it says “Script:” but I already pointed out that that's added by WatchMaker, and not actually part of the typed code). That's because you have to be VERY careful with capitalization in any coding language. There's nothing wrong with it, but you'll find that most coders only use it for clarification, and avoid it otherwise. For example, a variable name like VarToMakeThingsEasierToRead kind of needs capitalization (or at least a good slap upside the head to the programmer that insists on using such long freaking variable names). Remember, Var_clrnum is not the same as var_clrnum, when coding. If you're having issues, check to make sure that something didn't get capitalized or auto-corrected against your will.