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 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); }
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()); }