Skip to content
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

Two new trajectories with enhanced straight trajectory #1261

Closed

Conversation

CrimRecya
Copy link

@CrimRecya CrimRecya commented May 16, 2024

New Disperse trajectory and Engrave trajectory with enhanced Straight trajectory.

First, the enhanced Straight trajectory.

  • Self-explanatory, is a straight-shot trajectory.
    • Trajectory.Straight.DetonationDistance controls the maximum distance in cells from intended target (checked at start of each game frame, before the projectile moves) at which the projectile will be forced to detonate. Set to 0 to disable forced detonation (note that this can cause the projectile to overshoot the target). By setting Trajectory.Straight.PassThrough=true, it refers to the distance that projectile should travel from itself when it above 0, and the distance that projectile should move behind the target when it below 0 (use the absolute value).
    • Trajectory.Straight.TargetSnapDistance controls the maximum distance in cells from intended target the projectile can be at moment of detonation to make the projectile 'snap' on the intended target. Set to 0 to disable snapping.
    • Trajectory.Straight.PassThrough enables special case logic where the projectile does not detonate in contact with the target but instead travels up to a distance defined by Trajectory.Straight.DetonationDistance. Note that the firing angle of the projectile is adjusted with this in mind, making it fire straight ahead if the target is on same elevation.
    • Trajectory.Straight.PassDetonate enables extra detonations when the projectile is traveling.
      • Trajectory.Straight.PassDetonateWarhead defined the warhead detonated by Trajectory.Straight.PassDetonate, and Trajectory.Straight.PassDetonateDamage defined the damage caused by Trajectory.Straight.PassDetonateWarhead.
      • Trajectory.Straight.PassDetonateDelay controls the delay for detonating the warhead defined by Trajectory.Straight.Warhead.
      • Trajectory.Straight.PassDetonateTimer controls the initial delay for detonating the warhead defined by Trajectory.Straight.Warhead.
      • Trajectory.Straight.PassDetonateLocal controls whether Trajectory.Straight.PassDetonateWarhead and weapon's Warhead are always detonate at ground level. It will also no longer restrict vertical velocity of the projectile when using Trajectory.Straight.ConfineAtHeight.
    • Trajectory.Straight.LeadTimeCalculate controls whether the projectile need to calculate the lead time of the target when firing. Note that this will not affect the facing of the turret.
    • Trajectory.Straight.OffsetCoord controls the offsets of the target. Projectile will aim at this position to attack. It also supports Inaccurate=yes and Trajectory.Straight.LeadTimeCalculate=true on this basis.
      • Trajectory.Straight.RotateCoord controls whether to rotate the projectile's firing direction within the angle bisector of Trajectory.Straight.OffsetCoord according to the weapon's Burst. Set to 0 to disable this function.
      • Trajectory.Straight.MirrorCoord controls whether Trajectory.Straight.OffsetCoord need to mirror the lateral value to adapt to the current burst index. At the same time, the rotation direction calculated by Trajectory.Straight.RotateCoord will also be reversed, and the rotation angle between each adjacent projectile on each side will not change as a result.
      • Trajectory.Straight.UseDisperseBurst controls whether the calculation of Trajectory.Straight.RotateCoord is based on its superior's Trajectory.Disperse.WeaponBurst of the dispersed trajectory, rather than Burst of the weapon. If this value is not appropriate, it will result in unsatisfactory visual displays.
      • Trajectory.Straight.AxisOfRotation controls the rotation axis when calculating Trajectory.Straight.RotateCoord. The axis will rotates with the unit orientation or the vector that from target position to the source position.
    • Trajectory.Straight.ProximityImpact controls the initial proximity fuse times. When there are enough remaining times and the projectile approaches another valid target, it will detonate a warhead defined by Trajectory.Straight.Warhead on it. If the times is about to run out, it will also detonate itself at its location. This function can be cancelled by setting to 0. A negative integer means unlimited times. By the way, you can use the weapon's Warhead with low versus only to aim at the target, and use the Trajectory.Straight.ProximityWarhead to causing actual harm.
      • Trajectory.Straight.ProximityWarhead defined the warhead detonated by Trajectory.Straight.ProximityImpact, and Trajectory.Straight.ProximityDamage defined the damage caused by Trajectory.Straight.ProximityWarhead.
      • Trajectory.Straight.ProximityRadius controls the range of proximity fuse. It can NOT be set as a negative integer.
      • Trajectory.Straight.ProximityAllies controls the damage ratio if the target of proximity fuse is ally. It will not detonate at allies by setting as 0. Note that this is not related to whether the warhead itself affect allies.
      • Trajectory.Straight.ProximityFlight controls whether to count units in the air.
    • Trajectory.Straight.ThroughVehicles controls whether the projectile will not be obstructed by vehicles or aircrafts on the ground. When it is obstructed, it will be directly detonated at its location. If it still have Trajectory.Straight.ProximityImpact times, it will also detonate a Trajectory.Straight.ProximityImpact at the location of the obstacle.
    • Trajectory.Straight.ThroughBuilding controls whether the projectile will not be obstructed by buildings. When it is obstructed, it will be directly detonated at its location. If it still have Trajectory.Straight.ProximityImpact times, it will also detonate a Trajectory.Straight.ProximityImpact at the location of the obstacle.
    • Trajectory.Straight.EdgeAttenuation controls the edge attenuation ratio of projectile damage, includes Trajectory.Straight.Damage. Can NOT be set to a negative integer.
    • Trajectory.Straight.SubjectToGround controls whether the projectile should explode when it hits the ground. Note that this will make AI search for suitable attack locations.
    • Trajectory.Straight.ConfineAtHeight controls the height above ground that projectile will try to travel as it can. It can not move down from the cliff by setting SubjectToCliffs=yes. It can be cancelled by setting as a non positive integer. It will be forcibly cancelled by setting Trajectory.Speed above 256.

