aboutsummaryrefslogtreecommitdiff
path: root/src
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-27derive Error for ParseBossErrorDaniel Schadt
The implementation was short, but since we're using thiserror anyway, we might as well be consistent and derive the implementation.
2020-04-27tests and fixes for Boss::from_strDaniel Schadt
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-26use ? instead of manual if-letDaniel Schadt
2020-04-04also add FromStr for new bossesDaniel Schadt
2020-04-04add strike mission IDsDaniel Schadt
2020-04-04add wing 7 bossesDaniel Schadt
2020-04-04add more eventsDaniel Schadt
The amount of non-properly-implemented events is growing
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
2020-04-04Insert dyn for trait objectsDaniel Schadt
This was a change in Rust a while back, so we're updating to the new, non-deprecated syntax.
2019-05-31Merge branch 'partial-parsing'Daniel Schadt
2019-05-31implement FromStr for BossDaniel Schadt
2019-05-24add public method to parse raw::Agent to AgentDaniel Schadt
2019-05-24add support for partially parsing an EVTC fileDaniel Schadt
2019-05-15rewrite parsing support for guildDaniel Schadt
2019-05-15add support for Event::Guild parsingDaniel Schadt
2019-05-15add guild state changeDaniel Schadt
2019-02-16wrap zip reading in BufReaderDaniel Schadt
2019-02-16implement new state changesDaniel Schadt
2018-10-15fix Deimos encounter IDDaniel Schadt
2018-10-15add fractal CM idsDaniel Schadt
2018-10-15derive FromPrimitive for BossDaniel Schadt
Makes it easier to deal with boss ids, as they are usually given in numeric form.
2018-10-15add encounter ID for all w1-w6 bossesDaniel Schadt
2018-10-10add AttackTarget, Targetable, MapId statechangesDaniel Schadt
2018-10-10update to latest arcdpsDaniel Schadt
This comes with several changes: First, the revision header field is now properly parsed and saved, instead of just being hardcoded to zero. This is the first step in allowing newer log files to be parsed. To accommodate this, the Header struct has been extended with the "revision: u8" field. To be able to parse both formats, the CbtEvent struct has been changed. It is now the unification of both the new struct and the old struct, as the changes are pretty minor and mostly concern the parsing itself. The data types have been adjusted, and two fields have been added. Moving fields around does not concern CbtEvent at all. If the struct diverges more from this in the future, some splitting might be introduced, but for now, the change is pretty transparent to other code. During this process, the structs have lost their [repr(C]) property. It was never used, as the structs were not directly involved in C FFI. It has been a relic of the past from earlier iterations. Finally, the parsing function has been changed from parse_event to parse_event_rev0, with the addition of a parse_event_rev1. parse_events now takes the event parsing function as an additional parameter, and parse_file correctly choses the implementation based on the revision number.
2018-09-06make parser more lenientDaniel Schadt
Somehow, new files (after ~2018-08-10) won't parse without this.
2018-09-06add new enum valuesDaniel Schadt
2018-08-02add more wing 1 mechanicsDaniel Schadt
2018-07-09add rudimentary support for new state changesDaniel Schadt
The arcdps update has introduced new state change events, namely BuffInitial, Position and Velocity. It is now possible to track the movements of all players. Unfortunately, this meant that evtclib could not ready any logs created by the new arc version, as the new CbtStateChange was not read correctly. evtclib just returned "Invalid data". This fix adds the new enum variants to the CbtStateChange enum, making it again possible to read files. However, there are no high-level events for those yet, so the conversion will fail.
2018-07-07more readabilityDaniel Schadt
2018-07-07don't count mechanics which are evaded or blockedDaniel Schadt
2018-07-07base for mechanic trackingDaniel Schadt
2018-06-15fix(?) boon trackingDaniel Schadt
If we throw away all empty queues before we register that they are empty, we end up never removing some boons, getting crazy uptimes. The current state is still not perfect, but it's much closer to what we expect.
2018-06-14some main.rs updates for debugging stuffDaniel Schadt
2018-06-14deal with multiple boss agentsDaniel Schadt
Exemplary done with Xera.
2018-06-14use log start time as fallback for combat enterDaniel Schadt
Does only the PoV player have the enter combat event...?
2018-06-14add support for reading zipped logsDaniel Schadt