public override void Draw() { try { if (DedicatedServer || _lastDrawTick == Tick || _paused) { return; } _lastDrawTick = Tick; DsUtil.Start("draw"); CameraMatrix = Session.Camera.WorldMatrix; CameraPos = CameraMatrix.Translation; CameraFrustrum.Matrix = (Camera.ViewMatrix * Camera.ProjectionMatrix); if (HudUi.TexturesToAdd > 0) { HudUi.DrawTextures(); } if ((UiInput.PlayerCamera || UiInput.FirstPersonView || InGridAiBlock) && !InMenu && !Session.Config.MinimalHud && !MyAPIGateway.Gui.IsCursorVisible) { if (WheelUi.WheelActive) { WheelUi.DrawWheel(); } TargetUi.DrawTargetUi(); } Av.Run(); DsUtil.Complete("draw", true); } catch (Exception ex) { Log.Line($"Exception in SessionDraw: {ex}"); } }
internal void ProfilePerformance() { var netTime1 = DsUtil.GetValue("network1"); var psTime = DsUtil.GetValue("ps"); var piTIme = DsUtil.GetValue("pi"); var pdTime = DsUtil.GetValue("pd"); var paTime = DsUtil.GetValue("pa"); var updateTime = DsUtil.GetValue("shoot"); var drawTime = DsUtil.GetValue("draw"); var av = DsUtil.GetValue("av"); var db = DsUtil.GetValue("db"); var ai = DsUtil.GetValue("ai"); var charge = DsUtil.GetValue("charge"); var acquire = DsUtil.GetValue("acquire"); Log.LineShortDate($"(CPU-T) --- <AI>{ai.Median:0.0000}/{ai.Min:0.0000}/{ai.Max:0.0000} <Acq>{acquire.Median:0.0000}/{acquire.Min:0.0000}/{acquire.Max:0.0000} <SH>{updateTime.Median:0.0000}/{updateTime.Min:0.0000}/{updateTime.Max:0.0000} <CH>{charge.Median:0.0000}/{charge.Min:0.0000}/{charge.Max:0.0000} <PS>{psTime.Median:0.0000}/{psTime.Min:0.0000}/{psTime.Max:0.0000} <PI>{piTIme.Median:0.0000}/{piTIme.Min:0.0000}/{piTIme.Max:0.0000} <PD>{pdTime.Median:0.0000}/{pdTime.Min:0.0000}/{pdTime.Max:0.0000} <PA>{paTime.Median:0.0000}/{paTime.Min:0.0000}/{paTime.Max:0.0000} <DR>{drawTime.Median:0.0000}/{drawTime.Min:0.0000}/{drawTime.Max:0.0000} <AV>{av.Median:0.0000}/{av.Min:0.0000}/{av.Max:0.0000} <NET1>{netTime1.Median:0.0000}/{netTime1.Min:0.0000}/{netTime1.Max:0.0000}> <DB>{db.Median:0.0000}/{db.Min:0.0000}/{db.Max:0.0000}>", "perf"); Log.LineShortDate($"(STATS) -------- AIs:[{GridTargetingAIs.Count}] - WcBlocks:[{IdToCompMap.Count}] - AiReq:[{TargetRequests}] Targ:[{TargetChecks}] Bloc:[{BlockChecks}] Aim:[{CanShoot}] CCast:[{ClosestRayCasts}] RndCast[{RandomRayCasts}] TopCast[{TopRayCasts}]", "stats"); TargetRequests = 0; TargetChecks = 0; BlockChecks = 0; CanShoot = 0; ClosestRayCasts = 0; RandomRayCasts = 0; TopRayCasts = 0; TargetTransfers = 0; TargetSets = 0; TargetResets = 0; AmmoMoveTriggered = 0; Load = 0d; DsUtil.Clean(); }
internal void ProfilePerformance() { var netTime1 = DsUtil.GetValue("network1"); var projectile1Time = DsUtil.GetValue("projectiles1"); var projectile2Time = DsUtil.GetValue("projectiles2"); var updateTime = DsUtil.GetValue("shoot"); var damageTime = DsUtil.GetValue("damage"); var drawTime = DsUtil.GetValue("draw"); var av = DsUtil.GetValue("av"); var db = DsUtil.GetValue("db"); var ai = DsUtil.GetValue("ai"); var charge = DsUtil.GetValue("charge"); var acquire = DsUtil.GetValue("acquire"); Log.LineShortDate($"(CPU-T) --- <Acq>{acquire.Median:0.0000}/{acquire.Min:0.0000}/{acquire.Max:0.0000} <DM>{damageTime.Median:0.0000}/{damageTime.Min:0.0000}/{damageTime.Max:0.0000} <DR>{drawTime.Median:0.0000}/{drawTime.Min:0.0000}/{drawTime.Max:0.0000} <AV>{av.Median:0.0000}/{av.Min:0.0000}/{av.Max:0.0000} <AI>{ai.Median:0.0000}/{ai.Min:0.0000}/{ai.Max:0.0000} <SH>{updateTime.Median:0.0000}/{updateTime.Min:0.0000}/{updateTime.Max:0.0000} <CH>{charge.Median:0.0000}/{charge.Min:0.0000}/{charge.Max:0.0000} <P1>{projectile1Time.Median:0.0000}/{projectile1Time.Min:0.0000}/{projectile1Time.Max:0.0000} <P2>{projectile2Time.Median:0.0000}/{projectile2Time.Min:0.0000}/{projectile2Time.Max:0.0000} <DB>{db.Median:0.0000}/{db.Min:0.0000}/{db.Max:0.0000}> <NET1>{netTime1.Median:0.0000}/{netTime1.Min:0.0000}/{netTime1.Max:0.0000}>"); Log.LineShortDate($"(STATS) -------- AiReq:[{TargetRequests}] Targ:[{TargetChecks}] Bloc:[{BlockChecks}] Aim:[{CanShoot}] CCast:[{ClosestRayCasts}] RndCast[{RandomRayCasts}] TopCast[{TopRayCasts}]"); TargetRequests = 0; TargetChecks = 0; BlockChecks = 0; CanShoot = 0; ClosestRayCasts = 0; RandomRayCasts = 0; TopRayCasts = 0; TargetTransfers = 0; TargetSets = 0; TargetResets = 0; AmmoMoveTriggered = 0; AmmoPulls = 0; Load = 0d; DsUtil.Clean(); }
public override void Draw() { try { if (SuppressWc || DedicatedServer || _lastDrawTick == Tick || _paused) { return; } if (DebugLos) { LosDebuging(); } _lastDrawTick = Tick; DsUtil.Start("draw"); CameraMatrix = Session.Camera.WorldMatrix; CameraPos = CameraMatrix.Translation; CameraFrustrum.Matrix = (Camera.ViewMatrix * Camera.ProjectionMatrix); var newFov = Camera.FovWithZoom; if (!MyUtils.IsEqual(newFov, CurrentFovWithZoom)) { FovChanged(); } CurrentFovWithZoom = newFov; AspectRatio = Camera.ViewportSize.X / Camera.ViewportSize.Y; AspectRatioInv = Camera.ViewportSize.Y / Camera.ViewportSize.X; ScaleFov = Math.Tan(CurrentFovWithZoom * 0.5); if (!Session.Config.MinimalHud && InGridAiBlock) { if (HudUi.TexturesToAdd > 0 || HudUi.KeepBackground) { HudUi.DrawTextures(); } if ((UiInput.PlayerCamera || UiInput.FirstPersonView || UiInput.CameraBlockView) && !InMenu && !MyAPIGateway.Gui.IsCursorVisible && PlayerDummyTargets.ContainsKey(PlayerId)) { TargetUi.DrawTargetUi(); } if (HudUi.AgingTextures) { HudUi.DrawText(); } } Av.Run(); DrawDisabledGuns(); DsUtil.Complete("draw", true); } catch (Exception ex) { Log.Line($"Exception in SessionDraw: {ex}"); } }
public override void Simulate() { try { if (!DedicatedServer) { EntityControlUpdate(); CameraMatrix = Session.Camera.WorldMatrix; CameraPos = CameraMatrix.Translation; PlayerPos = Session.Player?.Character?.WorldAABB.Center ?? Vector3D.Zero; } if (GameLoaded) { DsUtil.Start("ai"); AiLoop(); DsUtil.Complete("ai", true); DsUtil.Start("charge"); if (ChargingWeapons.Count > 0) { UpdateChargeWeapons(); } DsUtil.Complete("charge", true); DsUtil.Start("acquire"); if (AcquireTargets.Count > 0) { CheckAcquire(); } DsUtil.Complete("acquire", true); DsUtil.Start("shoot"); if (ShootingWeapons.Count > 0) { ShootWeapons(); } DsUtil.Complete("shoot", true); } if (!DedicatedServer && !WheelUi.WheelActive && !InMenu) { UpdateLocalAiAndCockpit(); if (UiInput.PlayerCamera && ActiveCockPit != null) { TargetSelection(); } } DsUtil.Start("projectiles1"); Projectiles.Stage1(); DsUtil.Complete("projectiles1", true); } catch (Exception ex) { Log.Line($"Exception in SessionSim: {ex}"); } }
private bool getData() { ConditionUtil c = new ConditionUtil(); DataSet ds = new DataSet(); string[] sqls = tranSql.Split(';'); if (sqls.Length <= 0) { return(true); } foreach (string sql in sqls) { ds.Clear(); string[] ss = sql.Split(','); try { ds = dao.getDataSet(ss[1], c); if (ds.Tables[0].Rows.Count > 0) { if (ss[1].Contains("tx")) { //处理Sqlite图像数据 if (dao.getDbType() == "sqllite") { logstr.Append("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "] ... 获得上传数据" + ss[0] + ",数据总数为:" + ds.Tables[0].Rows.Count.ToString()); wirteXmlToFile(toXmlForSqlite(ds, "datas"), ss[0] + ".xml"); } else { logstr.Append("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "] ... 获得上传数据" + ss[0] + ",数据总数为:" + ds.Tables[0].Rows.Count.ToString()); wirteXmlToFile(DsUtil.toXml(ds, "datas"), ss[0] + ".xml"); } } else { logstr.Append("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "] ... 获得上传数据" + ss[0] + ",数据总数为:" + ds.Tables[0].Rows.Count.ToString()); wirteXmlToFile(DsUtil.toXml(ds, "datas"), ss[0] + ".xml"); } } updateOneData(ss[2], ss[0]); } catch (Exception e) { logstr.Append("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "] ... 获得上传数据" + ss[0] + "失败,失败原因:" + e.Message + e.StackTrace); return(false); } } return(true); }
private string getJson(string id, Object obj, string headstr, int count) { DataSet ds = dao.getDataSet(id, obj); string rtn = DsUtil.toJson(ds, headstr); if (count <= 0) { rtn = rtn.Replace("#recordcount#", ds.Tables[0].Rows.Count.ToString()); } else { rtn = rtn.Replace("#recordcount#", count.ToString()); } return(rtn); }
public override void Draw() { try { if (SupressLoad || DedicatedServer || _lastDrawTick == Tick || _paused) { return; } _lastDrawTick = Tick; DsUtil.Start("draw"); CameraMatrix = Session.Camera.WorldMatrix; CameraPos = CameraMatrix.Translation; CameraFrustrum.Matrix = (Camera.ViewMatrix * Camera.ProjectionMatrix); var newFov = Camera.FovWithZoom; if (!MyUtils.IsEqual(newFov, CurrentFovWithZoom)) { FovChanged(); } CurrentFovWithZoom = newFov; ScaleFov = Math.Tan(CurrentFovWithZoom * 0.5); if (HudUi.TexturesToAdd > 0) { HudUi.DrawTextures(); } if ((UiInput.PlayerCamera || UiInput.FirstPersonView || InGridAiBlock) && !InMenu && !Session.Config.MinimalHud && !MyAPIGateway.Gui.IsCursorVisible) { TargetUi.DrawTargetUi(); } Av.Run(); DsUtil.Complete("draw", true); } catch (Exception ex) { Log.Line($"Exception in SessionDraw: {ex}"); } }
private void ProcessDbsCallBack() { try { DsUtil.Start("db"); for (int d = 0; d < DbsToUpdate.Count; d++) { var db = DbsToUpdate[d]; db.TargetingInfo.Clean(); if (db.MyPlanetTmp != null) { db.MyPlanetInfo(); } foreach (var sub in db.PrevSubGrids) { db.SubGrids.Add(sub); } if (db.SubGridsChanged) { db.SubGridChanges(); } for (int i = 0; i < db.SortedTargets.Count; i++) { var tInfo = db.SortedTargets[i]; tInfo.Target = null; tInfo.MyAi = null; tInfo.MyGrid = null; tInfo.TargetAi = null; TargetInfoPool.Return(db.SortedTargets[i]); } db.SortedTargets.Clear(); db.Targets.Clear(); var newEntCnt = db.NewEntities.Count; db.SortedTargets.Capacity = newEntCnt; for (int i = 0; i < newEntCnt; i++) { var detectInfo = db.NewEntities[i]; var ent = detectInfo.Parent; if (ent.Physics == null) { continue; } var grid = ent as MyCubeGrid; GridAi targetAi = null; if (grid != null) { GridTargetingAIs.TryGetValue(grid, out targetAi); } var targetInfo = TargetInfoPool.Get(); targetInfo.Init(ref detectInfo, db.MyGrid, db, targetAi); db.SortedTargets.Add(targetInfo); db.Targets[ent] = targetInfo; if (targetInfo.Target == db.Focus.Target[0] || targetInfo.Target == db.Focus.Target[1] || targetInfo.DistSqr < db.MaxTargetingRangeSqr && targetInfo.DistSqr < db.TargetingInfo.ThreatRangeSqr && targetInfo.OffenseRating > 0 && (targetInfo.EntInfo.Relationship != MyRelationsBetweenPlayerAndBlock.Friends || targetInfo.EntInfo.Relationship == MyRelationsBetweenPlayerAndBlock.FactionShare)) { db.TargetingInfo.TargetInRange = true; db.TargetingInfo.ThreatRangeSqr = targetInfo.DistSqr; } } db.NewEntities.Clear(); db.SortedTargets.Sort(TargetCompare); db.TargetAis.Clear(); db.TargetAis.AddRange(db.TargetAisTmp); db.TargetAisTmp.Clear(); db.Obstructions.Clear(); db.Obstructions.AddRange(db.ObstructionsTmp); db.ObstructionsTmp.Clear(); if (db.PlanetSurfaceInRange) { db.StaticsInRangeTmp.Add(db.MyPlanet); } db.StaticsInRange.Clear(); db.StaticsInRange.AddRange(db.StaticsInRangeTmp); db.StaticsInRangeTmp.Clear(); db.StaticEntitiesInRange = db.StaticsInRange.Count > 0; db.MyStaticInfo(); db.DbReady = db.SortedTargets.Count > 0 || db.TargetAis.Count > 0 || Tick - db.LiveProjectileTick < 3600 || db.LiveProjectile.Count > 0 || db.ControllingPlayers.Keys.Count > 0 || db.FirstRun; db.MyShield = db.MyShieldTmp; db.NaturalGravity = db.FakeShipController.GetNaturalGravity(); db.ShieldNear = db.ShieldNearTmp; db.BlockCount = db.MyGrid.BlocksCount; db.Concealed = ((uint)db.MyGrid.Flags & 4) > 0; if (db.ScanBlockGroups || db.WeaponTerminalReleased()) { db.ReScanBlockGroups(); } db.FirstRun = false; } DbsToUpdate.Clear(); DsUtil.Complete("db", true); DbCallBackComplete = true; } catch (Exception ex) { Log.Line($"Exception in ProcessDbsCallBack: {ex}"); } }
internal void PurgeAll() { FutureEvents.Purge((int)Tick); PurgeTerminalSystem(); foreach (var reports in Reporter.ReportData.Values) { foreach (var report in reports) { report.Clean(); Reporter.ReportPool.Return(report); } reports.Clear(); } Reporter.ReportData.Clear(); Reporter.ReportPool.Clean(); PacketsToClient.Clear(); PacketsToServer.Clear(); foreach (var suit in (PacketType[])Enum.GetValues(typeof(PacketType))) { foreach (var pool in PacketPools.Values) { pool.Clean(); } PacketPools.Clear(); } foreach (var item in _effectedCubes) { var cubeid = item.Key; var blockInfo = item.Value; var functBlock = blockInfo.FunctBlock; var cube = blockInfo.CubeBlock; if (cube == null || cube.MarkedForClose) { _effectPurge.Enqueue(cubeid); continue; } functBlock.EnabledChanged -= ForceDisable; functBlock.Enabled = blockInfo.FirstState; cube.SetDamageEffect(false); _effectPurge.Enqueue(cubeid); } while (_effectPurge.Count != 0) { _effectedCubes.Remove(_effectPurge.Dequeue()); } Av.Glows.Clear(); Av.AvShotPool.Clean(); DeferedUpBlockTypeCleanUp(true); BlockTypeCleanUp.Clear(); foreach (var map in GridToFatMap.Keys) { RemoveGridFromMap(map); } GridToFatMap.Clear(); FatMapPool.Clean(); DirtyGridsTmp.Clear(); foreach (var structure in WeaponPlatforms.Values) { foreach (var system in structure.WeaponSystems) { foreach (var ammo in system.Value.WeaponAmmoTypes) { ammo.AmmoDef.Const.PrimeEntityPool?.Clean(); } } structure.WeaponSystems.Clear(); } WeaponPlatforms.Clear(); foreach (var gridToMap in GridToBlockTypeMap) { foreach (var map in gridToMap.Value) { map.Value.ClearImmediate(); ConcurrentListPool.Return(map.Value); } gridToMap.Value.Clear(); BlockTypePool.Return(gridToMap.Value); } GridToBlockTypeMap.Clear(); foreach (var playerGrids in PlayerEntityIdInRange) { playerGrids.Value.Clear(); } PlayerEntityIdInRange.Clear(); DirtyGrids.Clear(); DsUtil.Purge(); DsUtil2.Purge(); _effectActive = false; ShootingWeapons.Clear(); AcquireTargets.Clear(); RemoveEffectsFromGrid.Clear(); WeaponAmmoPullQueue.Clear(); AmmoToPullQueue.Clear(); Hits.Clear(); AllArmorBaseDefinitions.Clear(); HeavyArmorBaseDefinitions.Clear(); AllArmorBaseDefinitions.Clear(); AcquireTargets.Clear(); ChargingWeapons.Clear(); LargeBlockSphereDb.Clear(); SmallBlockSphereDb.Clear(); AnimationsToProcess.Clear(); _subTypeIdToWeaponDefs.Clear(); WeaponDefinitions.Clear(); SlimsSortedList.Clear(); _destroyedSlims.Clear(); _destroyedSlimsClient.Clear(); _slimHealthClient.Clear(); _slimsSet.Clear(); _turretDefinitions.Clear(); foreach (var comp in CompsToStart) { PlatFormPool.Return(comp.Platform); comp.Platform = null; } foreach (var readd in CompReAdds) { PlatFormPool.Return(readd.Comp.Platform); readd.Comp.Platform = null; } foreach (var comp in CompsDelayed) { PlatFormPool.Return(comp.Platform); comp.Platform = null; } PlatFormPool.Clean(); CompsToStart.ClearImmediate(); CompsDelayed.Clear(); CompReAdds.Clear(); GridAiPool.Clean(); Av.RipMap.Clear(); foreach (var mess in Av.KeensBrokenParticles) { Av.KeenMessPool.Return(mess); } Av.KeensBrokenParticles.Clear(); foreach (var av in Av.AvShots) { av.GlowSteps.Clear(); Av.AvShotPool.Return(av); } Av.AvShotPool.Clean(); Av.AvBarrels1.Clear(); Av.AvBarrels2.Clear(); Av.AvShots.Clear(); Av.HitSounds.Clear(); foreach (var errorpkt in ClientSideErrorPktList) { errorpkt.Packet.CleanUp(); } ClientSideErrorPktList.Clear(); GridEffectPool.Clean(); GridEffectsPool.Clean(); BlockTypePool.Clean(); ConcurrentListPool.Clean(); GroupInfoPool.Clean(); TargetInfoPool.Clean(); Projectiles.Clean(); WeaponCoreBlockDefs.Clear(); VanillaIds.Clear(); VanillaCoreIds.Clear(); WeaponCoreFixedBlockDefs.Clear(); WeaponCoreTurretBlockDefs.Clear(); foreach (var p in Projectiles.ProjectilePool) { p.AmmoEffect?.Stop(); } Projectiles.ShrapnelToSpawn.Clear(); Projectiles.ShrapnelPool.Clean(); Projectiles.FragmentPool.Clean(); Projectiles.ActiveProjetiles.ApplyChanges(); Projectiles.ActiveProjetiles.Clear(); Projectiles.ProjectilePool.Clear(); Projectiles.HitEntityPool.Clean(); Projectiles.CleanUp.Clear(); Projectiles.VirtInfoPool.Clean(); DbsToUpdate.Clear(); GridTargetingAIs.Clear(); DsUtil = null; DsUtil2 = null; SlimsSortedList = null; Enforced = null; StallReporter = null; Proccessor = null; Physics = null; Camera = null; Projectiles = null; TrackingAi = null; UiInput = null; TargetUi = null; Placer = null; WheelUi = null; TargetGps = null; SApi.Unload(); SApi = null; Api = null; ApiServer = null; Reporter = null; WeaponDefinitions = null; AnimationsToProcess = null; ProjectileTree.Clear(); ProjectileTree = null; Av = null; HudUi = null; AllDefinitions = null; SoundDefinitions = null; ActiveCockPit = null; ActiveControlBlock = null; ControlledEntity = null; }
internal void PurgeAll() { PurgedAll = true; FutureEvents.Purge((int)Tick); foreach (var comp in CompsToStart) { if (comp?.Platform != null) { CloseComps(comp.MyCube); } } foreach (var readd in CompReAdds) { if (!readd.Ai.Closed) { readd.Ai.AiForceClose(); } if (readd.Comp?.Platform != null) { CloseComps(readd.Comp.MyCube); } } foreach (var comp in CompsDelayed) { if (comp?.Platform != null) { CloseComps(comp.MyCube); } } foreach (var gridAi in DelayedAiClean) { if (!gridAi.Closed) { gridAi.AiForceClose(); } } PlatFormPool.Clean(); CompsToStart.ClearImmediate(); DelayedAiClean.ClearImmediate(); CompsDelayed.Clear(); CompReAdds.Clear(); GridAiPool.Clean(); PurgeTerminalSystem(this); HudUi.Purge(); TerminalMon.Purge(); foreach (var reports in Reporter.ReportData.Values) { foreach (var report in reports) { report.Clean(); Reporter.ReportPool.Return(report); } reports.Clear(); } Reporter.ReportData.Clear(); Reporter.ReportPool.Clean(); PacketsToClient.Clear(); PacketsToServer.Clear(); AcqManager.Clean(); CleanSounds(true); foreach (var e in Emitters) { e.StopSound(true); } foreach (var e in Av.HitEmitters) { e.StopSound(true); } foreach (var e in Av.FireEmitters) { e.StopSound(true); } foreach (var e in Av.TravelEmitters) { e.StopSound(true); } Emitters.Clear(); Av.HitEmitters.Clear(); Av.FireEmitters.Clear(); Av.TravelEmitters.Clear(); foreach (var item in EffectedCubes) { var cubeid = item.Key; var blockInfo = item.Value; var functBlock = blockInfo.FunctBlock; if (functBlock == null || functBlock.MarkedForClose) { _effectPurge.Enqueue(cubeid); continue; } functBlock.EnabledChanged -= ForceDisable; functBlock.Enabled = blockInfo.FirstState; functBlock.SetDamageEffect(false); if (HandlesInput) { functBlock.AppendingCustomInfo -= blockInfo.AppendCustomInfo; } _effectPurge.Enqueue(cubeid); } while (_effectPurge.Count != 0) { EffectedCubes.Remove(_effectPurge.Dequeue()); } Av.Glows.Clear(); Av.AvShotPool.Clean(); DeferedUpBlockTypeCleanUp(true); BlockTypeCleanUp.Clear(); foreach (var map in GridToInfoMap.Keys) { RemoveGridFromMap(map); } GridToInfoMap.Clear(); GridMapPool.Clean(); DirtyGridsTmp.Clear(); foreach (var structure in WeaponPlatforms.Values) { foreach (var system in structure.WeaponSystems) { system.Value.PreFirePairs.Clear(); system.Value.FireWhenDonePairs.Clear(); system.Value.FirePerShotPairs.Clear(); system.Value.RotatePairs.Clear(); system.Value.ReloadPairs.Clear(); foreach (var ammo in system.Value.AmmoTypes) { ammo.AmmoDef.Const.PrimeEntityPool?.Clean(); ammo.AmmoDef.Const.HitDefaultSoundPairs.Clear(); ammo.AmmoDef.Const.HitVoxelSoundPairs.Clear(); ammo.AmmoDef.Const.HitShieldSoundPairs.Clear(); ammo.AmmoDef.Const.HitFloatingSoundPairs.Clear(); ammo.AmmoDef.Const.HitPlayerSoundPairs.Clear(); ammo.AmmoDef.Const.TravelSoundPairs.Clear(); ammo.AmmoDef.Const.CustomSoundPairs.Clear(); } } structure.WeaponSystems.Clear(); } WeaponPlatforms.Clear(); foreach (var gridToMap in GridToBlockTypeMap) { foreach (var map in gridToMap.Value) { ConcurrentListPool.Return(map.Value); } gridToMap.Value.Clear(); BlockTypePool.Return(gridToMap.Value); } GridToBlockTypeMap.Clear(); foreach (var playerGrids in PlayerEntityIdInRange) { playerGrids.Value.Clear(); } PlayerEntityIdInRange.Clear(); DirtyGridInfos.Clear(); DsUtil.Purge(); DsUtil2.Purge(); ShootingWeapons.Clear(); WeaponToPullAmmo.Clear(); AmmoToPullQueue.Clear(); ChargingWeaponsIndexer.Clear(); WeaponsToRemoveAmmoIndexer.Clear(); ChargingWeapons.Clear(); Hits.Clear(); HomingWeapons.Clear(); GridToMasterAi.Clear(); Players.Clear(); IdToCompMap.Clear(); AllArmorBaseDefinitions.Clear(); HeavyArmorBaseDefinitions.Clear(); AllArmorBaseDefinitions.Clear(); AcquireTargets.Clear(); LargeBlockSphereDb.Clear(); SmallBlockSphereDb.Clear(); AnimationsToProcess.Clear(); _subTypeIdToWeaponDefs.Clear(); WeaponDefinitions.Clear(); SlimsSortedList.Clear(); _destroyedSlims.Clear(); _destroyedSlimsClient.Clear(); _slimHealthClient.Clear(); _slimsSet.Clear(); _turretDefinitions.Clear(); _tmpNearByBlocks.Clear(); foreach (var av in Av.AvShots) { av.GlowSteps.Clear(); Av.AvShotPool.Return(av); } Av.AvShotPool.Clean(); Av.AvBarrels1.Clear(); Av.AvBarrels2.Clear(); Av.AvShots.Clear(); Av.HitSounds.Clear(); foreach (var errorpkt in ClientSideErrorPkt) { errorpkt.Packet.CleanUp(); } ClientSideErrorPkt.Clear(); GridEffectPool.Clean(); GridEffectsPool.Clean(); BlockTypePool.Clean(); ConcurrentListPool.Clean(); TargetInfoPool.Clean(); PacketObjPool.Clean(); InventoryMoveRequestPool.Clean(); WeaponCoreBlockDefs.Clear(); VanillaIds.Clear(); VanillaCoreIds.Clear(); WeaponCoreFixedBlockDefs.Clear(); WeaponCoreTurretBlockDefs.Clear(); VoxelCaches.Clear(); ArmorCubes.Clear(); foreach (var p in Projectiles.ProjectilePool) { p.Info?.AvShot?.AmmoEffect?.Stop(); } Projectiles.ShrapnelToSpawn.Clear(); Projectiles.ShrapnelPool.Clean(); Projectiles.FragmentPool.Clean(); Projectiles.ActiveProjetiles.Clear(); Projectiles.ProjectilePool.Clear(); Projectiles.HitEntityPool.Clean(); Projectiles.VirtInfoPool.Clean(); DbsToUpdate.Clear(); GridTargetingAIs.Clear(); DsUtil = null; DsUtil2 = null; SlimsSortedList = null; Settings = null; StallReporter = null; TerminalMon = null; Physics = null; Camera = null; Projectiles = null; TrackingAi = null; UiInput = null; TargetUi = null; Placer = null; TargetGps = null; SApi.Unload(); SApi = null; Api = null; ApiServer = null; Reporter = null; WeaponDefinitions = null; AnimationsToProcess = null; ProjectileTree.Clear(); ProjectileTree = null; Av = null; HudUi = null; AllDefinitions = null; SoundDefinitions = null; ActiveCockPit = null; ActiveControlBlock = null; ControlledEntity = null; TmpStorage = null; }
private void ProcessDbsCallBack() { try { DsUtil.Start("db"); for (int d = 0; d < DbsToUpdate.Count; d++) { var db = DbsToUpdate[d]; using (db.Ai.DbLock.AcquireExclusiveUsing()) { var ai = db.Ai; if (ai.MyGrid.MarkedForClose || ai.MarkedForClose || db.Version != ai.Version) { ai.ScanInProgress = false; continue; } if (ai.MyPlanetTmp != null) { ai.MyPlanetInfo(); } foreach (var sub in ai.PrevSubGrids) { ai.SubGrids.Add((MyCubeGrid)sub); } if (ai.SubGridsChanged) { ai.SubGridChanges(false, true); } ai.TargetingInfo.Clean(ai); ai.CleanSortedTargets(); ai.Targets.Clear(); var newEntCnt = ai.NewEntities.Count; ai.SortedTargets.Capacity = newEntCnt; for (int i = 0; i < newEntCnt; i++) { var detectInfo = ai.NewEntities[i]; var ent = detectInfo.Parent; if (ent.Physics == null) { continue; } var grid = ent as MyCubeGrid; GridAi targetAi = null; if (grid != null) { GridTargetingAIs.TryGetValue(grid, out targetAi); } var targetInfo = TargetInfoPool.Get(); targetInfo.Init(ref detectInfo, ai.MyGrid, ai, targetAi); ai.SortedTargets.Add(targetInfo); ai.Targets[ent] = targetInfo; var checkFocus = ai.Construct.Data.Repo.FocusData.HasFocus && targetInfo.Target?.EntityId == ai.Construct.Data.Repo.FocusData.Target[0] || targetInfo.Target?.EntityId == ai.Construct.Data.Repo.FocusData.Target[1]; if (targetInfo.Drone) { ai.TargetingInfo.DroneAdd(ai, targetInfo); } if (ai.RamProtection && targetInfo.DistSqr < 136900 && targetInfo.IsGrid) { ai.TargetingInfo.RamProximity = true; } if (targetInfo.DistSqr < ai.MaxTargetingRangeSqr && (checkFocus || targetInfo.OffenseRating > 0)) { if (checkFocus || targetInfo.DistSqr < ai.TargetingInfo.ThreatRangeSqr && targetInfo.EntInfo.Relationship == MyRelationsBetweenPlayerAndBlock.Enemies) { ai.TargetingInfo.ThreatInRange = true; ai.TargetingInfo.ThreatRangeSqr = targetInfo.DistSqr; } if (checkFocus || targetInfo.DistSqr < ai.TargetingInfo.OtherRangeSqr && targetInfo.EntInfo.Relationship != MyRelationsBetweenPlayerAndBlock.Enemies) { ai.TargetingInfo.OtherInRange = true; ai.TargetingInfo.OtherRangeSqr = targetInfo.DistSqr; } if (targetInfo.Drone && targetInfo.DistSqr < ai.TargetingInfo.DroneRangeSqr) { ai.TargetingInfo.DroneInRange = true; ai.TargetingInfo.DroneRangeSqr = targetInfo.DistSqr; } } } ai.NewEntities.Clear(); ai.SortedTargets.Sort(TargetCompare); ai.TargetAis.Clear(); ai.TargetAis.AddRange(ai.TargetAisTmp); ai.TargetAisTmp.Clear(); ai.Obstructions.Clear(); ai.Obstructions.AddRange(ai.ObstructionsTmp); ai.ObstructionsTmp.Clear(); ai.MyShield = null; ai.ShieldNear = false; ai.FriendlyShieldNear = false; if (ai.NearByShieldsTmp.Count > 0) { ai.NearByShield(); } ai.StaticsInRange.Clear(); ai.StaticsInRange.AddRange(ai.StaticsInRangeTmp); ai.StaticsInRangeTmp.Clear(); ai.StaticEntitiesInRange = ai.StaticsInRange.Count > 0; ai.MyStaticInfo(); ai.NaturalGravity = ai.FakeShipController.GetNaturalGravity(); ai.BlockCount = ai.MyGrid.BlocksCount; ai.NearByEntities = ai.NearByEntitiesTmp; if (!ai.TargetingInfo.ThreatInRange && ai.LiveProjectile.Count > 0) { ai.TargetingInfo.ThreatInRange = true; ai.TargetingInfo.ThreatRangeSqr = 0; } ai.TargetingInfo.SomethingInRange = ai.TargetingInfo.ThreatInRange || ai.TargetingInfo.OtherInRange; ai.DbReady = ai.SortedTargets.Count > 0 || ai.TargetAis.Count > 0 || Tick - ai.LiveProjectileTick < 3600 || ai.LiveProjectile.Count > 0 || ai.Construct.RootAi.Data.Repo.ControllingPlayers.Count > 0 || ai.FirstRun; MyCubeBlock activeCube; ai.AiSleep = ai.Construct.RootAi.Data.Repo.ControllingPlayers.Count <= 0 && (!ai.TargetingInfo.ThreatInRange && !ai.TargetingInfo.OtherInRange || !ai.TargetNonThreats && ai.TargetingInfo.OtherInRange) && (ai.Data.Repo.ActiveTerminal <= 0 || MyEntities.TryGetEntityById(ai.Data.Repo.ActiveTerminal, out activeCube) && activeCube != null && !ai.SubGrids.Contains(activeCube.CubeGrid)); ai.DbUpdated = true; ai.FirstRun = false; ai.ScanInProgress = false; } } DbsToUpdate.Clear(); DsUtil.Complete("db", true); DbUpdating = false; } catch (Exception ex) { Log.Line($"Exception in ProcessDbsCallBack: {ex}"); } }
public string getJson(string id, Object obj, string headstr) { DataSet ds = dao.getDataSet(id, obj); return(DsUtil.toJson(ds, headstr)); }
public override void Simulate() { try { if (SuppressWc) { return; } if (!DedicatedServer) { EntityControlUpdate(); CameraMatrix = Session.Camera.WorldMatrix; CameraPos = CameraMatrix.Translation; PlayerPos = Session.Player?.Character?.WorldAABB.Center ?? Vector3D.Zero; } if (GameLoaded) { DsUtil.Start("ai"); AiLoop(); DsUtil.Complete("ai", true); DsUtil.Start("charge"); if (ChargingWeapons.Count > 0) { UpdateChargeWeapons(); } DsUtil.Complete("charge", true); DsUtil.Start("acquire"); if (AcquireTargets.Count > 0) { CheckAcquire(); } DsUtil.Complete("acquire", true); DsUtil.Start("shoot"); if (ShootingWeapons.Count > 0) { ShootWeapons(); } DsUtil.Complete("shoot", true); } if (!DedicatedServer && !InMenu) { UpdateLocalAiAndCockpit(); if ((UiInput.PlayerCamera && ActiveCockPit != null || ActiveControlBlock is MyRemoteControl && !UiInput.PlayerCamera || UiInput.CameraBlockView) && PlayerDummyTargets.ContainsKey(PlayerId)) { TargetSelection(); } } DsUtil.Start("ps"); Projectiles.SpawnAndMove(); DsUtil.Complete("ps", true); DsUtil.Start("pi"); Projectiles.Intersect(); DsUtil.Complete("pi", true); DsUtil.Start("pd"); Projectiles.Damage(); DsUtil.Complete("pd", true); DsUtil.Start("pa"); Projectiles.AvUpdate(); DsUtil.Complete("pa", true); DsUtil.Start("av"); if (!DedicatedServer) { Av.End(); } DsUtil.Complete("av", true); if (MpActive) { DsUtil.Start("network1"); if (PacketsToClient.Count > 0 || PrunedPacketsToClient.Count > 0) { ProccessServerPacketsForClients(); } if (PacketsToServer.Count > 0) { ProccessClientPacketsForServer(); } if (EwarNetDataDirty) { SendEwaredBlocks(); } DsUtil.Complete("network1", true); } } catch (Exception ex) { Log.Line($"Exception in SessionSim: {ex}"); } }
public override void UpdateBeforeSimulation() { try { // // Finish work from last frame // DsUtil.Start("projectiles2"); Projectiles.Stage2(); DsUtil.Complete("projectiles2", true); DsUtil.Start("damage"); if (_effectedCubes.Count > 0) { ApplyGridEffect(); } if (Tick60) { GridEffects(); } if (Hits.Count > 0) { ProcessHits(); } DsUtil.Complete("damage", true); if (MpActive) { DsUtil.Start("network1"); if (WeaponsToSync.Count > 0) { Proccessor.Proccess(); } if (UiInput.InputChanged && ActiveControlBlock != null) { SendMouseUpdate(ActiveControlBlock); } if (ClientGridResyncRequests.Count > 0) { ProccessGridResyncRequests(); } Proccessor.AddPackets(); if (PacketsToClient.Count > 0) { ProccessServerPacketsForClients(); } if (PacketsToServer.Count > 0) { ProccessClientPacketsForServer(); } if (ClientSideErrorPktList.Count > 0) { ReproccessClientErrorPackets(); } DsUtil.Complete("network1", true); } DsUtil.Start("av"); if (!DedicatedServer) { Av.End(); } DsUtil.Complete("av", true); // // Finished last frame // Timings(); if (!WeaponAmmoRemoveQueue.IsEmpty && CTask.IsComplete) { if (CTask.valid && CTask.Exceptions != null) { TaskHasErrors(ref CTask, "CTask"); } CTask = MyAPIGateway.Parallel.StartBackground(AmmoToRemove, RemoveAmmo); } if (!WeaponAmmoPullQueue.IsEmpty && ITask.IsComplete) { if (ITask.valid && ITask.Exceptions != null) { TaskHasErrors(ref ITask, "ITask"); } ITask = MyAPIGateway.Parallel.StartBackground(AmmoPull, MoveAmmo); } if (!CompsToStart.IsEmpty) { StartComps(); } if (Tick120 && CompsDelayed.Count > 0) { DelayedComps(); } if (CompReAdds.Count > 0) { ChangeReAdds(); } if (Tick3600 && MpActive) { NetReport(); } if (Tick180) { ProfilePerformance(); } FutureEvents.Tick(Tick); if (!DedicatedServer && ActiveControlBlock != null && !InMenu) { WheelUi.UpdatePosition(); } } catch (Exception ex) { Log.Line($"Exception in SessionBeforeSim: {ex}"); } }
public string getJson(string id, string sql, string headstr) { DataSet ds = dao.getDataSet(id, sql); return(DsUtil.toJson(ds, headstr)); }
public override void Simulate() { try { if (!DedicatedServer) { EntityControlUpdate(); CameraMatrix = Session.Camera.WorldMatrix; CameraPos = CameraMatrix.Translation; PlayerPos = Session.Player?.Character?.WorldAABB.Center ?? Vector3D.Zero; } if (GameLoaded) { DsUtil.Start("ai"); AiLoop(); DsUtil.Complete("ai", true); DsUtil.Start("charge"); if (ChargingWeapons.Count > 0) { UpdateChargeWeapons(); } DsUtil.Complete("charge", true); DsUtil.Start("acquire"); if (AcquireTargets.Count > 0) { CheckAcquire(); } DsUtil.Complete("acquire", true); DsUtil.Start("shoot"); if (ShootingWeapons.Count > 0) { ShootWeapons(); } DsUtil.Complete("shoot", true); } if (!DedicatedServer && !WheelUi.WheelActive && !InMenu) { UpdateLocalAiAndCockpit(); if (UiInput.PlayerCamera && ActiveCockPit != null) { TargetSelection(); } } if (FragmentsNeedingEntities.Count > 0) { Projectiles.PrepFragmentEntities(); } DsUtil.Start("projectiles"); Projectiles.Update(); DsUtil.Complete("projectiles", true); DsUtil.Start("network1"); if (WeaponsToSync.Count > 0) { Proccessor.Proccess(); } DsUtil.Complete("network1", true); /* * if (!DedicatedServer) * { * //PTask = MyAPIGateway.Parallel.StartBackground(Projectiles.Update); * if (WeaponsToSync.Count > 0) NTask = MyAPIGateway.Parallel.StartBackground(Proccessor.Proccess); * } */ } catch (Exception ex) { Log.Line($"Exception in SessionSim: {ex}"); } }
public override void UpdateBeforeSimulation() { try { DsUtil.Start("av"); if (!DedicatedServer) { Av.End(); } DsUtil.Complete("av", true); Timings(); if (!WeaponAmmoRemoveQueue.IsEmpty && CTask.IsComplete) { if (CTask.valid && CTask.Exceptions != null) { TaskHasErrors(ref CTask, "CTask"); } CTask = MyAPIGateway.Parallel.StartBackground(AmmoToRemove, RemoveAmmo); } if (!WeaponAmmoPullQueue.IsEmpty && ITask.IsComplete) { if (ITask.valid && ITask.Exceptions != null) { TaskHasErrors(ref ITask, "ITask"); } ITask = MyAPIGateway.Parallel.StartBackground(AmmoPull, MoveAmmo); } if (!CompsToStart.IsEmpty) { StartComps(); } if (Tick120 && CompsDelayed.Count > 0) { DelayedComps(); } if (CompReAdds.Count > 0) { ChangeReAdds(); } if (Tick3600 && MpActive) { NetReport(); } if (Tick180) { ProfilePerformance(); } FutureEvents.Tick(Tick); if (!DedicatedServer && UiInput.PlayerCamera && !InMenu) { WheelUi.UpdatePosition(); } } catch (Exception ex) { Log.Line($"Exception in SessionBeforeSim: {ex}"); } }
public override void UpdateAfterSimulation() { try { if (Placer != null) { UpdatePlacer(); } if (!DedicatedServer) { ProcessAnimations(); } /* * DsUtil.Start("projectiles"); * if (!DedicatedServer && false) * { * if (!PTask.IsComplete) * PTask.Wait(); * * if (PTask.IsComplete && PTask.valid && PTask.Exceptions != null) * TaskHasErrors(ref PTask, "PTask"); * } * else Projectiles.Update(); * * DsUtil.Complete("projectiles", true); */ if (_effectedCubes.Count > 0) { ApplyGridEffect(); } if (Tick60) { GridEffects(); } if (GridTask.IsComplete) { CheckDirtyGrids(); } DsUtil.Start("damage"); if (Hits.Count > 0) { ProcessHits(); } DsUtil.Complete("damage", true); if (IsClient) { if (!MTask.IsComplete) { MTask.Wait(); } if (MTask.IsComplete && MTask.valid && MTask.Exceptions != null) { TaskHasErrors(ref MTask, "MTask"); } } /* * DsUtil.Start("network"); * if (!DedicatedServer) * { * if (!NTask.IsComplete) * NTask.Wait(); * * if (NTask.IsComplete && NTask.valid && NTask.Exceptions != null) * TaskHasErrors(ref NTask, "NTask"); * } * else if (WeaponsToSync.Count > 0) Proccessor.Proccess(); */ DsUtil.Start("network2"); Proccessor.AddPackets(); if (MpActive && !HandlesInput) { if (PacketsToClient.Count > 0) { ProccessServerPacketsForClients(); } if (PacketsToServer.Count > 0) { ProccessClientPacketsForServer(); } } DsUtil.Complete("network2", true); } catch (Exception ex) { Log.Line($"Exception in SessionAfterSim: {ex}"); } }