In rulesmd.ini:

[SOMEPROJECTILE]                                ; Projectile
Trajectory=Straight                             ; Trajectory type
Trajectory.Straight.DetonationDistance=0.4      ; floating point value
Trajectory.Straight.TargetSnapDistance=0.5      ; floating point value
Trajectory.Straight.PassThrough=false           ; boolean
Trajectory.Straight.PassDetonate=false          ; boolean
Trajectory.Straight.PassDetonateWarhead=        ; WarheadType
Trajectory.Straight.PassDetonateDamage=0        ; integer
Trajectory.Straight.PassDetonateDelay=1         ; integer
Trajectory.Straight.PassDetonateTimer=0         ; integer
Trajectory.Straight.PassDetonateLocal=false     ; boolean
Trajectory.Straight.LeadTimeCalculate=false     ; boolean
Trajectory.Straight.OffsetCoord=0,0,0           ; integer - Forward,Lateral,Height
Trajectory.Straight.RotateCoord=0               ; floating point value
Trajectory.Straight.MirrorCoord=true            ; boolean
Trajectory.Straight.UseDisperseBurst=false      ; boolean
Trajectory.Straight.AxisOfRotation=0,0,1        ; integer - Forward,Lateral,Height
Trajectory.Straight.ProximityImpact=0           ; integer
Trajectory.Straight.ProximityWarhead=           ; WarheadType
Trajectory.Straight.ProximityDamage=0           ; integer
Trajectory.Straight.ProximityRadius=0.7         ; floating point value
Trajectory.Straight.ProximityAllies=0           ; floating point value
Trajectory.Straight.ProximityFlight=false       ; boolean
Trajectory.Straight.ThroughVehicles=true        ; boolean
Trajectory.Straight.ThroughBuilding=true        ; boolean
Trajectory.Straight.EdgeAttenuation=1.0         ; floating point value
Trajectory.Straight.SubjectToGround=false       ; boolean
Trajectory.Straight.ConfineAtHeight=0           ; integer
- Make sure you set a low `Trajectory.Straight.ProximityRadius` value unless necessary.
- Note that if `Trajectory.Straight.ProximityFlight` is true, it will consume more CPU performance.
- Note that the listed Warheads in `Trajectory.Straight.PassDetonateWarhead` and `Trajectory.Straight.ProximityWarhead` must be listed in `[Warheads]` for them to work.

