Beispiel #1
0
        //==============================================================================
        // load
        //==============================================================================
        public bool load(XmlNode techEffect, string techName)
        {
            XmlNode typeNode = techEffect.Attributes.GetNamedItem("type");

            if (typeNode == null)
            {
                return(false);
            }

            switch (typeNode.FirstChild.Value)
            {
            case "Data":
            {
                effectType = EffectType.cEffectData;

                XmlNode subTypeNode = techEffect.Attributes.GetNamedItem("subtype");
                if (subTypeNode == null)
                {
                    return(false);
                }

                // Only care about 'Enable' subtype else disregard
                if (String.Compare(subTypeNode.FirstChild.Value, "Enable", true) != 0)
                {
                    return(false);
                }



                // read target
                XmlNodeList targetNodes = techEffect.SelectNodes("./Target");
                foreach (XmlNode targetNode in targetNodes)
                {
                    TechEffectTarget target = new TechEffectTarget();

                    XmlNode targetTypeNode = targetNode.Attributes.GetNamedItem("type");
                    if (targetTypeNode == null)
                    {
                        continue;
                    }

                    switch (targetTypeNode.FirstChild.Value)
                    {
                    case "ProtoUnit":
                        target.mTargetType = TechEffectTarget.TargetType.cProtoUnit;

                        string unitName = targetNode.FirstChild.Value;
                        long   unitID;

                        if (Database.m_objectTypes.TryGetValue(unitName.ToLower(), out unitID))
                        {
                            target.mTargetID = unitID;
                        }
                        else
                        {
                            ConsoleOut.Write(ConsoleOut.MsgType.Warn, "Tech \"{0}\" has an effect that is referring to Unit \"{1}\" which does not exist.\n", techName, unitName);
                            return(false);
                        }
                        break;

                    case "ProtoSquad":
                        target.mTargetType = TechEffectTarget.TargetType.cProtoSquad;

                        string squadName = targetNode.FirstChild.Value;
                        long   squadID;

                        if (Database.m_protoSquadTable.TryGetValue(squadName.ToLower(), out squadID))
                        {
                            target.mTargetID = squadID;
                        }
                        else
                        {
                            ConsoleOut.Write(ConsoleOut.MsgType.Warn, "Tech \"{0}\" has an effect that is referring to Squad \"{1}\" which does not exist.\n", techName, squadName);
                            return(false);
                        }
                        break;
                    }

                    mTargets.Add(target);
                }
            }
            break;

            case "TransformUnit":
            {
                effectType = EffectType.cEffectTransformUnit;

                string unitName = techEffect.FirstChild.Value;
                long   unitID;
                if (Database.m_objectTypes.TryGetValue(unitName.ToLower(), out unitID))
                {
                    effectValue = unitID;
                }
                else
                {
                    ConsoleOut.Write(ConsoleOut.MsgType.Warn, "Tech \"{0}\" has an effect that is referring to Unit \"{1}\" which does not exist.\n", techName, unitName);
                    return(false);
                }
            }
            break;

            case "TransformProtoUnit":
            {
                effectType = EffectType.cEffectTransformProtoUnit;

                XmlNode fromTypeNode = techEffect.Attributes.GetNamedItem("FromType");
                if (fromTypeNode == null)
                {
                    return(false);
                }

                XmlNode toTypeNode = techEffect.Attributes.GetNamedItem("ToType");
                if (toTypeNode == null)
                {
                    return(false);
                }


                long   unitID;
                string unitName = fromTypeNode.FirstChild.Value;

                if (Database.m_objectTypes.TryGetValue(unitName.ToLower(), out unitID))
                {
                    objectType = unitID;
                }
                else
                {
                    ConsoleOut.Write(ConsoleOut.MsgType.Warn, "Tech \"{0}\" has an effect that is referring to Unit \"{1}\" which does not exist.\n", techName, unitName);
                    return(false);
                }


                unitName = toTypeNode.FirstChild.Value;

                if (Database.m_objectTypes.TryGetValue(unitName.ToLower(), out unitID))
                {
                    effectValue = unitID;
                }
                else
                {
                    ConsoleOut.Write(ConsoleOut.MsgType.Warn, "Tech \"{0}\" has an effect that is referring to Unit \"{1}\" which does not exist.\n", techName, unitName);
                    return(false);
                }
            }
            break;

            case "TransformProtoSquad":
            {
                effectType = EffectType.cEffectTransformProtoSquad;

                XmlNode fromTypeNode = techEffect.Attributes.GetNamedItem("FromType");
                if (fromTypeNode == null)
                {
                    return(false);
                }

                XmlNode toTypeNode = techEffect.Attributes.GetNamedItem("ToType");
                if (toTypeNode == null)
                {
                    return(false);
                }


                long   squadID;
                string squadName = fromTypeNode.FirstChild.Value;

                if (Database.m_protoSquadTable.TryGetValue(squadName.ToLower(), out squadID))
                {
                    objectType = squadID;
                }
                else
                {
                    ConsoleOut.Write(ConsoleOut.MsgType.Warn, "Tech \"{0}\" has an effect that is referring to Squad \"{1}\" which does not exist.\n", techName, squadName);
                    return(false);
                }

                squadName = toTypeNode.FirstChild.Value;

                if (Database.m_protoSquadTable.TryGetValue(squadName.ToLower(), out squadID))
                {
                    effectValue = squadID;
                }
                else
                {
                    ConsoleOut.Write(ConsoleOut.MsgType.Warn, "Tech \"{0}\" has an effect that is referring to Squad \"{1}\" which does not exist.\n", techName, squadName);
                    return(false);
                }
            }
            break;

            case "SetAge":
                effectType = EffectType.cEffectAge;
                return(false);

            case "GodPower":
                effectType = EffectType.cEffectPower;

                string powerName = techEffect.FirstChild.Value;
                long   powerID;
                if (Database.m_tablePowers.TryGetValue(powerName.ToLower(), out powerID))
                {
                    effectValue = powerID;
                }
                else
                {
                    ConsoleOut.Write(ConsoleOut.MsgType.Warn, "Tech \"{0}\" has an effect that is referring to Power \"{1}\" which does not exist.\n", techName, powerName);
                    return(false);
                }
                break;

            case "TechStatus":
                effectType = EffectType.cEffectTech;
                return(false);

            case "Ability":
                effectType = EffectType.cEffectAbility;
                return(false);
            }

            return(true);
        }
