public void SetStartingSideRelationships(WorldSide side)
        {
            for (int i = 0; i < World_AIW2.Instance.Sides.Count; i++)
            {
                WorldSide otherSide = World_AIW2.Instance.Sides[i];
                if (side == otherSide)
                {
                    continue;
                }
                switch (otherSide.Type)
                {
                case WorldSideType.Player:
                case WorldSideType.AI:
                    side.MakeFriendlyTo(otherSide);
                    otherSide.MakeFriendlyTo(side);
                    break;

                case WorldSideType.SpecialFaction:
                    if (otherSide.SpecialFactionData != null && otherSide.SpecialFactionData.Implementation == SpecialFaction_Devourer.Instance)
                    {
                        side.MakeHostileTo(otherSide);
                        otherSide.MakeHostileTo(side);
                    }
                    else
                    {
                        side.MakeFriendlyTo(otherSide);
                        otherSide.MakeFriendlyTo(side);
                    }
                    break;
                }
            }
        }
示例#2
0
        public void SetStartingSideRelationships(WorldSide side)
        {
            for (int i = 0; i < World_AIW2.Instance.Sides.Count; i++)
            {
                WorldSide otherSide = World_AIW2.Instance.Sides[i];
                if (side == otherSide)
                {
                    continue;
                }
                switch (otherSide.Type)
                {
                case WorldSideType.Player:
                    side.MakeHostileTo(otherSide);
                    otherSide.MakeHostileTo(side);
                    break;

                case WorldSideType.AI:
                    side.MakeFriendlyTo(otherSide);
                    otherSide.MakeFriendlyTo(side);
                    break;
                }
            }
        }
示例#3
0
        public void DoPerSimStepLogic(WorldSide side, ArcenSimContext Context)
        {
            bool haveHumanOccupiers = false;
            bool haveAIOccupiers    = false;

            side.Entities.DoForEntities(GameEntityCategory.Ship, delegate(GameEntity entity)
            {
                if (entity.LongRangePlanningData == null)
                {
                    return(DelReturn.Continue); // if created after the start of this planning cycle, skip
                }
                Planet planet = World_AIW2.Instance.GetPlanetByIndex(entity.LongRangePlanningData.CurrentPlanetIndex);
                if (!entity.TypeData.GetHasTag(DYSON_SPHERE_TAG))
                {
                    return(DelReturn.Continue);
                }

                if (planet.GetIsControlledBySideType(WorldSideType.Player))
                {
                    haveHumanOccupiers = true;
                }
                if (planet.GetIsControlledBySideType(WorldSideType.AI))
                {
                    haveAIOccupiers = true;
                }

                return(DelReturn.Continue);
            });

            if (haveHumanOccupiers)
            {
                World_AIW2.Instance.DoForSides(delegate(WorldSide otherSide)
                {
                    if (side == otherSide)
                    {
                        return(DelReturn.Continue);
                    }
                    switch (otherSide.Type)
                    {
                    case WorldSideType.NaturalObject:
                        break;

                    case WorldSideType.AI:
                        if (side.GetIsFriendlyTowards(otherSide))
                        {
                            break;
                        }
                        side.MakeFriendlyTo(otherSide);
                        otherSide.MakeFriendlyTo(side);
                        break;

                    default:
                        if (side.GetIsHostileTowards(otherSide))
                        {
                            break;
                        }
                        side.MakeHostileTo(otherSide);
                        otherSide.MakeHostileTo(side);
                        break;
                    }
                    return(DelReturn.Continue);
                });
            }
            else if (!haveAIOccupiers)
            {
                World_AIW2.Instance.DoForSides(delegate(WorldSide otherSide)
                {
                    if (side == otherSide)
                    {
                        return(DelReturn.Continue);
                    }
                    switch (otherSide.Type)
                    {
                    case WorldSideType.NaturalObject:
                        break;

                    case WorldSideType.Player:
                        if (side.GetIsFriendlyTowards(otherSide))
                        {
                            break;
                        }
                        side.MakeFriendlyTo(otherSide);
                        otherSide.MakeFriendlyTo(side);
                        break;

                    default:
                        if (side.GetIsHostileTowards(otherSide))
                        {
                            break;
                        }
                        side.MakeHostileTo(otherSide);
                        otherSide.MakeHostileTo(side);
                        break;
                    }
                    return(DelReturn.Continue);
                });
            }
            else
            {
                World_AIW2.Instance.DoForSides(delegate(WorldSide otherSide)
                {
                    if (side == otherSide)
                    {
                        return(DelReturn.Continue);
                    }
                    if (otherSide.Type == WorldSideType.NaturalObject)
                    {
                        return(DelReturn.Continue);
                    }
                    if (side.GetIsHostileTowards(otherSide))
                    {
                        return(DelReturn.Continue);
                    }
                    side.MakeHostileTo(otherSide);
                    otherSide.MakeHostileTo(side);
                    return(DelReturn.Continue);
                });
            }
        }