aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
AgeCommit message (Collapse)Author
2020-04-28add Profession and EliteSpec enumDaniel Schadt
In the high-level "Player" struct, dealing with the low-level numbers seems a bit off, especially because it means that applications have to keep a table of id-to-profession mappings anyway. We're already including a Boss enum for the same reasons, so we might as well include Profession and EliteSpec data - which is also not changing as frequently as Boss.
2020-04-28derive Hash for Player/Gadget/Character/AgentDaniel Schadt
It is very much possible and likely that someone would want to use a Player or Agent in a HashSet or HashMap, and there's no reason why that should be forbidden.
2020-04-28getters for Player/Character/GadgetDaniel Schadt
2020-04-28more documentation for AgentDaniel Schadt
2020-04-28rework Agent/AgentName/AgentKind structsDaniel Schadt
We can now make compile-time guarantees about the contained kind, so that Log::players for example can return players directly.
2020-04-27rework Log::players/npcsDaniel Schadt
Since we know that we're only returning Agents which are Players, we can save downstream users some time and also provide access to the &Player. Ideally, we'd want something like PlayerAgent, or Agent<Player>, but that not only incurrs code duplication (in the first case), it'd also mean cloning the player data (second case), as we couldn't just return a reference into the pool with all agents. For now, this is still the better option, until other ways have been explored. Maybe cloning here wouldn't be too bad, but we'd also run into the issue that we cannot use record unpacking for records that have different generic parameters, so going from Agent<AgentKind> to Agent<Player> would mean manually copying over all record fields. We now no longer need the matches! macro, as we can simply use AgentKind::as_{player,character}.
2020-04-27combine AgentKind and AgentNameDaniel Schadt
Both of those are only used in lockstep anyway. If the AgentKind was Player, the AgentName was also Player. Having the possibility of mis-matched enum variants here was bad and always required an extra step of "unwrap" that was not necessary. This combination is the first step to simplify the handling of different agent kinds.
2020-04-27change some getters to copyDaniel Schadt
The types are so small that a reference would be slower than just copying the number itself.
2020-04-27remove try_traitDaniel Schadt
The .ok_or() method on Option is enough for those two occasions that we don't need to activate the complete try_trait feature just for a very small and questionable ergonomics gain. This also allows us to more easily discern which data exactly was invalid, as the .ok_or() in different places could take different error values. This also allows evtclib to be used on stable now. Some noise is introduced in the diff due to automatically re-formatting the source.
2020-04-27remove features stmt_expr_attributes & never_typeDaniel Schadt
Those are not used anymore and can be disabled. Maybe we can even get rid of try_trait in a nice way, allowing us to run on stable instead of nightly-only.
2020-04-27remove statistics submoduleDaniel Schadt
The way the trackers worked was rather... "adventurous", and while there were some good ideas and it mostly worked, the implementation and interface could do better. Additionally, it was incomplete, for example there were a lot of mechanics just missing. While I'm not against having this functionality provided by evtclib, I think it would be more worthwile with a better designed implementation & API, so this "proof of concept" implementation is gone until there is a better way of doing things. gamedata is being kept, as the boss identifiers are useful and applications shouldn't have to deal with keeping this low-level list themselves.
2020-04-04use getset::Getters without #[macro_use]Daniel Schadt
2020-04-04Use num_derive::FromPrimitive without #[macro_use]Daniel Schadt
2020-04-04switch from quick_error to thiserrorDaniel Schadt
thiserror seems to be the more modern approach that also works with the new Error trait from std.
2020-04-04update dependenciesDaniel Schadt
2019-05-24add public method to parse raw::Agent to AgentDaniel Schadt
2018-07-07more readabilityDaniel Schadt
2018-07-07base for mechanic trackingDaniel Schadt
2018-06-14deal with multiple boss agentsDaniel Schadt
Exemplary done with Xera.
2018-06-14add support for reading zipped logsDaniel Schadt
2018-06-14derive getters for AgentDaniel Schadt
2018-06-14rework boon trackingDaniel Schadt
2018-05-31cargo fmtDaniel Schadt
2018-05-30update rust - use never_type featureDaniel Schadt
2018-04-25introduce trackersDaniel Schadt
Trackers help us to keep the code somewhat cleaner, especially in the statistics::calculate function.
2018-04-24basic work on statistics calculationDaniel Schadt
2018-04-23more documentationDaniel Schadt
2018-04-23add a bit more documentationDaniel Schadt
2018-04-23add some utility methods to AgentDaniel Schadt
2018-04-23run rustfmtDaniel Schadt
2018-04-23apply clippy's suggestionsDaniel Schadt
2018-04-23add basic translation to more readable eventsDaniel Schadt
This basically implements the "event logic" as described in the README, though it produces easier-to-digest events. The test binary show 0 failed events on an example log, but of course, not all mechanics are used there, and the parsing logic may very well contain some errors.
2018-04-14Initial commitDaniel Schadt