2024-04-2623-21-28-ezgif com-video-to-gif-converter
Trajectory.Straight.ConfineAtHeight

2024-05-2100-24-23-ezgif com-video-to-gif-converter
Trajectory.Straight.OffsetCoord

2024-05-2100-17-46-ezgif com-video-to-gif-converter
Trajectory.Straight.PassDetonate

2024-05-2100-48-34-ezgif com-video-to-gif-converter
Trajectory.Straight.ProximityImpact

2024-05-1114-49-41-ezgif com-video-to-gif-converter
Trajectory.Straight.LeadTimeCalculate

Then, the new Disperse trajectory.

  • Its trajectory looks a bit like a ROT, but its settings are more flexible. It also has a unique trajectory. And as its name suggests, it can even spread out more weapons.
    • Trajectory.Disperse.UniqueCurve controls whether to enable simulated Qian Xuesen trajectory. After enabling this, it will NOT respect the following 19 items and Trajectory.Speed.
    • Trajectory.Disperse.PreAimCoord controls the initial flight direction of the projectile, and after reaching this coordinate, it will begin to turn towards the target direction. When it is set to 0,0,0 , it will directly face the target.
      • Trajectory.Disperse.RotateCoord controls whether to rotate the projectile's firing direction within the angle bisector of Trajectory.Disperse.PreAimCoord according to the weapon's Burst. Set to 0 to disable this function.
      • Trajectory.Disperse.MirrorCoord controls whether Trajectory.Disperse.PreAimCoord need to mirror the lateral value to adapt to the current burst index. At the same time, the rotation direction calculated by Trajectory.Disperse.RotateCoord will also be reversed, and the rotation angle between each adjacent projectile on each side will not change as a result.
      • Trajectory.Disperse.FacingCoord controls whether the forward direction in Trajectory.Disperse.PreAimCoord is depending on the orientation of the firer. By default, it will depend on the vector between the firer and the target.
      • Trajectory.Disperse.ReduceCoord controls whether Trajectory.Disperse.PreAimCoord defines the initial movement coordinates when the attack distance is 10 cells, and the actual initial movement coordinates will change with the length of the attack distance. It can be simply understood as an optimization term aimed at ensuring hits at close range.
      • Trajectory.Disperse.UseDisperseBurst controls whether the calculation of Trajectory.Disperse.RotateCoord is based on its superior's Trajectory.Disperse.WeaponBurst of the dispersed trajectory, rather than Burst of the weapon. If this value is not appropriate, it will result in unsatisfactory visual displays.
      • Trajectory.Disperse.AxisOfRotation controls the rotation axis when calculating Trajectory.Disperse.RotateCoord. The axis will rotates with the unit orientation or the vector that from target position to the source position.
    • Trajectory.Disperse.LaunchSpeed controls the initial flight speed of the projectile, it will be directly reduced to this value if it exceeds Trajectory.Speed.
    • Trajectory.Disperse.Acceleration controls the acceleration of the projectile's flight speed, increasing the speed per frame according to this value, the final speed will not exceed Trajectory.Speed.
    • Trajectory.Disperse.ROT controls the turning speed of the projectile and can determine the turning radius of the projectile. The turning speed will increase with the increase of speed.
    • Trajectory.Disperse.LockDirection controls whether after reaching Trajectory.Disperse.PreAimCoord and completing the first turn, the projectile will lock the direction of motion without further adjustment.
    • Trajectory.Disperse.CruiseEnable controls whether after reaching Trajectory.Disperse.PreAimCoord and completing the first turn, the projectile will maintain altitude while moving towards the target.
      • Trajectory.Disperse.CruiseUnableRange controls how far away it is from the target to end the cruise phase, no longer maintaining the cruise altitude, and begins to move directly towards the target. If the distance is already below this value by the time Trajectory.Disperse.PreAimCoord is reached, the cruise phase will be skipped.
    • Trajectory.Disperse.LeadTimeCalculate controls whether the projectile need to calculate the lead time of the target during motion.
    • Trajectory.Disperse.TargetSnapDistance controls the maximum distance in cells from intended target the projectile can be at moment of detonation to make the projectile 'snap' on the intended target. Set to 0 to disable snapping.
    • Trajectory.Disperse.RetargetRadius controls the radius of the projectile to search for a new target after losing its original target. If it hasn't arrived Trajectory.Disperse.PreAimCoord yet, the last coordinate of the original target is taken as the center of the searching circle. Otherwise, the coordinate of the distance in front of the projectile is taken as the center of the circle. Set to 0 indicates that this function is not enabled, and it will still attempt to attack the original target's location. If it is set to a negative value, it will directly self explode in place.
      • Trajectory.Disperse.RetargetAllies controls whether the projectile chooses allies as its target when searching for new targets after losing its original target.
    • Trajectory.Disperse.SuicideShortOfROT controls whether the projectile will explode when it detected its insufficient turning ability.
    • Trajectory.Disperse.SuicideAboveRange controls the projectile to self destruct directly after reaching the flight distance. Set to 0 to disable suicide.
    • Trajectory.Disperse.SuicideIfNoWeapon controls whether the projectile will self destruct after the number of times it spreads the weapon has been exhausted. If Trajectory.Disperse.WeaponCount set to 0, this will not be enabled.
    • Trajectory.Disperse.Weapons defined the dispersal weapons of the projectile.
      • Trajectory.Disperse.WeaponBurst defined how many corresponding weapons each time the projectile will fire. When the quantity is lower than Trajectory.Disperse.Weapons, it will use the last value.
      • Trajectory.Disperse.WeaponCount controls how many times the projectile can spread the weapon. Set to a negative value means unlimited times.
      • Trajectory.Disperse.WeaponDelay controls the delay for dispersing the weapons defined by Trajectory.Disperse.Weapons.
      • Trajectory.Disperse.WeaponTimer controls the initial delay for dispersing the weapons defined by Trajectory.Disperse.Weapons.
      • Trajectory.Disperse.WeaponScope controls the weapon dispersing timer to start counting only within this distance of reaching the target. Set to 0 to disable this function. Set to a negative value means it will only disperse the weapon at most once before detonation.
      • Trajectory.Disperse.WeaponSeparate controls whether the projectile no longer fire all the weapons in Trajectory.Disperse.Weapons at once and instead fire a group of weapons in the list order, following Trajectory.Disperse.WeaponBurst.
      • Trajectory.Disperse.WeaponRetarget controls whether the dispersed weapons will find new targets on their own. Using the range of weapons to search new targets.
      • Trajectory.Disperse.WeaponLocation controls whether the dispersed weapons will search for new targets at the center of the spreading position, otherwise they will focus on the original target. If a suitable target cannot be found, it will randomly attack the ground.
      • Trajectory.Disperse.WeaponTendency controls whether the dispersed weapons will choose the original target as the first new target in each group of weapons.
      • Trajectory.Disperse.WeaponToAllies controls whether the dispersed weapons will choose allies as targets when searching for new targets.
      • Trajectory.Disperse.WeaponToGround controls whether the dispersed weapons will only choose the ground as their targets.

