コード例 #1
0
    private void RefreshLineOfSight(IVisibilityArea visibilityArea, int needRefreshBits)
    {
        MajorEmpire majorEmpire = visibilityArea.Empire as MajorEmpire;

        if (majorEmpire == null)
        {
            if (visibilityArea.VisibilityDirty && visibilityArea.Empire != null)
            {
                visibilityArea.VisibilityDirty = false;
            }
            return;
        }
        if ((needRefreshBits & majorEmpire.Bits) != majorEmpire.Bits)
        {
            return;
        }
        visibilityArea.VisibilityDirty = false;
        foreach (WorldPosition worldPosition in visibilityArea.VisibleWorldPositions)
        {
            if (worldPosition.IsValid && worldPosition.Row < this.world.WorldParameters.Rows && worldPosition.Column < this.world.WorldParameters.Columns)
            {
                this.SetWorldPositionAsVisible(worldPosition, majorEmpire, 0, visibilityArea.VisibilityAccessibilityLevel);
                if (ELCPUtilities.SpectatorMode)
                {
                    foreach (int num in ELCPUtilities.EliminatedEmpireIndices)
                    {
                        this.SetWorldPositionAsVisible(worldPosition, base.Game.Empires[num], 0, visibilityArea.VisibilityAccessibilityLevel);
                    }
                }
            }
        }
    }
コード例 #2
0
    private bool EvaluateVisibilityRefresh()
    {
        if (this.NeedRefreshBits == 0)
        {
            for (int i = 0; i < this.gameEntities.Count; i++)
            {
                IGameEntityWithLineOfSight gameEntityWithLineOfSight = this.gameEntities[i];
                if (gameEntityWithLineOfSight.LineOfSightActive && gameEntityWithLineOfSight.LineOfSightDirty)
                {
                    MajorEmpire majorEmpire = gameEntityWithLineOfSight.Empire as MajorEmpire;
                    if (majorEmpire != null)
                    {
                        this.NeedRefreshBits |= majorEmpire.Bits;
                        this.NeedRefreshBits |= gameEntityWithLineOfSight.EmpireInfiltrationBits;
                    }
                }
            }
            int j = 0;
            while (j < this.visibilityProviders.Count)
            {
                if (!this.visibilityProviders[j].VisibilityDirty)
                {
                    foreach (ILineOfSightEntity lineOfSightEntity in this.visibilityProviders[j].LineOfSightEntities)
                    {
                        if (lineOfSightEntity.LineOfSightActive && lineOfSightEntity.LineOfSightDirty)
                        {
                            MajorEmpire majorEmpire2 = lineOfSightEntity.Empire as MajorEmpire;
                            if (majorEmpire2 != null)
                            {
                                this.NeedRefreshBits |= majorEmpire2.Bits;
                                this.NeedRefreshBits |= lineOfSightEntity.EmpireInfiltrationBits;
                            }
                        }
                    }
                    using (IEnumerator <IVisibilityArea> enumerator2 = this.visibilityProviders[j].VisibleAreas.GetEnumerator())
                    {
                        while (enumerator2.MoveNext())
                        {
                            IVisibilityArea visibilityArea = enumerator2.Current;
                            if (visibilityArea.VisibilityDirty)
                            {
                                MajorEmpire majorEmpire3 = visibilityArea.Empire as MajorEmpire;
                                if (majorEmpire3 != null)
                                {
                                    this.NeedRefreshBits |= majorEmpire3.Bits;
                                }
                                if (ELCPUtilities.SpectatorMode)
                                {
                                    foreach (int num in ELCPUtilities.EliminatedEmpireIndices)
                                    {
                                        this.NeedRefreshBits |= base.Game.Empires[num].Bits;
                                    }
                                }
                            }
                        }
                        goto IL_295;
                    }
                    goto IL_1E3;
                }
                goto IL_1E3;
IL_295:
                j++;
                continue;
IL_1E3:
                foreach (Empire empire in this.visibilityProviders[j].VisibilityEmpires)
                {
                    if (empire is MajorEmpire)
                    {
                        this.NeedRefreshBits |= empire.Bits;
                    }
                    if (ELCPUtilities.SpectatorMode)
                    {
                        foreach (int num2 in ELCPUtilities.EliminatedEmpireIndices)
                        {
                            this.NeedRefreshBits |= base.Game.Empires[num2].Bits;
                        }
                    }
                }
                goto IL_295;
            }
        }
        int num3 = (this.majorEmpires == null) ? 0 : ((int)Mathf.Pow(2f, (float)this.majorEmpires.Length) - 1);

        this.NeedRefreshBits &= num3;
        return(this.NeedRefreshBits != 0);
    }