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"); } }
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); }
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); }
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); }
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 }"); }
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 }"); }
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"); }
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; } }"); }
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 }"); }