Exemple #1
0
        static void GenerateVariableRelatedCode(StreamWriter writer, EditorComponent component)
        {
            int code_variable_count = 0;
            int attribute_count     = 0;

            for (int i = 0; i < component.m_variables.Count; ++i)
            {
                EditorVariable variable = component.m_variables[i];
                if (variable.m_code_name == null)
                {
                    continue;
                }
                if (variable.NeedDeclareVariable())
                {
                    ++code_variable_count;
                    writer.Write("\r\n        public const int ");
                    writer.Write(variable.m_code_name);
                    writer.Write(" = ");
                    writer.Write(((int)CRC.Calculate(variable.m_config_name)).ToString());
                    writer.Write(";");
                }
                if (variable.NeedCSAttribute())
                {
                    ++attribute_count;
                }
            }

            bool generate = code_variable_count > 0 || component.Need_InitializeVariable();

            if (m_logic == false && generate)
            {
                writer.Write("\r\n\r\n#if COMBAT_CLIENT");
            }

            if (code_variable_count > 0)
            {
                Generate_StaticConstructor(writer, component);
            }
            if (component.Need_InitializeVariable())
            {
                Generate_InitializeVariable(writer, component);
            }
            if (code_variable_count > 0 && component.Need_GetVariable())
            {
                Generate_GetVariable(writer, component);
            }
            if (code_variable_count > 0 && component.Need_SetVariable())
            {
                Generate_SetVariable(writer, component);
            }
            if (attribute_count > 0 && component.Need_CSharpAttribute())
            {
                Generate_CSharpAttribute(writer, component);
            }

            if (m_logic == false && generate)
            {
                writer.Write("\r\n#endif");
            }
        }
Exemple #2
0
            public EditorComponent REGISTER_VARIABLE_CRC <T>(string config_name, string code_name, string code_fragment = null, int flag = Flag_Variable_GetSet_Attribute_Get)
            {
                EditorVariable variable = RegisterVariableInternal <T>(config_name, code_name, code_fragment, flag);

                variable.m_flag     |= TRANSFORM2CRCID;
                variable.m_type_name = "int";
                return(this);
            }
Exemple #3
0
            public EditorBTNode REGISTER_VARIABLE_CRC <T>(string config_name, string code_fragment, int flag = 0)
            {
                EditorVariable variable = RegisterVariableInternal <T>(config_name, code_fragment, flag);

                variable.m_flag     |= TRANSFORM2CRCID;
                variable.m_type_name = "int";
                return(this);
            }
Exemple #4
0
            EditorVariable RegisterVariableInternal <T>(string config_name, string code_fragment, int flag)
            {
                EditorVariable variable = new EditorVariable();

                System.Type type = typeof(T);
                if (!m_real_type.TryGetValue(type, out variable.m_type_name))
                {
                    variable.m_type_name = type.Name;
                }
                variable.m_config_name   = config_name;
                variable.m_code_fragment = code_fragment;
                variable.m_flag          = flag;
                m_variables.Add(variable);
                return(variable);
            }
Exemple #5
0
 static void Generate_StaticConstructor(StreamWriter writer, EditorComponent component)
 {
     writer.Write("\r\n\r\n        static ");
     writer.Write(component.m_name);
     writer.Write("()\r\n        {");
     for (int i = 0; i < component.m_variables.Count; ++i)
     {
         EditorVariable variable = component.m_variables[i];
         if (variable.m_code_name == null || !variable.NeedDeclareVariable())
         {
             continue;
         }
         writer.Write("\r\n            ComponentTypeRegistry.RegisterVariable(");
         writer.Write(variable.m_code_name);
         writer.Write(", ID);");
     }
     writer.Write("\r\n        }");
 }