In rulesmd.ini:

Trajectory=Disperse                             ; Trajectory type
Trajectory.Disperse.UniqueCurve=false           ; boolean
Trajectory.Disperse.PreAimCoord=0,0,0           ; integer - Forward,Lateral,Height
Trajectory.Disperse.RotateCoord=0               ; floating point value
Trajectory.Disperse.MirrorCoord=true            ; boolean
Trajectory.Disperse.FacingCoord=false           ; boolean
Trajectory.Disperse.ReduceCoord=true            ; boolean
Trajectory.Disperse.UseDisperseBurst=false      ; boolean
Trajectory.Disperse.AxisOfRotation=0,0,1        ; integer - Forward,Lateral,Height
Trajectory.Disperse.LaunchSpeed=0               ; floating point value
Trajectory.Disperse.Acceleration=10.0           ; floating point value
Trajectory.Disperse.ROT=30.0                    ; floating point value
Trajectory.Disperse.LockDirection=false         ; boolean
Trajectory.Disperse.CruiseEnable=false          ; boolean
Trajectory.Disperse.CruiseUnableRange=5         ; floating point value
Trajectory.Disperse.LeadTimeCalculate=true      ; boolean
Trajectory.Disperse.TargetSnapDistance=0.5      ; floating point value
Trajectory.Disperse.RetargetRadius=0            ; floating point value
Trajectory.Disperse.RetargetAllies=false        ; boolean
Trajectory.Disperse.SuicideShortOfROT=true      ; boolean
Trajectory.Disperse.SuicideAboveRange=0         ; floating point value
Trajectory.Disperse.SuicideIfNoWeapon=true      ; boolean
Trajectory.Disperse.Weapons=                    ; list of WeaponTypes
Trajectory.Disperse.WeaponBurst=                ; list of integers
Trajectory.Disperse.WeaponCount=0               ; integer
Trajectory.Disperse.WeaponDelay=1               ; integer
Trajectory.Disperse.WeaponTimer=0               ; integer
Trajectory.Disperse.WeaponScope=0               ; floating point value
Trajectory.Disperse.WeaponSeparate=false        ; boolean
Trajectory.Disperse.WeaponRetarget=false        ; boolean
Trajectory.Disperse.WeaponLocation=false        ; boolean
Trajectory.Disperse.WeaponTendency=false        ; boolean
Trajectory.Disperse.WeaponToAllies=false        ; boolean
Trajectory.Disperse.WeaponToGround=false        ; boolean
- Make sure you set a low `Trajectory.Disperse.RetargetRadius` value unless necessary. If you set `Trajectory.Disperse.WeaponRetarget=true`, also make sure you set `Trajectory.Disperse.Weapons` a low `Range` value unless necessary.
- This does not properly support `Arcing=true` projectiles.
- Note that the listed Weapons in `Trajectory.Disperse.Weapons` must be listed in `[WeaponTypes]` for them to work.
- `Trajectory.Disperse.Weapons` now not support customized `LaserThickness`, `Bolt.ColorN`, `Bolt.DisableN`, `Bolt.Arcs`, `Beam.Color`, `Beam.Duration`  and `Beam.Amplitude`.

