public void AddSmokeNadeEffect(DemoParser parser, SmokeEventArgs eventArgs) { if (!NadeEffectFrames.Any(n => n.Tick == parser.CurrentTick)) { NadeEffectFrames.Add(new NadeEffectFrame() { Tick = parser.CurrentTick, Round = MatchInfoManager.Instance.Rounds.Last().Number, NadeEffects = new List <NadeEffect>() }); } if (eventArgs.ThrownBy == null) { return; } var nadeEffect = new NadeEffect() { Guid = Guid.NewGuid(), Duration = 18, Thrower = eventArgs.ThrownBy.SteamID.ToString(), NadeType = EquipmentElement.Smoke, Position = (DemoInfoHelper.SourceToUnityVector(eventArgs.Position.Copy()) / GraphicsManager.PlaybackScale) - GraphicsManager.Instance.Map.Offset }; NadeEffectFrames.Last().NadeEffects.Add(nadeEffect); }
public void UpdateNadeProjectileFrame(NadeProjectileFrame frame, Map map) { _debugText.text = $"There should be {frame.NadeProjectiles.Count} nades"; var leftOverGuids = _nadeProjectiles.Keys.ToList(); for (int i = 0; i < frame.NadeProjectiles.Count; i++) { var nade = frame.NadeProjectiles[i]; if (leftOverGuids.Contains(nade.Guid)) { leftOverGuids.Remove(nade.Guid); } else { AddNadeProjectile(nade, map); } _nadeProjectiles[nade.Guid].UpdatePosition((DemoInfoHelper.SourceToUnityVector(nade.GetPos()) / PlaybackScale) - map.Offset); EnsureNadeHasTrail(nade.Guid); } foreach (Guid guid in leftOverGuids) { RemoveNadeProjectile(guid); } }
public bool AddNadeFrame(DemoParser parser, WeaponFiredEventArgs eventArgs) { if (eventArgs.Weapon.Class != EquipmentClass.Grenade) { return(false); } var nadeThrow = new NadeThrow() { NadeType = eventArgs.Weapon.Weapon, Thrower = eventArgs.Shooter.SteamID.ToString(), Position = new Vector3(-eventArgs.Shooter.Position.X, eventArgs.Shooter.Position.Z, -eventArgs.Shooter.Position.Y), Direction = DemoInfoHelper.ViewAnglesToVector3(eventArgs.Shooter.ViewDirectionX, eventArgs.Shooter.ViewDirectionY) }; NadeThrowFrame frame = null; if (NadeThrowFrames.Count != 0) { frame = NadeThrowFrames.Last(); } if (frame == null || frame.Tick != parser.CurrentTick) { frame = new NadeThrowFrame() { Tick = parser.CurrentTick, Round = MatchInfoManager.Instance.Rounds.Last().Number, NadeThrows = new List <NadeThrow>() { nadeThrow } }; NadeThrowFrames.Add(frame); } else { frame.NadeThrows.Add(nadeThrow); } return(true); }
private void AddNadeProjectile(NadeProjectile nade, Map map) { var pos = (DemoInfoHelper.SourceToUnityVector(nade.GetPos()) / PlaybackScale) - map.Offset; var offset = Vector3.zero; var nadeProjectileClone = Instantiate(NadeProjectilePrefab); nadeProjectileClone.name = $"NadeProjectile {nade.Guid}"; nadeProjectileClone.transform.position = pos + offset; var nadeGraphics = nadeProjectileClone.GetComponent <NadeProjectileGraphics>(); nadeGraphics.NadeType = nade.Type; nadeGraphics.Offset = offset; nadeGraphics.Tickrate = GraphicsManager.Instance.Tickrate; _nadeProjectiles.Add(nade.Guid, nadeGraphics); NadeTrails.Add(nade.Guid, nadeGraphics.CreateTrail()); }
public WeaponFireGraphics CreateWeaponFireGraphics(WeaponFire weaponFire, Vector3 position, PlaybackMode playbackMode) { var weaponFireClone = Instantiate(WeaponFirePrefab); var weaponGraphics = weaponFireClone.GetComponent <WeaponFireGraphics>(); weaponGraphics.Direction = playbackMode == PlaybackMode.ThreeD ? DemoInfoHelper.ViewAnglesToVector3(weaponFire.ViewX, weaponFire.ViewY) : DemoInfoHelper.ViewAnglesToVector3(weaponFire.ViewX, 0); weaponGraphics.HasEndPoint = false; position += PlayersManager.HeadOffset; if (playbackMode == PlaybackMode.TwoD) { position.y = 0.3f; } weaponFireClone.transform.position = weaponGraphics.StartPoint = position; return(weaponGraphics); }
public void UpdateViewAngle(float viewX, float viewY) { TargetViewDirection = DemoInfoHelper.ViewAnglesToVector3(viewX, viewY); }