Beispiel #2
0
        //==============================================================================
        // apply
        //==============================================================================
        public void apply(TechTree techTree)
        {
            switch (effectType)
            {
            case EffectType.cEffectData:
            {
                long count = mTargets.Count;
                for (long i = 0; i < count; i++)
                {
                    TechEffectTarget target = mTargets[(int)i];
                    switch (target.mTargetType)
                    {
                    case TechEffectTarget.TargetType.cProtoUnit:     //FIXME - SHOULD BE cTargetObjectType
                    {
                        techTree.applyProtoObjectEffect(target.mTargetID);
                        break;
                    }

                    case TechEffectTarget.TargetType.cProtoSquad:
                    {
                        techTree.applyProtoSquadEffect(target.mTargetID);
                        break;
                    }
                    }
                }
                break;
            }

            case EffectType.cEffectTransformUnit:

                techTree.buildUnit(effectValue);
                //techTree.applyProtoObjectEffect(effectValue);
                break;

            case EffectType.cEffectTransformProtoUnit:

                techTree.buildUnit(effectValue);
                //techTree.applyProtoObjectEffect(effectValue);
                break;

            case EffectType.cEffectTransformProtoSquad:

                techTree.buildSquad(effectValue);
                //techTree.applyProtoSquadEffect(effectValue);
                break;

            case EffectType.cEffectAge:
                break;

            case EffectType.cEffectPower:

                techTree.applyEffectGodPower(effectValue);
                break;

            case EffectType.cEffectTech:

                techTree.makeObtainable(effectValue);
                break;

            case EffectType.cEffectAbility:
                break;
            }
        }