That's really sad... as far as I know 5.1 does not have some extremely useful features (some metamethods). I was playing with metatables trying to implement an OOP-like class+inheritance system and I don't remember what exactly, but something did not work with 5.1 while it was working perfectly on 5.2 version of Lua.
1. I think that most of the time we can't rely on that tool. Image the situtation when there are lots of targets around but they are all spread out. Maybe that's not a common situation and most of the time they are going to be stacked but anyway we will lose some dps while performing a multi-target rotation on one target. So I would prefer to see both rotations in different blocks (which are a little bit spread out from each other) all the time.
a. There should be a "player state" object which encapsulated all the data which may affect making decisions (e.g. for paladins: all spells cooldowns, mana, holy power, buff/debuff durations, target buff/debuff durations) and all actions modify this data in some way (e.g. Hammer of the Righteous will take some mana, generate 1 Holy Power (3 Holy Power when Holy Avenger is active), put Hammer of the Righteous on cooldown, put Crusader's Strike on cooldown, start global cooldown, apply Weaken Blows debuff on the target or extend to specific duration). Also player has some predictable power regeneration speed (not too valuable for paladins while quite important for hunters and other energy-based classes), predictable GCD duration (based on players haste). So we can generate quite accurate data for a "player state" object based on time and modifications applied by the actions which were performed during this time. Of course the further we predict the less likely this prediction is going to be correct but from the point of programming it does not really matter how many actions do we want to generate (for example, we can generate 500 actions, although this is not going to be valuable to anyone at all... an will cause huge pressure on CPU). So it would be nice to give everyone possibility to customize the number of icons he wants to see and I'm quite sure that some people would choose to see only 1, some whould set this options to 2, 3, 4 or even 5. Personally I would like to see only 3.
b. Just let the user choose how many actions he wants to see. For example, you can set 2 actions as a default number.
3. Actually it's not to hard to setup. Here is the "appearance" set of options which come to my mind at the moment:
a. Basic icon scale. Usually it is a slider (sometimes combined with textbox) which allows to set percentage value in between 25% and 400% with a step of 5%/10%. This option will be applied to the first action. Defaults to 100%.
b. Icon scale step. Same slider (with textbox) between -100% and 100% with a step of 5%/10%. This option will be applied to every action after the first one. For exaple, if basic icon scale is set to 200% and icon scale step is set to -50%, icon scales are going to be at these values: 1st - 200%, 2nd - 150%, 3rd - 100% and so on. If the icon scale becomes smaller than or equal to 0% than this icon and all icons after this one are going to be hidden. Defaults to 0% (all icons are equal size).
c. Basic icon opacity. From 100% to 5% with a step of 5%. Defaults to 100%.
d. Icon opacity step. From 0% to 95% with a step of 5%. Defaults to 0%.
e. Relative point of child icon (top left, top, top right, left, middle, right, bottom left, bottom, bottom right). It's a combobox (dropdown). Defaults to "right".
f. Relative point of parent icon. Defaults to "left". That means that, for example, 2nd icon binds to 1st one, while 3rd binds to 2nd and so on. And the population goes from right to left. With these options any user will be able to define any direction for any block (vertical upwards or downwards, horizontal to the left or to the right and any diagonal).
g. X offset. Absolute value (same slider and textbox) from -200 to 200 range (for example) with a step of 1 pixel. I guess it's obviuos what does this option do.
h. Y offset.
4-6. All these ideas are not anything that replaces one another - they all can work at the same time. And yes, of course user needs options to choose whether he wants to use any of these. For the 4th point, if we set the amount of time (before the action becomes usable) when action becomes accepted to 0, then action becomes accepted only when it is already usable (off cooldown). For the 5th point, if we set maximum waiting time to 0, then it means that when we make a decision we will always put ability with the lowest cooldown left in front of the priority list (the logic is simple: we filter all abilities which cds are lower than or equal to specific value, and then we pick one the most important; if this value is zero then behaviour is going to be default). For the 6th point, simply set minimum display time (this option only work for accepted actions described in point 4, meaning it will never wait not accepted ones) to zero, and it won't wait at all before swaping this action to more important.
That's how my idea is intended to work. For example, we set action accepting threshold to .5 seconds, maximum waiting time to .5 seconds and minimum display time for accepted action to 1 second. We will ignore mana in this example since retribution/protection paladins no longer have to worry about that, also I will not be making any predictions further than the 1st action and will ignore cooldown decreases caused by haste. We have 2 holy power at the moment and target is nearly 21% health. And we have the following cooldowns left: global - 1.5 seconds, Judgment - 0 (ready to use), Crusader's Strike - 2, Exorcism - 15.
a. Since the system is not interested in the present time (as the GCD is active and nothing can be used) it looks forward after 1.5 seconds. The cooldowns on spells are going to be the next: global - 0, Judgment - 0, Crusader's Strike - 0.5, Exorcism - 13.5. It picks spells filtered by waiting time (which CD <= 0.5): Judgment and Crusader's Strike. As Crusader's Strike is more important it's being shown.
b. In 1.5 seconds when its cooldown is 0.5 seconds left Crusader's Strike is being accepted. Since this point we are sure that we are going to use this ability.
c. In 0.5 seconds player casts Crusader's Strike and we have the following situation: 3 holy power, GCD - 1.5, CS - 4.5, J - 0, Exo - 13. We look forward once again: GCD - 0, CS - 3, J - 0, Exo - 11.5. Now Judgement is shown but since we have to wait until it's going to be castable for 1.5 seconds it's not accepted.
d. In 0.7 seconds (0.3 seconds before J would be accepted) The Art of War proced and Exorcism became available (situation changed). As J is not yet accepted we start making a brand new decision and look forward after 0.8 seconds (end of GCD) and see that both J and Exo will match 0.5 seconds limit. So Exo replaces J on the screen.
e. In 0.3 seconds Exo becomes accepted.
f. In 0.5 seconds Exo becomes actually castable (at this point protection timer starts ticking) but player was interrupted somehow and he did not do anything.
g. In 0.2 seconds our targets health dropped below 20% and Hammer of Wrath becomes available. But since our current action is protected by minimum display time we do not make any new decisions yet.
h. In 0.8 seconds (after protection time elapsed) we start making a new decision and replace Exo with HoW.
7. I think we should talk about that visual effects a little bit later.
P.S. When predicting beyond first GCD we should add some user customized value to the each GCD (GCD left for 1st action, GCD left + (full GCD + value) * 1 for the 2nd, GCD left + (full GCD + value) * 2 for the 3rd and so on). It means that user realizes that pushing a button takes some time (different value for different users) and wants measurements to be more accurate.
Okay, so I've finally managed to come back to this post to explain things in more details:
1. Multiple action blocks. For example I've configured TMW to show me 2 blocks: Single-target rotation and Multi-target rotation. Since it is not possible for any addon to figure out how many enemies do we have in X range from self/target/focus and it's not very handy to switch modes in combat, it would be quite nice to be able to see both blocks at the same time.
2. X actions per block. It's very handy to be able to see which actions are likely to be used after the current one. For example I would like to see 3 actions at once. Of course some procs may entirely change everything and that will happen quite often but knowing that stuff is still quite valuable.
3. Configuration of action icon position/opacity/size depending on its number in the action block's priority list. For example, I want to adjust the first action to be at 1.0x scale, 0.8x opacity and at the top right corner of the block, the second icon is going to be smaller, more faded and positioned lefter and lower. And so on. So I still have some valuable info on my screen while it does not attract my attention too much.
4. Accepted state for the 1st action (2nd and all other actions are never in accepted state). It means that the icon may or may not be changed freely for another (better) action. The action icon becomes accepted X seconds before it become usable (player current power, power gain speed, spell cooldown, global cooldown should be taken into account). Before the icon is accepted it may be changed for a better action at any given time, when it is accepted some conditions have to be met before this icon is changed.
5. Waiting time limit for a better action. For example, I've got Judgment that's going to be available in .1 seconds while Crusader's Strike is going to be off cooldown in 0.5 seconds. If we set this limit to be .55 seconds then Crusader's Strike is going to be shown as the 1st action. The waiting time should be applied only once per making a decision: if we have Exorcism going of cooldown in .6 seconds it should not replace Crusader's Strike in .05 seconds.
6. Minimum action show time (for accepted actions). Let's imagine that we set this option to 1 second. This means that, if Crusader's Strike icon is accepted and being shown for 0.3 seconds and The Art of War procs, the Crusader's Strike icon will be shown for 0.7 seconds more before it's going to be replaced by Exorcism. Furthermore it would be nice to be able to set some special effect (e.g. flash) on this icon X seconds before it's going to be changed.
7. Bar indicator of availability of the spell (for the first action) which fills to 100% when the spell is castable. Maybe located around the border of the icon. This indicator can be in 3 states which are indicated by its color (for example, red - when action is not yet accepted, yellow - when the action is accepted but you need to wait some time before the spell is going to be castable, green - when there is little time left before action is available so you can start spamming the button). The last number might be configured as some people have bigger lag or maybe don't want to spam the button at all. Maybe this bar might require some flashing effect when player get's such buff as Clearcasting (for feral druids) when he has not enough energy and the spell is already of CD.
The idea of all that stuff is to maximize the DPS for any given player. Anyone can adjust these numbers so they will push the correct buttons all the time (without panic when actions start to replace one another) depending on their lag and reaction. I will try to answer all the questions that might arise or explain anything that is not clear (my english is not really good). Thanks for reading this.
I have quite a few more ideas but that's too much for one post.
I do know about existance of such addons like CLC or Ovale but they all does not meet some of my requirements. To be honest I think that TellMeWhen is the best addon for maintaining rotation (for me playing as protection/retribution paladin). It's because of 2 simple things:
1. I totally control all the priority and conditions under which some skill is shown without any knowledge of lua (although I know Lua a little).
2. I can configure all the positioning, sizing, visibility (and opacity which is binded to conditions too). And it supports Masque.
All that is good but there are a few things that I cannot achieve with this tool:
1. Although the grid can be freely positioned across the screen, the icons can be bound to specific cell only. They can be sorted so they will appear in another cell visually but their position or size cannot be changed explicitly. This could be achieved by creating multiple grids but that's not too handy.
2. Conditions don't know anything about past actions except for the current state of things. For example when I want to keep 'CS, filler, CS' rotation for my prot pally, I have to set CS icon to show only when it's cooldown is under ~1.2 seconds. But if have to perform some bunch of actions and become ready to continue my rotation 1.9 seconds after I casted CS, the CS icon is shown in front already although I have plenty of time to perform another cast.
3. Sorting spells by their cooldown is quite a tricky task. And it's hard to figure out which action is going to be next when there is no available cast at the moment.
4. The other problem is that such short buffs like Sacred Duty or The Art of War may proc suddenly and SotR or Exorcism icons can simply push some spell I've almost casted backwards. Another example. I want to cast Consecration only when I have more than 70% of base mana (during my single target rotation). All other possible skills are on CD, but Judgement is going to be available in .5 seconds. And suddenly my mana becomes over 70% and cons stands in front of J. Another example. I want to cast Inquisition whenever I have 3 HoPo or Divine Purpose and Inq duration is under 3 seconds. I've almost casted TV when Inq appeared in front.
What do I want to achieve? An accordion which shows a queue of skills sorted by priority, availability, cooldowns, prediction (for example, I have 2 HoPo, the first icon is CS, the second - TV (or Inq if it's duration is less then 3 + amount of skills casted before I have 3 HoPo * GCD duration)) and soft ordering (not pushing icons with even higher priority before player finished the previous action).
The other not mandatory but quite interesting things are a visual effect on the icon on casting the skill it's presenting and floating of icons which ordering has been changed.
Sorry, my English is quite bad, if you think that this idea is worth a discussion then your questions are welcome.