2024-05-2100-50-25-ezgif com-video-to-gif-converter
Trajectory=Disperse

2024-05-2102-38-09-ezgif com-video-to-gif-converter
Trajectory.Disperse.UniqueCurve

2024-05-2100-53-47-ezgif com-video-to-gif-converter
Trajectory.Disperse.FacingCoord

2024-05-2100-59-26-ezgif com-video-to-gif-converter
Trajectory.Disperse.LeadTimeCalculate

2024-05-2620-23-27-ezgif com-video-to-gif-converter
Trajectory.Disperse.RotateCoord

2024-05-2100-41-03-ezgif com-video-to-gif-converter
Trajectory.Disperse.Weapons > Straight : Inaccurate

Last, the new Engrave trajectory.

  • Visually, like the thermal lance. Calling it 'trajectory' may not be appropriate. It does not read the settings on the weapon.
    • Trajectory.Engrave.SourceCoord controls the starting point of engraving line segment. Taking the target as the coordinate center. Specifically, it will start from the firing position when set to 0,0 . The height of the point will always at ground level.
    • Trajectory.Engrave.TargetCoord controls the end point of engraving line segment. Taking the target as the coordinate center. The height of the point will always at ground level.
      • Trajectory.Engrave.MirrorCoord controls whether Trajectory.Engrave.SourceCoord and Trajectory.Engrave.TargetCoord need to mirror the lateral value to adapt to the current FLH.
      • Trajectory.Engrave.TheDuration controls the duration of the entire engrave process. Set to 0 will automatically use Trajectory.Engrave.SourceCoord and Trajectory.Engrave.TargetCoord to calculate the process duration.
    • Trajectory.Engrave.IsLaser controls whether laser drawing is required.
      • Trajectory.Engrave.IsSupported controls whether the engrave laser will be brighter and thicker. Need to set Trajectory.Engrave.IsHouseColor or Trajectory.Engrave.IsSingleColor to true.
      • Trajectory.Engrave.IsHouseColor controls whether set the engrave laser to draw using player's team color. These lasers respect Trajectory.Engrave.LaserThickness and Trajectory.Engrave.IsSupported.
      • Trajectory.Engrave.IsSingleColor controls whether set the engrave laser to draw using only Trajectory.Engrave.LaserInnerColor. These lasers respect Trajectory.Engrave.LaserThickness and Trajectory.Engrave.IsSupported.
      • Trajectory.Engrave.LaserInnerColor controls the inner color of the engrave laser.
      • Trajectory.Engrave.LaserOuterColor controls the outer color of the engrave laser.
      • Trajectory.Engrave.LaserOuterSpread controls the spread color of the engrave laser.
      • Trajectory.Engrave.LaserThickness controls the thickness of the engrave laser. Need to set Trajectory.Engrave.IsHouseColor or Trajectory.Engrave.IsSingleColor to true.
      • Trajectory.Engrave.LaserDuration controls the duration of the engrave laser.
      • Trajectory.Engrave.LaserDelay controls how often to draw the engrave laser.
    • Trajectory.Engrave.DamageDelay controls how often to detonate warheads.

