-
-
Notifications
You must be signed in to change notification settings - Fork 123
[Review Only] Trajectory new types #1888
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
After reading the two specific VirtualTrajectory I'm doubting the VirtualTrajectories. The VirtualTrajectories doesn't seem to be trajectories but some specific systems which simply borrow the trajectory generic process routine? I can somewhat understand this line of thinking, but shouldn't such logic be separated into a class like spawners for handling? Not sure would thich one is more reasonable.
Also the other parts of this PR looks ok, but now I think the main problem is whether the VirtualTrajectories exists or not.
Don''t mind the other parts I mentioned below, just ignore them cause they are not the main issue now
| return true; | ||
| } | ||
| /* | ||
| void VirtualTrajectoryType::Read(CCINIClass* const pINI, const char* pSection) // Read separately |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would it be better to read it here, and the child types call VirtualTrajectoryType::Read before they read their data?
| namespace detail | ||
| { | ||
| template <> | ||
| inline bool read<TraceTargetMode>(TraceTargetMode& value, INI_EX& parser, const char* pSection, const char* pKey) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should the INI parsing stuffs be put together or separate like this one
| const auto distanceCoords = pBullet->Location - destination; | ||
|
|
||
| // Rotate around the center only when the distance is less than 1.2 times the radius | ||
| if ((radius * 1.2) > BulletExt::Get2DDistance(distanceCoords)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any idea about the constant 1.2 comes from?
| pBulletExt->LifeDurationTimer.Start(120); | ||
| } | ||
|
|
||
| bool TracingTrajectory::ChangeVelocity() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Personally I do not think the tracing one should be a trajectory, it looks more like a spawner, which should become a independent system? putting it in trajectory seems not reasonable enough?
btw The |
The current state is indeed similar to another type of spawner. Both |
|
The The |
|
|
I think its something kinda like burst but much more customizable, not thinking its a trajectory but a standalone bullet attribute for me |
This is obviously not the same thing. Three questions: |
Record the location of the target for the bursts to fire at. Optionally (if we want following the target) update it from TarCom pointer from the firing TechnoClass. Also optionally record the relative location instead of absolute positions if we want the pattern to also move with firer.
I am not sure what is this for, can you elaborate why would someone need this? Imagine if a laser beam sweeped and injured someone on the battlefield, and then swiped back and injured them again. You're proposing to give "immunity" from the second pass. I don't see why. |
|
I'd paste some of my opinions here: |
Because Engrave's damage is actually achieved by multiple small-cellspread warheads detonating. If not restricted, then certain units (such as buildings) may receive multiple damages from a single shot. |
Yes, and why is this a problem? This is exactly how I expect it to work and it's logical. Imagine a laser firing in 1 shot vs continuously for a period of time. It's a feature, not an issue. |
|
I mean not everything should be exactly like in StarCraft, should it? I find their implementation illogical and unintuitive to newcomers who must learn "StarCraft physics" instead of using common sense to understand how the weapon works. Of course, if someone implements a way to prevent multiple damage (I would imagine you would keep a marker that the following bursts should not damage the same) it could probably be included, even though I am not a fan of introducing arbitrary "custom physics laws". Not sure what is the trouble here. |
|
I just watched a video of Colossus firing it's thermal lance, and it does appear to me that this weapon effect is purely visual and it simply damages a line instantly. I don't think limiting the engraving lasers to only damage the target once is a correct approach. Instead I would make lasers do no damage and have something else damage the targets. |
No, it does not deal damage instantly. It deals damage over multiple periods with one fire of the weapon, and if i remember correctly, the beam is made to follow that path. The entire system of damage dealing in SC2 works completely different from YR, with no projectiles or warheads, so obviously it does not translate at all, but Engrave implementation is close enough to how it works in SC2. Finally, if someone wants Engrave to deal damage multiple times to one target then they can use PassDetonate=yes. If not, then ProximityWarhead= can be used instead. I don't see a reason to reinvent this just for Engrave, when Engrave works just fine with what is already available. |
Split from #1582 . For review only. (The latest commit)