Exemplo n.º 1
0
 public void ConditionalUpdateShape()
 {
     if (this.dirty)
     {
         ActorRoot handle = this.owner.handle;
         if (this.isBox && handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Bullet)
         {
             BulletWrapper bulletWrapper = handle.ActorControl as BulletWrapper;
             if (bulletWrapper != null && bulletWrapper.GetMoveCollisiong())
             {
                 this.UpdateShape(handle.location, handle.forward, bulletWrapper.GetMoveDelta());
             }
             else
             {
                 this.UpdateShape(handle.location, handle.forward);
             }
         }
         else
         {
             this.UpdateShape(handle.location, handle.forward);
         }
     }
 }
        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 :;
                }
            }
        }