Exemple #6
0
        static void Generate_InitializeVariable(StreamWriter writer, EditorBTNode btnode)
        {
            writer.Write(
                @"

        public override void InitializeVariable(Dictionary<string, string> variables)
        {
            string value;");
            for (int i = 0; i < btnode.m_variables.Count; ++i)
            {
                EditorVariable variable = btnode.m_variables[i];
                writer.Write("\r\n            if (variables.TryGetValue(\"");
                writer.Write(variable.m_config_name);
                writer.Write("\", out value))\r\n                ");
                writer.Write(variable.m_code_fragment);
                if (variable.IsFormula())
                {
                    writer.Write(".Compile(value);");
                }
                else if (variable.Transform2Crc())
                {
                    writer.Write(" = (int)CRC.Calculate(value);");
                }
                else if (variable.NeedParse())
                {
                    writer.Write(" = ");
                    writer.Write(variable.m_type_name);
                    writer.Write(".Parse(value);");
                }
                else
                {
                    writer.Write(" = value;");
                }
            }
            writer.Write("\r\n        }");
        }
Exemple #7
0
        static void Generate_CSharpAttribute(StreamWriter writer, EditorComponent component)
        {
            bool need = false;

            for (int i = 0; i < component.m_variables.Count; ++i)
            {
                EditorVariable variable = component.m_variables[i];
                if (variable.m_code_fragment == null || variable.m_code_name == null || (!variable.CanAttributeGet() && !variable.CanAttributeSet()))
                {
                    continue;
                }
                need = true;
                break;
            }
            if (!need)
            {
                return;
            }

            writer.Write("\r\n\r\n#region GETTER/SETTER");
            //        public FixPoint X
            //        {
            //            get { return m_current_position.x; }
            //            set { m_current_position.x = value; }
            //        }
            bool first = true;

            for (int i = 0; i < component.m_variables.Count; ++i)
            {
                EditorVariable variable = component.m_variables[i];
                if (variable.m_code_fragment == null || variable.m_code_name == null || (!variable.CanAttributeGet() && !variable.CanAttributeSet()))
                {
                    continue;
                }
                if (first)
                {
                    writer.Write("\r\n        public ");
                    first = false;
                }
                else
                {
                    writer.Write("\r\n\r\n        public ");
                }
                if (variable.IsFormula())
                {
                    writer.Write("FixPoint ");
                }
                else
                {
                    writer.Write(variable.m_type_name);
                    writer.Write(" ");
                }
                writer.Write(variable.m_code_name.Substring(4));
                writer.Write("\r\n        {");
                if (variable.CanAttributeGet())
                {
                    writer.Write("\r\n            get { return ");
                    if (variable.IsFormula())
                    {
                        writer.Write(variable.m_code_fragment);
                        writer.Write(".Evaluate(this); }");
                    }
                    else
                    {
                        writer.Write(variable.m_code_fragment);
                        writer.Write("; }");
                    }
                }
                if (variable.CanAttributeSet())
                {
                    writer.Write("\r\n            set { ");
                    writer.Write(variable.m_code_fragment);
                    writer.Write(" = value; }");
                }
                writer.Write("\r\n        }");
            }
            writer.Write("\r\n#endregion");
        }
Exemple #8
0
        static void Generate_SetVariable(StreamWriter writer, EditorComponent component)
        {
            bool need = false;

            for (int i = 0; i < component.m_variables.Count; ++i)
            {
                EditorVariable variable = component.m_variables[i];
                if (variable.m_code_fragment == null || variable.m_code_name == null || !variable.CanVariableSet() || variable.IsFormula())
                {
                    continue;
                }
                need = true;
                break;
            }
            if (!need)
            {
                return;
            }
            //        public override bool SetVariable(int id, FixPoint value)
            //        {
            //            switch (id)
            //            {
            //            case VID_X:
            //                m_current_position.x = value;
            //                return true;
            //            default:
            //                return false;
            //            }
            //        }
            writer.Write(
                @"

        public override bool SetVariable(int id, FixPoint value)
        {
            switch (id)
            {");
            for (int i = 0; i < component.m_variables.Count; ++i)
            {
                EditorVariable variable = component.m_variables[i];
                if (variable.m_code_fragment == null || variable.m_code_name == null || !variable.CanVariableSet() || variable.IsFormula())
                {
                    continue;
                }
                writer.Write("\r\n            case ");
                writer.Write(variable.m_code_name);
                writer.Write(":\r\n                ");
                writer.Write(variable.m_code_fragment);
                if (variable.NeedCast())
                {
                    writer.Write(" = (");
                    writer.Write(variable.m_type_name);
                    writer.Write(")value;");
                }
                else
                {
                    writer.Write(" = value;");
                }
                writer.Write("\r\n                return true;");
            }
            writer.Write(
                @"
            default:
                return false;
            }
        }");
        }
Exemple #9
0
        static void Generate_InitializeVariable(StreamWriter writer, EditorComponent component)
        {
            bool need = false;

            for (int i = 0; i < component.m_variables.Count; ++i)
            {
                EditorVariable variable = component.m_variables[i];
                if (!variable.CanVariableInit())
                {
                    continue;
                }
                need = true;
                break;
            }
            if (!need)
            {
                return;
            }
            //        public override void InitializeVariable(Dictionary<string, string> variables)
            //        {
            //            string value;
            //            if (variables.TryGetValue("x", out value))
            //                m_current_position.x = int.Parse(value);
            //        }
            writer.Write(
                @"

        public override void InitializeVariable(Dictionary<string, string> variables)
        {
            string value;");
            for (int i = 0; i < component.m_variables.Count; ++i)
            {
                EditorVariable variable = component.m_variables[i];
                if (!variable.CanVariableInit())
                {
                    continue;
                }
                writer.Write("\r\n            if (variables.TryGetValue(\"");
                writer.Write(variable.m_config_name);
                writer.Write("\", out value))\r\n                ");
                writer.Write(variable.m_code_fragment);
                if (variable.IsFormula())
                {
                    writer.Write(".Compile(value);");
                }
                //else if (variable.NeedParse())
                //{
                //    if (variable.Transform2Crc())
                //        writer.Write(" = (int)CRC.Calculate(");
                //    else
                //        writer.Write(" = ");
                //    writer.Write(variable.m_type_name);
                //    if (variable.Transform2Crc())
                //        writer.Write(".Parse(value));");
                //    else
                //        writer.Write(".Parse(value);");
                //}
                //else
                //{
                //    if (variable.Transform2Crc())
                //        writer.Write(" = (int)CRC.Calculate(value);");
                //    else
                //        writer.Write(" = value;");
                //}
                else if (variable.Transform2Crc())
                {
                    writer.Write(" = (int)CRC.Calculate(value);");
                }
                else if (variable.NeedParse())
                {
                    writer.Write(" = ");
                    writer.Write(variable.m_type_name);
                    writer.Write(".Parse(value);");
                }
                else
                {
                    writer.Write(" = value;");
                }
            }
            writer.Write("\r\n        }");
        }