In rulesmd.ini:

Trajectory=Engrave                             ; Trajectory type
Trajectory.Engrave.SourceCoord=0,0             ; integer - Forward,Lateral
Trajectory.Engrave.TargetCoord=0,0             ; integer - Forward,Lateral
Trajectory.Engrave.MirrorCoord=true            ; boolean
Trajectory.Engrave.TheDuration=0               ; integer
Trajectory.Engrave.IsLaser=true                ; boolean
Trajectory.Engrave.IsSupported=false           ; boolean
Trajectory.Engrave.IsHouseColor=false          ; boolean
Trajectory.Engrave.IsSingleColor=false         ; boolean
Trajectory.Engrave.LaserInnerColor=0,0,0       ; integer - Red,Green,Blue
Trajectory.Engrave.LaserOuterColor=0,0,0       ; integer - Red,Green,Blue
Trajectory.Engrave.LaserOuterSpread=0,0,0      ; integer - Red,Green,Blue
Trajectory.Engrave.LaserThickness=3            ; integer
Trajectory.Engrave.LaserDuration=1             ; integer
Trajectory.Engrave.LaserDelay=1                ; integer
Trajectory.Engrave.DamageDelay=10              ; integer
- It's best not to let it be intercepted.

2024-05-0401-23-49-ezgif com-video-to-gif-converter
Trajectory=Engrave

The comprehensive display.

2024-05-3016-02-33-ezgif com-video-to-gif-converter
Trajectory.Disperse.Weapons > Straight : Trajectory.Straight.UseDisperseBurst

2024-05-2100-35-04-ezgif com-video-to-gif-converter
Trajectory.Engrave.IsSingleColor
Trajectory.Disperse.Weapons > Straight : Inaccurate

