public void UpdateFowVisibility(bool bForce) { GameObjMgr instance = Singleton <GameObjMgr> .instance; GameFowManager instance2 = Singleton <GameFowManager> .instance; COM_PLAYERCAMP horizonCamp = Singleton <WatchController> .instance.HorizonCamp; uint num = Singleton <FrameSynchr> .instance.CurFrameNum % instance2.InterpolateFrameInterval; uint num2 = Singleton <FrameSynchr> .instance.CurFrameNum % instance2.InterpolateFrameIntervalBullet(true); uint num3 = Singleton <FrameSynchr> .instance.CurFrameNum % instance2.InterpolateFrameIntervalBullet(false); uint num4 = Singleton <FrameSynchr> .instance.CurFrameNum % instance2.InterpolateFrameIntervalHero; List <PoolObjHandle <ActorRoot> > gameActors = instance.GameActors; int count = gameActors.get_Count(); for (int i = 0; i < count; i++) { if (gameActors.get_Item(i)) { ActorRoot handle = gameActors.get_Item(i).handle; ActorTypeDef actorType = handle.TheActorMeta.ActorType; if (actorType == ActorTypeDef.Actor_Type_Hero) { if (handle.ObjID % instance2.InterpolateFrameIntervalHero != num4 && !bForce) { goto IL_219; } } else { if (handle.ObjID % instance2.InterpolateFrameInterval != num && !bForce) { goto IL_219; } if (handle.ActorControl.IsDeadState && !handle.TheStaticData.TheBaseAttribute.DeadControl) { goto IL_219; } } if (actorType != ActorTypeDef.Actor_Type_Organ) { VInt3 worldLoc = new VInt3(handle.location.x, handle.location.z, 0); if (actorType == ActorTypeDef.Actor_Type_Hero || actorType == ActorTypeDef.Actor_Type_Monster) { bool flag = instance2.QueryAttr(handle.location) == FieldObj.EViewBlockType.Grass; handle.HorizonMarker.SetTranslucentMark(HorizonConfig.HideMark.Jungle, flag, false); if (handle.HudControl != null && handle.HudControl.HasStatus(StatusHudType.InJungle) != flag) { if (flag) { handle.HudControl.ShowStatus(StatusHudType.InJungle); } else { handle.HudControl.HideStatus(StatusHudType.InJungle); } } } for (int j = 1; j < 3; j++) { COM_PLAYERCAMP cOM_PLAYERCAMP = (COM_PLAYERCAMP)j; if (cOM_PLAYERCAMP != handle.TheActorMeta.ActorCamp) { handle.HorizonMarker.SetHideMark(cOM_PLAYERCAMP, HorizonConfig.HideMark.Jungle, !instance2.IsSurfaceCellVisibleConsiderNeighbor(worldLoc, cOM_PLAYERCAMP)); } } } } IL_219 :; } Dictionary <int, ShenFuObjects> .Enumerator enumerator = Singleton <ShenFuSystem> .instance._shenFuTriggerPool.GetEnumerator(); while (enumerator.MoveNext()) { KeyValuePair <int, ShenFuObjects> current = enumerator.get_Current(); int key = current.get_Key(); if ((long)key % (long)((ulong)instance2.InterpolateFrameInterval) == (long)((ulong)num)) { KeyValuePair <int, ShenFuObjects> current2 = enumerator.get_Current(); GameObject shenFu = current2.get_Value().ShenFu; GameFowCollector.SetObjVisibleByFow(new PoolObjHandle <ActorRoot>(null), shenFu, instance2, horizonCamp); } } for (int k = 0; k < 3; k++) { if (Singleton <WatchController> .instance.IsWatching || k != (int)horizonCamp) { List <PoolObjHandle <ActorRoot> > campBullet = instance.GetCampBullet((COM_PLAYERCAMP)k); int count2 = campBullet.get_Count(); for (int l = 0; l < count2; l++) { PoolObjHandle <ActorRoot> poolObjHandle = campBullet.get_Item(l); if (poolObjHandle) { ActorRoot handle2 = poolObjHandle.handle; BulletWrapper bulletWrapper = handle2.ActorControl as BulletWrapper; if (bulletWrapper.m_bVisibleByFow) { bool flag2; if (bulletWrapper.GetMoveDelta() > 0) { flag2 = (handle2.ObjID % instance2.InterpolateFrameIntervalBullet(true) != num2); } else { flag2 = (handle2.ObjID % instance2.InterpolateFrameIntervalBullet(false) != num3); } if (!flag2) { if (Singleton <WatchController> .instance.IsWatching && Singleton <WatchController> .instance.CoversCamp(bulletWrapper.actor.TheActorMeta.ActorCamp)) { bulletWrapper.UpdateSubParObjVisibility(true); } else if (bulletWrapper.m_bVisibleByShape) { bulletWrapper.UpdateSubParObjVisibility(GameFowCollector.SetObjWithColVisibleByFow(poolObjHandle, instance2, horizonCamp)); } else { bulletWrapper.UpdateSubParObjVisibility(GameFowCollector.SetObjVisibleByFow(poolObjHandle, handle2.gameObject, instance2, horizonCamp)); } } } } } } } int count3 = this.VirtualParentParticles_.get_Count(); for (int m = 0; m < count3; m++) { GameFowCollector.VirtualParticleAttachContext virtualParticleAttachContext = this.VirtualParentParticles_.get_Item(m); GameObject virtualParticle = this.VirtualParentParticles_.get_Item(m).VirtualParticle; if (!(virtualParticle == null) && this.VirtualParentParticles_.get_Item(m).AttachActor) { if (this.VirtualParentParticles_.get_Item(m).AttachActor.handle.Visible) { virtualParticle.SetLayer("Actor", "Particles", true); } else { virtualParticle.SetLayer("Hide", true); } } } }
public void CollectExplorer(bool bForce) { GameObjMgr instance = Singleton <GameObjMgr> .instance; GameFowManager instance2 = Singleton <GameFowManager> .instance; uint num = Singleton <FrameSynchr> .instance.CurFrameNum % instance2.InterpolateFrameInterval; uint num2 = Singleton <FrameSynchr> .instance.CurFrameNum % instance2.InterpolateFrameIntervalBullet(true); uint num3 = Singleton <FrameSynchr> .instance.CurFrameNum % instance2.InterpolateFrameIntervalBullet(false); uint num4 = Singleton <FrameSynchr> .instance.CurFrameNum % instance2.InterpolateFrameIntervalHero; this.ClearExplorerPosList(); int count = instance.GameActors.get_Count(); for (int i = 0; i < count; i++) { PoolObjHandle <ActorRoot> ptr = instance.GameActors.get_Item(i); if (ptr) { ActorRoot handle = ptr.handle; ActorTypeDef actorType = handle.TheActorMeta.ActorType; if (actorType == ActorTypeDef.Actor_Type_Hero) { if (handle.ObjID % instance2.InterpolateFrameIntervalHero != num4 && !bForce) { goto IL_191; } } else if (handle.ObjID % instance2.InterpolateFrameInterval != num && !bForce) { goto IL_191; } if (actorType != ActorTypeDef.Actor_Type_Organ && (!handle.ActorControl.IsDeadState || handle.TheStaticData.TheBaseAttribute.DeadControl)) { VInt3 vInt = new VInt3(handle.location.x, handle.location.z, 0); if (handle.HorizonMarker != null) { int[] exposedCamps = handle.HorizonMarker.GetExposedCamps(); ACTOR_INFO aCTOR_INFO = ClassObjPool <ACTOR_INFO> .Get(); aCTOR_INFO.camps = exposedCamps; aCTOR_INFO.location = handle.HorizonMarker.GetExposedPos(); this.m_explorerPosList.Add(aCTOR_INFO); } } } IL_191 :; } this.ClearExplorerBulletList(); for (int j = 1; j < 3; j++) { List <PoolObjHandle <ActorRoot> > campBullet = Singleton <GameObjMgr> .instance.GetCampBullet((COM_PLAYERCAMP)j); int count2 = campBullet.get_Count(); for (int k = 0; k < count2; k++) { PoolObjHandle <ActorRoot> ptr2 = campBullet.get_Item(k); if (ptr2) { ActorRoot handle2 = ptr2.handle; BulletWrapper bulletWrapper = handle2.ActorControl as BulletWrapper; if (0 < bulletWrapper.SightRadius) { if (!bForce) { if (bulletWrapper.GetMoveDelta() > 0) { if (handle2.ObjID % instance2.InterpolateFrameIntervalBullet(true) != num2) { goto IL_2AD; } } else if (handle2.ObjID % instance2.InterpolateFrameIntervalBullet(false) != num3) { goto IL_2AD; } } VInt3 location = new VInt3(handle2.location.x, handle2.location.z, 0); BULLET_INFO bULLET_INFO = ClassObjPool <BULLET_INFO> .Get(); bULLET_INFO.radius = bulletWrapper.SightRange; bULLET_INFO.location = location; this.m_explorerBulletList[j - 1].Add(bULLET_INFO); } } IL_2AD :; } } }