chiyadev / genshin-schedule

🕑 Genshin farming scheduler
https://genshin.chiya.dev
MIT License
72 stars 17 forks source link

Allow crossing off trounce domains for the week #81

Open luaneko opened 3 years ago

luaneko commented 3 years ago

Suggested by ne#7572 on Discord

hi, just started using this after googling 'resin calculator' lol. this is really cool and well designed! was wondering if there was a way to cross off weeklies + see only the current day's drops from talent book domains?

bschouwerwou commented 2 years ago

I'm interested in seeing this come to fruition, so I've been thinking about a possible approach for this.

I think it'd be good to build something that works for players that are interested in completing all Trounce domains each week, but also for players that are only interested in completing the domains for characters they're currently building.

So, what if we moved Trounce domains into their own section? It could be something like "This Week's Domains" to align with "Today's Domains", or perhaps shifting the sections to being more generic (Weekly, Daily) or type-based (Trounce, Bosses, Talents, etc) could work. The latter ideas probably deserve a separate discussion, so I'm thinking "This Week's Domains" for now.

I made a quick mock to show what I'm envisioning, but I'll explain it a bit:

image


As for:

see only the current day's drops from talent book domains?

This seems like a separate ask/issue, but I think it could be addressed in a similar way — allow showing all of today's domains under "Today's Domains", and have a filter option to control showing all or only domains that have selected drops.

luaneko commented 2 years ago

So, what if we moved Trounce domains into their own section? It could be something like "This Week's Domains" to align with "Today's Domains", or perhaps shifting the sections to being more generic (Weekly, Daily) or type-based (Trounce, Bosses, Talents, etc) could work. The latter ideas probably deserve a separate discussion, so I'm thinking "This Week's Domains" for now.

I'm not sure about the benefits of separating the domains into different sections. Combining different categories of domains (trounce, forgery, blessing, etc.) into one section allows us to display only the most efficient domains that can be completed by the user to achieve their goal (acquiring character ascension material, weapon material, etc.) with the least amount of resins possible.

The currently implemented domain efficiency heuristic considers how many of the domain's drops is "useful" to the user. A drop is useful if the user ticked the "Show on schedule" checkbox in the Customize page. For example, a user schedules items X and Y. If domain A drops item X and domain B drops both items X and Y, then completing domain B is obviously more efficient. The efficiency of B eclipses A completely, so Genshin Schedule hides A from "Today's Domains".

Having separate sections would break the above algorithm because domains in different sections cannot be checked for overlapping drops. Resulting list of domains is no longer the most resin-efficient possible.

This is to support the players that want to complete all of them each week.

"Today's Domains" is not the right place for this IMO. This could be implemented in a more generic system like the one described in #30. If a user wants to complete all trounce domains every week even if it's not strictly necessary, then they can be configured as weekly reminders on Monday. This should accommodate for both categories of players you described.

Could consider automatically subtracting -30/-60 Resin when completed.

Sounds convenient, but there should also be a toggle to opt out optionally.

I made a quick mock to show what I'm envisioning

That mock looks great! I think that is how this feature should be implemented ideally.

see only the current day's drops from talent book domains?

This is already partially supported by filtering the list by characters, which I think is good enough honestly.

bschouwerwou commented 2 years ago

"Today's Domains" is not the right place for this IMO.

I agree "Today's Domains" is not the right place for tracking completion of these weekly domains, which is one of the reasons why I proposed the separate section. Another was because I always found it strange having weekly or persistent domains under a section that changes daily, but perhaps that's just due to how I interpreted the intention/purpose of the section.

I was not really familiar with the efficiency filter before this though, so thanks for the explanation. I can see how splitting the domains into different sections could complicate that.

This could be implemented in a more generic system like the one described in #30. If a user wants to complete all trounce domains every week even if it's not strictly necessary, then they can be configured as weekly reminders on Monday.

I agree that a more generic system would work. Do you already have ideas for how you'd like to approach that? I was thinking a generic Reminders system would end up being another Tasks list that's not tied to the map, but your comment about my mock seems to suggest that's not entirely the case?

luaneko commented 2 years ago

Do you already have ideas for how you'd like to approach that?

To be honest, I hadn't given much thought into it until now. I only had a vague idea of how I would implement it based on your mock. It may actually be more appropriate to integrate it into the "Today's Tasks" section instead of having a new separate section. I made a quick mockup myself:

image

Notice that a non-trounce domain is also scheduled in the list. If we implement a reminders system, I don't think there's any reason to restrict it to accepting only trounce domains. The advantage of such system is allowing the user to be flexible after all.

I was thinking a generic Reminders system would end up being another Tasks list that's not tied to the map,

That is mostly correct, except that the reminders system is integrated into "Today's Tasks" instead of a separate section like "Today's Reminders". Under the hood, a reminder object would technically be a task object without a location attached. In this way, we can take advantage of the existing tasks infrastructure without having to implement another similar system from scratch.

As for actually scheduling the domains as reminders, we could offer something like "reminder templates" that are preconfigured with the domain's icon, color, reset conditions, etc. We could also add templates for "merchants that sell artifacts on Thursdays every week" which will close #30.

bschouwerwou commented 2 years ago

Under the hood, a reminder object would technically be a task object without a location attached. In this way, we can take advantage of the existing tasks infrastructure without having to implement another similar system from scratch.

Yeah, good idea.

As for actually scheduling the domains as reminders, we could offer something like "reminder templates" that are preconfigured with the domain's icon, color, reset conditions, etc. We could also add templates for "merchants that sell artifacts on Thursdays every week" which will close #30.

I like this. I had a couple ideas in mind after your first comment, and the "reminder templates" was one of them. 👍 I'm sure there's a number of things we could provide a template for.

It may actually be more appropriate to integrate it into the "Today's Tasks" section instead of having a new separate section.

Conceptually I do like these reminders just being tasks too, so I think this would be a good place to start. I did have some small concerns and other considerations around grouping the different types of tasks together, but there might be ways to address them while keeping them all under "Today's Tasks".

One that I will mention now though is that by grouping them into one section we'd have two ways to add tasks to the same section, which could be confusing. There might be ways to address this with some adjustments to the UI, but figured I'd still bring it up.


I think it would still be nice to do something for #51 as part of this if possible.

Perhaps we exclude Trounce domains from "Today's Domains" if there's a completed task for it? The user would need to set up the Domain task with the template so we have something to reference, but it'd help keep the Domains list more "correct" throughout the week while still achieving the desired goal of not showing them after they're no longer applicable. Needing to set up the tasks to get them removed could be viewed as a downside, but I feel like having the connection to the task makes some sense.

Another filter for "Today's Domains" (that #51 mentions) would achieve what they're asking for, but realistically you'd only use it after you've completed them all for the week, because until then you'd still want to see the ones you haven't completed yet. Completing the last one might be at the end of the week anyways, so you might not benefit from the filter for very long, and the user would also need to reset the filter each week (unless we automatically do it for them).