2024-05-2201-39-04-ezgif com-video-to-gif-converter
Trajectory.Engrave.TheDuration
Trajectory.Disperse.Weapons > Straight : Inaccurate

2024-05-2102-40-49-ezgif com-video-to-gif-converter
Trajectory.Engrave.IsSupported
Trajectory.Disperse.CruiseEnable
Trajectory.Disperse.Weapons > Disperse : Trajectory.Disperse.PreAimCoord
Trajectory.Straight.ProximityImpact

New Disperse trajectory and Engrave trajectory with enhanced Straight trajectory
Copy link

github-actions bot commented May 16, 2024

Nightly build for this pull request:

This comment is automatic and is meant to allow guests to get latest nightly builds for this pull request without registering. It is updated on every successful build.

src/Ext/Bullet/Trajectories/StraightTrajectory.cpp Outdated Show resolved Hide resolved
src/Ext/Bullet/Trajectories/StraightTrajectory.cpp Outdated Show resolved Hide resolved
src/Ext/Bullet/Trajectories/StraightTrajectory.cpp Outdated Show resolved Hide resolved
src/Ext/Bullet/Trajectories/StraightTrajectory.cpp Outdated Show resolved Hide resolved
src/Ext/Bullet/Trajectories/StraightTrajectory.cpp Outdated Show resolved Hide resolved
src/Ext/Bullet/Trajectories/StraightTrajectory.cpp Outdated Show resolved Hide resolved
Copy link
Contributor

@chaserli chaserli left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Impressive work. The quantity is so huge that I'm afraid it's almost impossible to review and merge all of these on 1 single PR. imo I suggest detach these into several commits:

  • The "engrave" one
  • The "disperse" one
  • As for the straight trajectory one, see if it's possible to incorporate the "inaccurate" part of Trajectory projectiles enhancement #1246. The biggest concern I noticed is that vector of "Causality" thing you made: Are you sure the technos always live longer than your bullet? If not then pointer invalidation will be quite a big trouble for perf. Try to see if there's a simpler way

@chaserli chaserli added the Needs splitting The PR should be splitted into several separate standalone commits label Jun 21, 2024
@CrimRecya
Copy link
Author

Impressive work. The quantity is so huge that I'm afraid it's almost impossible to review and merge all of these on 1 single PR. imo I suggest detach these into several commits:

  • The "engrave" one
  • The "disperse" one
  • As for the straight trajectory one, see if it's possible to incorporate the "inaccurate" part of Trajectory projectiles enhancement #1246. The biggest concern I noticed is that vector of "Causality" thing you made: Are you sure the technos always live longer than your bullet? If not then pointer invalidation will be quite a big trouble for perf. Try to see if there's a simpler way

Okay. But I have a question about splitting here that whether [the state of mutual reference between my Trajectories, such as Disperse using Straight's ‘UseDisperseBurst’ tag, or Disperse, Straight, and Engrave using CheckSubjectToGround() in Hooks.Obstacles’s at the same time] may cause splitting problems.
And for the ‘Inaccurate’ part of Straight, I already have the corresponding part here, and the issue of null pointers in the Casualty part is actually no longer returning Vector during Merge step, which has passed hundreds of tests in game and no need to worry about this anymore :).

@chaserli
Copy link
Contributor

Okay. But I have a question about splitting here that whether [the state of mutual reference between my Trajectories, such as Disperse using Straight's ‘UseDisperseBurst’ tag, or Disperse, Straight, and Engrave using CheckSubjectToGround() in Hooks.Obstacles’s at the same time] may cause splitting problems. And for the ‘Inaccurate’ part of Straight, I already have the corresponding part here, and the issue of null pointers in the Casualty part is actually no longer returning Vector during Merge step, which has passed hundreds of tests in game and no need to worry about this anymore :).

Got a point. Excuse me for the oversight, I'll have a look later on this one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs splitting The PR should be splitted into several separate standalone commits
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants