diff --git a/BrawlboxHelper/SharpYaml.dll b/BrawlboxHelper/SharpYaml.dll new file mode 100644 index 00000000..8ed6dbac Binary files /dev/null and b/BrawlboxHelper/SharpYaml.dll differ diff --git a/BrawlboxHelper/Syroot.NintenTools.Bfres.dll b/BrawlboxHelper/Syroot.NintenTools.Bfres.dll new file mode 100644 index 00000000..b398c199 Binary files /dev/null and b/BrawlboxHelper/Syroot.NintenTools.Bfres.dll differ diff --git a/BrawlboxHelper/Syroot.NintenTools.Bfres.pdb b/BrawlboxHelper/Syroot.NintenTools.Bfres.pdb new file mode 100644 index 00000000..ede065b7 Binary files /dev/null and b/BrawlboxHelper/Syroot.NintenTools.Bfres.pdb differ diff --git a/BrawlboxHelper/Syroot.NintenTools.Bfres.xml b/BrawlboxHelper/Syroot.NintenTools.Bfres.xml new file mode 100644 index 00000000..645500dd --- /dev/null +++ b/BrawlboxHelper/Syroot.NintenTools.Bfres.xml @@ -0,0 +1,5740 @@ + + + + Syroot.NintenTools.Bfres + + + + + Represents an animation curve used by several sections to control different parameters over time. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the data type in which are loaded and saved. For simplicity, the class + always stores frames as converted instances. + + + + + Gets or sets the data type in which are loaded and saved. For simplicity, the class + always stores frames as converted instances. + + + + + Gets or sets the curve type, determining the number of elements stored with each key. + + + + + Gets or sets the memory offset relative to the start of the corresponding animation data structure to + animate the field stored at that address. Note that enums exist in the specific animation which map offsets + to names. + + + + + Gets or sets the first frame at which a key is placed. + + + + + Gets or sets the last frame at which a key is placed. + + + + + Gets or sets the scale to multiply values of the curve by. + + + + + Gets or sets the offset to add to the values of the curve (after multiplicating them). + + + + + Gets or sets the difference between the lowest and highest key value. + + + + + Gets the frame numbers at which keys of the same index in the array are placed. + + + + + Gets an array of elements forming the elements of keys placed at the frames of the same index in the + array. + + + + + Represents the possible data types in which are stored. For simple library use, + they are always converted them to and from instances. + + + + + The frames are stored as instances. + + + + + The frames are stored as instances. + + + + + The frames are stored as instances. + + + + + Represents the possible data types in which are stored. For simple library use, + they are always converted them to and from instances. + + + + + The keys are stored as instances. + + + + + The keys are stored as instances. + + + + + The keys are stored as instances. + + + + + Represents the type of key values stored by this curve. This also determines the number of required elements to + define a key in the array. Use the + method to retrieve the number of elements required for the of that curve. + + + + + The curve uses cubic interpolation. 4 elements of the array form a key. + + + + + The curve uses linear interpolation. 2 elements of the array form a key. + + + + + 1 element of the array forms a key. + + + + + 1 element of the array forms a key. + + + + + 1 element of the array forms a key. + + + + + 1 element of the array forms a key. + + + + + 1 element of the array forms a key. + + + + + Gets or sets the memory offset relative to the start of the corresponding animation data structure to + animate the field stored at that address. Note that enums exist in the specific animation which map offsets + to names. + + + + + Represents a buffer of data uploaded to the GX2 GPU which can hold arbitrary data. + + + + + The size of a full vertex in bytes. + + + + + The raw bytes stored for each buffering. + + + + + Represents a 16-bit fixed-point decimal consisting of 1 sign bit, 10 integer bits and 5 fractional bits (denoted + as Q10.5). Note that the implementation is not reporting over- and underflowing errors. + + + Examples: + SIIIIIII_IIIFFFFF + 0b00000000_00010000 = 0.5 + 0b00000000_00100000 = 1 + 0b00000001_00000000 = 8 + 0b01000000_00000000 = 512 + 0b10000000_00000000 = -1024 + + + + + Represents the largest possible value of . + + + + + Represents the smallest possible value of . + + + + + Initializes a new instance of the struct from the given + representation. + + The raw representation of the internally stored bits. + + + + Gets the internally stored value to represent the instance. + + Signed to get arithmetic rather than logical shifts. + + + + Returns the given . + + The . + The result. + + + + Adds the first to the second one. + + The first . + The second . + The addition result. + + + + Negates the given . + + The to negate. + The negated result. + + + + Subtracts the first from the second one. + + The first . + The second . + The subtraction result. + + + + Multiplicates the given by the scalar. + + The . + The scalar. + The multiplication result. + + + + Multiplicates the first by the second one. + + The first . + The second . + The multiplication result. + + + + Divides the given through the scalar. + + The . + The scalar. + The division result. + + + + Divides the first through the second one. + + The first . + The second . + The division result. + + + + Gets a value indicating whether the first specified is the same as the second + specified . + + The first to compare. + The second to compare. + true, if both are the same. + + + + Gets a value indicating whether the first specified is not the same as the second + specified . + + The first to compare. + The second to compare. + true, if both are not the same. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Gets a value indicating whether this is the same as the second specified + . + + The object to compare, if it is a . + true, if both are the same. + + + + Gets a hash code as an indication for object equality. + + The hash code. + + + + Gets a string describing this . + + A string describing this . + + + + Indicates whether the current is equal to another . + + A to compare with this . + true if the current is equal to the other parameter; otherwise, false. + + + + + Represents a 4-byte value which can hold differently typed data. + + + + + The data as an . + + + + + The data as a . + + + + + The data as an . + + + + + Converts the given value to a instance. + + The value to represent in the new instance. + + + + + Converts the given value to a instance. + + The value to represent in the new instance. + + + + + Converts the given value to a instance. + + The value to represent in the new instance. + + + + + Converts the given value to an instance. + + The value to represent in the new instance. + + + + + Converts the given value to a instance. + + The value to represent in the new instance. + + + + + Converts the given value to an instance. + + The value to represent in the new instance. + + + + + Returns the for this instance. + + The enumerated constant that is the of the class or value type that + implements this interface. + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + Converts the value of this instance to an equivalent double-precision floating-point number using the + specified culture-specific formatting information. + + An interface implementation that supplies + culture-specific formatting information. + A double-precision floating-point number equivalent to the value of this instance. + + + + This operation is not supported. + + + + + Converts the value of this instance to an equivalent 32-bit signed integer using the specified + culture-specific formatting information. + + An interface implementation that supplies + culture-specific formatting information. + An 32-bit signed integer equivalent to the value of this instance. + + + + Converts the value of this instance to an equivalent 64-bit signed integer using the specified + culture-specific formatting information. + + An interface implementation that supplies + culture-specific formatting information. + An 64-bit signed integer equivalent to the value of this instance. + + + + This operation is not supported. + + + + + Converts the value of this instance to an equivalent single-precision floating-point number using the + specified culture-specific formatting information. + + An interface implementation that supplies + culture-specific formatting information. + A single-precision floating-point number equivalent to the value of this instance. + + + + This operation is not supported. + + + + + Converts the value of this instance to an of the specified that has + an equivalent value, using the specified culture-specific formatting information. + + The to which the value of this instance is converted. + + An interface implementation that supplies + culture-specific formatting information. + An instance of type conversionType whose value is equivalent to the value of + this instance. + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + Represents a 16-bit half-precision floating point value according to the IEEE 754 standard. + + + Examples: + SEEEEEFF_FFFFFFFF + 0b00000000_00000000 = 0 + 1b00000000_00000000 = -0 + 0b00111100_00000000 = 1 + 0b11000000_00000000 = -2 + 0b11111011_11111111 = 65504 (MaxValue) + 0b01111100_00000000 = PositiveInfinity + 0b11111100_00000000 = NegativeInfinity + + + + + Represents the smallest positive value greater than zero. + + + + + Represents the largest possible value of . + + + + + Represents the smallest possible value of . + + + + + Represents not a number (NaN). + + + + + Represents negative infinity. + + + + + Represents positive infinity. + + + + + Initializes a new instance of the struct from the given + representation. + + The raw representation of the internally stored bits. + + + + Gets the internally stored value to represent the instance. + + Signed to get arithmetic rather than logical shifts. + + + + Returns the given . + + The . + The result. + + + + Adds the first to the second one. + + The first . + The second . + The addition result. + + + + Negates the given . + + The to negate. + The negated result. + + + + Subtracts the first from the second one. + + The first . + The second . + The subtraction result. + + + + Multiplicates the first by the second one. + + The first . + The second . + The multiplication result. + + + + Divides the first through the second one. + + The first . + The second . + The division result. + + + + Gets a value indicating whether the first specified is the same as the second + specified . + + The first to compare. + The second to compare. + true, if both are the same. + + + + Gets a value indicating whether the first specified is not the same as the second + specified . + + The first to compare. + The second to compare. + true, if both are not the same. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Gets a value indicating whether this is the same as the second specified + . + + The object to compare, if it is a . + true, if both are the same. + + + + Gets a hash code as an indication for object equality. + + The hash code. + + + + Gets a string describing this . + + A string describing this . + + + + Indicates whether the current is equal to another . + + A to compare with this . + true if the current is equal to the other parameter; otherwise, false. + + + + + Returns a value indicating whether the specified number evaluates to not a number (). + + A half-precision floating-point number. + true if value evaluates to not a number (); otherwise false. + + + + Returns a value indicating whether the specified number evaluates to negative or positive infinity. + + A half-precision floating-point number. + true if half evaluates to or ; + otherwise false. + + + + Returns a value indicating whether the specified number evaluates to negative infinity. + + A half-precision floating-point number. + true if half evaluates to ; otherwise false. + + + + Returns a value indicating whether the specified number evaluates to positive infinity. + + A half-precision floating-point number. + true if half evaluates to ; otherwise false. + + + + Represents the non-generic base of a dictionary which can quickly look up instances via + key or index. + + + + + Initializes a new instance of the class. + + + + + Gets the number of instances stored. + + + + + Gets all keys under which instances are stored. + + + + + Gets all stored instances. + + + + + Returns only the publically visible nodes, excluding the root node. + + + + + Gets or sets the instance stored at the specified . + + The 0-based index of the instance to get or set. + The at the specified . + The index is smaller than 0 or bigger or equal to + . + + + + Gets or sets the instance stored under the specified . + + The textual key of the instance to get or set. + The with the specified . + An instance with the same + already exists. + An instance with the given + does not exist. + + + + Gets or sets the key under which the specified is stored. + + The instance of the key to get or set. + The key of the specified . + An instance with the same key already exists. + + A key for the given does not exist. + + + + + Removes all elements from the dictionary. + + + + + Determines whether an instance is saved under the given in the dictionary. + + The textual key to locate in the dictionary. The value can be null. + true if was found in the dictionary; otherwise false. + + + + Searches for the specified and returns the zero-based index of the first occurrence + within the entire dictionary. + + The textual key to locate in the dictionary. The value can be null. + The zero-based index of the first occurence of within the entire dictionary + if found; otherwise -1. + + + + Changes the key of the instance currently saved under the given to the + . + + The current textual key to rename. + The new textual key to use. + An instance with the same + already exists. + + The given does not exist. + + + + + Removes the first occurrence of the instance with the specific from the dictionary. + + The textual key of the instance which will be removed. + true if the instance under was successfully removed; otherwise + false. This method also returns false if was not found in the + dictionary. + + + + Removes the instance at the specified of the dictionary. + + The zero-based index of the instance to remove. + is less than 0 or equal to or greater + than . + + + + Returns true if an instance was stored under the given + and has been assigned to , or false if no instance is stored under the + given and null was assigned to . + + The textual key of the instance to get or set. + The variable receiving the found or null. + true if an instance was found and assigned; otherwise false. + + + + Adds the given under the specified . + + The textual key under which the instance will be stored. + The to add. + An instance with the same + already exists. + + + + Determines whether the given is in the dictionary. + + The instance to locate in the dictionary. The value can be + null. + true if was found in the dictionary; otherwise false. + + + + + Searches for the specified and returns the zero-based index of the first occurrence + within the entire dictionary. + + The instance to locate in the dictionary. The value can be + null. + The zero-based index of the first occurence of within the entire + dictionary if found; otherwise -1. + + + + Removes the first occurrence of a specific from the dictionary. + + The instance to remove from the dictionary. The value can be + null. + true if was successfully removed; otherwise false. This + method also returns false if was not found in the dictionary. + + + + Copies the elements of the dictionary as instances to a new + array and returns it. + + An array containing copies of the elements. + + + + Returns true if a key was found for the given and has been assigned to + , or false if no key was found for the value and null was assigned to + . + + The to look up a key for. + The variable receiving the found key or null. + true if a key was found and assigned; otherwise false. + + + + Returns a generic which can be used to iterate over the items in the dictionary. + + An enumerator to iterate over the items in the dictionary. + + + + Returns an which can be used to iterate over the items in the dictionary. + + An enumerator to iterate over the items in the dictionary. + + + + Returns the instance of the node with the given using the + Patricia trie logic. + + Nodes are looked up linearly by iterating over the node list internally, this method has been + implemented for test and validation purposes only. + The name of the node to look up. + The instance referenced by the found node. + + + + Loads an instance from the given . + + The to load the instance with. + The loaded instance. + + + + Represents a node forming the Patricia trie of the dictionary. + + + + + Represents a dictionary which can quickly look up instances of type + via key or index. + + The specialized type of the instances. + + + + Initializes a new instance of the class. + + + + + Gets all stored instances. + + + + + Gets or sets the value stored at the specified . + + The 0-based index of the instance to get or set. + The instance at the specified . + The index is smaller than 0 or bigger or equal to + . + + + + Gets or sets the value stored under the specified . + + The textual key of the instance to get or set. + The instance with the specified . + An instance with the same already exists. + + An instance with the given does not exist. + + + + + Adds the given under the specified . + + The textual key under which the instance will be stored. + The to add. + An instance with the same + already exists. + + + + Determines whether the given is in the dictionary. + + The instance to locate in the dictionary. The value can be + null. + true if was found in the dictionary; otherwise false. + + + + + Returns a generic which can be used to iterate over the items in the dictionary. + + An enumerator to iterate over the items in the dictionary. + + + + Searches for the specified and returns the zero-based index of the first occurrence + within the entire dictionary. + + The instance to locate in the dictionary. The value can be + null. + The zero-based index of the first occurence of within the entire + dictionary if found; otherwise -1. + + + + Removes the first occurrence of a specific from the dictionary. + + The instance to remove from the dictionary. The value can be + null. + true if was successfully removed; otherwise false. This + method also returns false if was not found in the dictionary. + + + + Copies the elements of the dictionary as instances to a new + array and returns it. + + An array containing copies of the elements. + + + + Returns true if a key was found for the given and has been assigned to + , or false if no key was found for the value and null was assigned to + . + + The to look up a key for. + The variable receiving the found key or null. + true if a key was found and assigned; otherwise false. + + + + Returns true if an instance was stored under the given and has been assigned + to , or false if no instance is stored under the given + and null was assigned to . + + The textual key of the instance to get or set. + The variable receiving the found instance or null. + true if an instance was found and assigned; otherwise false. + + + + Loads an instance from the given . + + The to load the instance with. + The loaded instance. + + + + Represents a which is stored in a . + + + + + The textual represented by this instance. + + + + + The with which this string was read or will be written. + + + + + Converts the given value to a instance. + + The value to represent in the new instance. + + + + + Converts the given value to an instance. + + The value to represent in the new instance. + + + + + Returns the value of the property. + + The value of the property. + + + + Set the Browsable property. + NOTE: Be sure to decorate the property with [Browsable(true)] + + Name of the variable + Browsable Value + + + + Set the Browsable property. + NOTE: Be sure to decorate the property with [Browsable(true)] + + An instance of the object whose property should be modified. + Name of the variable + Browsable Value + + + + Represents a 2D transformation. + + + + + The size of this structure. + + + + + The scaling amount of the transformation. + + + + + The rotation angle of the transformation. + + + + + The translation amount of the transformation. + + + + + Represents a 3D transformation. + + + + + The size of this structure. + + + + + The scaling amount of the transformation. + + + + + The rotation amount of the transformation. + + + + + The translation amount of the transformation. + + + + + Represents a 2D texture transformation. + + + + + The size of this structure. + + + + + The with which the transformation is applied. + + + + + The scaling amount of the transformation. + + + + + The rotation angle of the transformation. + + + + + The translation amount of the transformation. + + + + + Unkown space used in some games + + + + + Represents a 2D texture transformation which is multiplied by a 3x4 matrix referenced at runtime by the + . + + + + + The size of this structure. + + + + + The with which the transformation is applied. + + + + + The scaling amount of the transformation. + + + + + The rotation angle of the transformation. + + + + + The translation amount of the transformation. + + + + + A pointer to a 3x4 matrix to multiply the transformation with. Set at runtime. + + + + + Represents the texture transformation mode used in and . + + + + + Represents a reference to a instance by name. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. Typically the same as the . + + + + + The referenced instance. + + + + + Represents custom user variables which can be attached to many sections and subfiles of a . + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + The data type of the stored values. + + + + + Returns the stored value as an array of instances when the is + . + + The typed value. + + + + Returns the stored value as an array of instances when the is + . + + The typed value. + + + + Returns the stored value as an array of instances when the is + or . + + The typed value. + + + + Returns the stored value as an array of instances when the is + . + + The typed value. + + + + Sets the stored as an array and the to + + + The value to store. + + + + Sets the stored as a array and the to + + + The value to store. + + + + Sets the stored as a array and the to + or depending on + . + + true to store data as UTF-16 encoded strings, or false to store it + as ASCII encoded strings. + The value to store. + + + + Sets the stored as a array and the to + + + The value to store. + + + + Represents the possible data types of values stored in instances. + + + + + The values is an array. + + + + + The values is a array. + + + + + The values is a array encoded in ASCII. + + + + + The values is a array encoded in UTF-16. + + + + + The values is a array. + + + + + Represents extension methods for the class. + + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads a instance from the current stream and returns it. + + The extended . + The number of instances to read. + The instance. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The in which values are stored. + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The in which values are stored. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The in which values are stored. + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The in which values are stored. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The in which values are stored. + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The in which values are stored. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Returns the conversion delegate for converting data available in the given + into a instance. Useful to prevent repetitive lookup for multiple values. + + The extended . + The of the data. + A conversion delegate for the data. + + + + Reads a instance converted from the given and + returns it. + + The extended . + The of the data. + The instance. + + + + Reads a instances converted from the given and + returns them. + + The extended . + The number of instances to read. + The of the data. + The instances. + + + + Represents extension methods for the class. + + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + The in which values are stored. + + + + Writes instances into the current stream. + + The extended . + The instances. + The in which values are stored. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + The in which values are stored. + + + + Writes instances into the current stream. + + The extended . + The instances. + The in which values are stored. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + The in which values are stored. + + + + Writes instances into the current stream. + + The extended . + The instances. + The in which values are stored. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Returns the conversion delegate for converting data available in the given + from a instance. Useful to prevent repetitive lookup for multiple values. + + The extended . + The of the data. + A conversion delegate for the data. + + + + Writes a instance into the current stream with the given + . + + The extended . + The instance. + The of the data. + + + + Writes instances into the current stream with the given + . + + The extended . + The instances. + The of the data. + + + + Represents extension methods for instances. + + + + + Returns an instance represented by the given number of , starting + at the . + + The extended instance. + The first bit of the encoded value. + The number of least significant bits which are used to store the + value. + The decoded . + + + + Returns the current with the bit at the set (being 1). + + The extended instance. + The 0-based index of the bit to enable. + The current with the bit enabled. + + + + Returns the current with the given set into the given number + of starting at . + + The extended instance. + The value to encode. + The first bit used for the encoded value. + The number of bits which are used to store the value. + The current with the value encoded into it. + + + + Returns the current with the bit at the cleared (being 0). + + The extended instance. + The 0-based index of the bit to disable. + The current with the bit disabled. + + + + Returns a value indicating whether the bit at the in the current + is enabled or disabled. + + The extended instance. + The 0-based index of the bit to check. + true when the bit is set; otherwise false. + + + + Returns the current with all bits rotated in the given , + where positive directions rotate left and negative directions rotate right. + + The extended instance. + The direction in which to rotate, where positive directions rotate left. + The current with the bits rotated. + + + + Returns the current with the bit at the enabled or disabled, + according to . + + The extended instance. + The 0-based index of the bit to enable or disable. + true to enable the bit; otherwise false. + The current with the bit enabled or disabled. + + + + Returns the current with the bit at the enabled when it is + disabled or disabled when it is enabled. + + The extended instance. + The 0-based index of the bit to toggle. + The current with the bit toggled. + + + + Represents extension methods for instances. + + + + + Returns an instance represented by the given number of , starting + at the . + + The extended instance. + The first bit of the encoded value. + The number of least significant bits which are used to store the + value. + The decoded . + + + + Returns the current with the bit at the set (being 1). + + The extended instance. + The 0-based index of the bit to enable. + The current with the bit enabled. + + + + Returns the current with the given set into the given number + of starting at . + + The extended instance. + The value to encode. + The first bit used for the encoded value. + The number of bits which are used to store the value. + The current with the value encoded into it. + + + + Returns the current with the bit at the cleared (being 0). + + The extended instance. + The 0-based index of the bit to disable. + The current with the bit disabled. + + + + Returns a value indicating whether the bit at the in the current + is enabled or disabled. + + The extended instance. + The 0-based index of the bit to check. + true when the bit is set; otherwise false. + + + + Returns the current with all bits rotated in the given , + where positive directions rotate left and negative directions rotate right. + + The extended instance. + The direction in which to rotate, where positive directions rotate left. + The current with the bits rotated. + + + + Returns the current with the bit at the enabled or disabled, + according to . + + The extended instance. + The 0-based index of the bit to enable or disable. + true to enable the bit; otherwise false. + The current with the bit enabled or disabled. + + + + Returns the current with the bit at the enabled when it is + disabled or disabled when it is enabled. + + The extended instance. + The 0-based index of the bit to toggle. + The current with the bit toggled. + + + + Represents the common interface for exporting data instances. + + + + + Loads raw data from the data stream into instances. + + The to load data with. + + + + Saves header data of the instance and queues referenced data in the given . + + The to save headers and queue data with. + + + + Represents the common interface for data instances. + + + + + Loads raw data from the data stream into instances. + + The to load data with. + + + + Saves header data of the instance and queues referenced data in the given . + + The to save headers and queue data with. + + + + Loads the hierachy and data of a . + + + + + Initializes a new instance of the class loading data into the given + from the specified which is optionally left open. + + The instance to load data into. + The to read data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The instance to load data into. + The name of the file to load the data from. + + + + Gets the loaded instance. + + + + + Starts deserializing the data from the root. + + + + + Reads and returns an instance of type from the following + offset or returns null if the read offset is 0. + + The type of the to read. + The instance or null. + + + + Reads and returns an instance of arbitrary type from the following offset with the + given or returns null if the read offset is 0. + + The type of the data to read. + The callback to read the instance data with. + The optional offset to use instead of reading a following one. + The data instance or null. + Offset required for ExtFile header (offset specified before size). + + + + Reads and returns an instance with elements of type from + the following offset or returns an empty instance if the read offset is 0. + + The type of the elements. + The instance. + + + + Reads and returns an instance with elements of type + from the following offset or returns null if the read offset is 0. + + The type of the elements. + The number of elements to expect for the list. + The optional offset to use instead of reading a following one. + The instance or null. + Offset required for FMDL FVTX lists (offset specified before count). + + + + Reads and returns a instance from the following offset or null if the read + offset is 0. + + The optional encoding of the text. + The read text. + + + + Reads and returns instances from the following offsets. + + The number of instances to read. + The optional encoding of the texts. + The read texts. + + + + Reads a BFRES signature consisting of 4 ASCII characters encoded as an and checks for + validity. + + A valid signature. + + + + Reads a BFRES offset which is relative to itself, and returns the absolute address. + + The absolute address of the offset. + + + + Reads BFRES offsets which are relative to themselves, and returns the absolute addresses. + + The number of offsets to read. + The absolute addresses of the offsets. + + + + Saves the hierachy and data of a . + + + + + Gets or sets a data block alignment typically seen with . + + + + + Initializes a new instance of the class saving data from the given + into the specified which is optionally left open. + + The instance to save data from. + The to save data into. + true to leave the stream open after writing, otherwise false. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Gets the saved instance. + + + + + Gets the saved instance used for exporting data. + + + + + Gets the current index when writing lists or dicts. + + + + + Starts serializing the data from the root. + + + + + Reserves space for an offset to the written later. + + The to save. + The index of the element, used for instances referenced by a . + + + + + Reserves space for the file size field which is automatically filled later. + + + + + Reserves space for the string pool size and offset fields which are automatically + filled later. + + + + + Reserves space for an offset to the written later. + + The type of the elements. + The to save. + + + + Reserves space for an offset to the written later. + + The type of the element values. + The to save. + + + + Reserves space for an offset to the written later with the + . + + The data to save. + The to invoke to write the data. + + + + Reserves space for an offset to the written later in the string pool with the + specified . + + The name to save. + The in which the name will be stored. + + + + Reserves space for offsets to the written later in the string pool with the + specified + + The names to save. + The in which the names will be stored. + + + + Reserves space for an offset to the written later in the data block pool. + + The data to save. + The alignment to seek to before invoking the callback. + The to invoke to write the data. + + + + Writes a BFRES signature consisting of 4 ASCII characters encoded as an . + + A valid signature. + + + + Represents a sorting empty strings to the end of lists. + + + + + Represents a file attachment to a which can be of arbitrary data. + + + + + Gets or sets the raw data stored by the external file. + + + + + Opens and returns a on the raw byte array, which optionally + can be written to. + + true to allow write access to the raw data. + The opened instance. + + + + Represents GX2 settings controlling additional alpha blending options. + + + + + Gets or sets a value indicating whether alpha testing is enabled at all. + + + + + Gets or sets the comparison functions to use for alpha testing. + + + + + Represents GX2 settings controlling color and alpha blending. + + + + + Gets or sets the color source blend operation. + + + + + Gets or sets the color combine operation. + + + + + Gets or sets the color destination blend operation. + + + + + Gets or sets the alpha source blend operation. + + + + + Gets or sets the alpha combine operation. + + + + + Gets or sets the alpha destination blend operation. + + + + + Gets or sets a value indicating whether alpha blending is separated from color blending. + + + + + Represents GX2 settings controlling additional color blending options. + + + + + Gets or sets a value indicating whether multi writes are enabled. + + + + + Gets or sets a value indicating whether the color buffer is enabled. + + + + + Gets or sets the bitmask used for blending. + + + + + Gets or sets the ROP3 logic operation. + + + + + Represents GX2 settings controlling how depth and stencil buffer checks are performed and handled. + + + + + Gets or sets a value indicating whether depth testing is enabled. + + + + + Gets or sets a value indicating whether writing to the depth buffer is enabled. + + + + + Gets or sets the depth buffer comparison function, controlling whether a new fragment is allowed to + overwrite the old value in the depth buffer. + + + + + Gets or sets a value indicating whether stencil testing is enabled. + + + + + Gets or sets a value indicating whether back-facing polygons are allowed to write to the stencil buffer or + not. + + + + + Gets or sets the front-facing polygon stencil comparison function. + + + + + Gets or sets the stencil function configuring what to do with the existing stencil value when the stencil + test fails for front-facing polygons. + + + + + Gets or sets the stencil function taking effect when the stencil test passes with the depth buffer for + front-facing polygons. + + + + + Gets or sets the function taking effect when the stencil test fails with the depth buffer for front-facing + polygons. + + + + + Gets or sets the back-facing polygon stencil comparison function. + + + + + Gets or sets the stencil function configuring what to do with the existing stencil value when the stencil + test fails for back-facing polygons. + + + + + Gets or sets the stencil function taking effect when the stencil test passes with the depth buffer for + back-facing polygons. + + + + + Gets or sets the function taking effect when the stencil test fails with the depth buffer for back-facing + polygons. + + + + + Represents the AA modes (number of samples) for a surface. + + + + + Represents the format of a vertex attribute entry. Possible type conversions: + UNorm: attrib unsigned integer is converted to/from [0.0, 1.0] in shader. + UInt: attrib unsigned integer is copied to/from shader as unsigned int. + SNorm: attrib signed integer is converted to/from [-1.0, 1.0] in shader. + SInt: attrib signed integer is copied to/from shader as signed int. + Single: attrib single is copied to/from shader as Single. + UIntToSingle: attrib unsigned integer is converted Single in shader. + SIntToSingle: attrib signed integer is converted Single in shader. + + + + + Represents how the terms of the blend function are combined. + + + + + Represents the factors used in the blend function. + + + + + Represents compare functions used for depth and stencil tests. + + + + + Represents the source channels to map to a color channel in textures. + + + + + Represents the vertex order of front-facing polygons. + + + + + Represents the type in which vertex indices are stored. + + + + + Represents the logic op function to perform. + + + + + Black + + + + + White + + + + + Source (Default) + + + + + ~Source + + + + + Destination + + + + + ~Destination + + + + + Source & Destination + + + + + ~(Source & Destination) + + + + + Source | Destination + + + + + ~(Source | Destination) + + + + + Source ^ Destination + + + + + ~(Source ^ Destination) + + + + + Source & ~Destination + + + + + ~Source & Destination + + + + + Source | ~Destination + + + + + ~Source | Destination + + + + + Represents the base primitive used to draw each side of the polygon when dual-sided polygon mode is enabled. + + + + + Represents the type of primitives to draw. + + + + + Requires at least 1 element and 1 more to draw another primitive. + + + + + Requires at least 2 elements and 2 more to draw another primitive. + + + + + Requires at least 2 elements and 1 more to draw another primitive. + + + + + Requires at least 3 elements and 3 more to draw another primitive. + + + + + Requires at least 3 elements and 1 more to draw another primitive. + + + + + Requires at least 3 elements and 1 more to draw another primitive. + + + + + Requires at least 4 elements and 4 more to draw another primitive. + + + + + Requires at least 4 elements and 1 more to draw another primitive. + + + + + Requires at least 6 elements and 6 more to draw another primitive. + + + + + Requires at least 6 elements and 2 more to draw another primitive. + + + + + Requires at least 3 elements and 3 more to draw another primitive. + + + + + Requires at least 2 elements and 1 more to draw another primitive. + + + + + Requires at least 4 elements and 4 more to draw another primitive. + + + + + Requires at least 4 elements and 2 more to draw another primitive. + + + + + Requires at least 2 elements and 2 more to draw another primitive. + + + + + Requires at least 2 elements and 1 more to draw another primitive. + + + + + Requires at least 3 elements and 3 more to draw another primitive. + + + + + Requires at least 3 elements and 1 more to draw another primitive. + + + + + Requires at least 4 elements and 4 more to draw another primitive. + + + + + Requires at least 4 elements and 2 more to draw another primitive. + + + + + Represents the stencil function to be performed if stencil tests pass. + + + + + Represents shapes of a given surface or texture. + + + + + Represents desired texture, color-buffer, depth-buffer, or scan-buffer formats. + + + + + Represents Indicates how a given surface may be used. A final TV render target is one that will be copied to a + TV scan buffer. It needs to be designated to handle certain display corner cases (when a HD surface must be + scaled down to display in NTSC/PAL). + + + + + Represents maximum desired anisotropic filter ratios. Higher ratios give better image quality, but slower + performance. + + + + + Represents type of border color to use. + + + + + Represents how to treat texture coordinates outside of the normalized coordinate texture range. + + + + + Represents desired texture filter options between mip levels. + + + + + Represents desired texture filter options within a plane. + + + + + Represents desired texture filter options between Z planes. + + + + + Represents the desired tiling modes for a surface. + + + + + Represents GX2 polygon drawing settings controlling if and how triangles are rendered. + + + + + Gets or sets a value indicating whether front-facing polygons are culled. + + + + + Gets or sets a value indicating whether back-facing polygons are culled. + + + + + Gets or sets the order in which vertices have to form the triangle to be handled as a front- rather than + back-face. + + + + + Gets or sets a value indicating whether polygons are drawn at all. + + + + + Gets or sets how front facing polygons are drawn. + + + + + Gets or sets how back facing polygons are drawn. + + + + + Gets or sets whether front-facing polygons are drawn offset (useful for decals to combat Z fighting). + + + + + Gets or sets whether back-facing polygons are drawn offset (useful for decals to combat Z fighting). + + + + + Gets or sets whether lines are drawn offset (useful for decals to combat Z fighting). + + + + + Represents a GX2 texture sampler controlling how a texture is samples and drawn onto a surface. + + + + + Initializes a new instance of the instance. + + + + + Gets or sets the texture repetition mode on the X axis. + + + + + Gets or sets the texture repetition mode on the Y axis. + + + + + Gets or sets the texture repetition mode on the Z axis. + + + + + Gets or sets the texture filtering on the X and Y axes when the texture is drawn larger than the actual + texture's resolution. + + + + + Gets or sets the texture filtering on the X and Y axes when the texture is drawn smaller than the actual + texture's resolution. + + + + + Gets or sets the texture filtering on the Z axis. + + + + + Gets or sets the texture filtering for mipmaps. + + + + + Gets or sets the maximum anisotropic filtering level to use. + + + + + Gets or sets what color to draw at places not reached by a texture if the clamp mode does not repeat it. + + + + + Gets or sets the depth comparison function. + + + + + Gets or sets the minimum LoD level. + + + + + + Gets or sets the maximum LoD level. + + + + + Gets or sets the LoD bias. + + + + + Gets or sets a value indicating whether depth comparison is enabled (never set for a real console). + + + + + Represents a helper class for working with instances. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with data read from the given + . The data is available in the , which defaults + to system byte order. + + The to initially read data from. + The in which vertex data is available. null to use + system byte order. + + + + Gets or sets the in which vertex data will be stored when calling + . This should be the same as the remainder of the in + which it will be stored. + + + + + Gets or sets the number of bones influencing the vertices stored in the buffer. 0 influences equal + rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning. + + + + + Gets or sets the list of instances which store the data. + + + + + Gets or sets the instance at the given . + + The index of the instance. + The instance at the given index. + + + + Gets or sets the first instance with the given + . + + The name of the instance. + The instance with the given name. + + + + Returns a instance out of the stored helper data. + + A new . + + + + Represents an attribute and the data it stores in a instance. + + + + + The name of the attribute, typically used to determine the use of the data. + + + + + The into which data will be converted upon creating a + . + + + + + The data stored for this attribute. Has to be of the same length as every other + . Depending on , not every component of the + elements is used. + + + + + Represents an FMAT subsection of a subfile, storing information on with which textures and + how technically a surface is drawn. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets flags specifying how a is rendered. + + + + + Gets or sets the visible flag to display the material. + + + + + Gets or sets the list of instances referencing the instances + required to draw the material. + + + + + Gets or sets a dictionary of instances which configure how to draw + instances referenced by the list. + + + + + Gets or sets the raw data block which stores values. + + + + + Gets or sets customly attached instances. + + + + + Gets or sets a set of bits determining whether instances are volatile. + + + + + Represents general flags specifying how a is rendered. + + + + + The material is not rendered at all. + + + + + The material is rendered. + + + + + Represents a render info in a FMAT section storing uniform parameters required to render the + . + + + + + Initializes a new instance of the class. + + + + + Gets the determining the data type of the stored value. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets the stored value as an array. Only valid if is + . + + The stored value as an array. + + + + Gets the stored value as a array. Only valid if is + . + + The stored value as a array. + + + + Gets the stored value as a array. Only valid if is + . + + The stored value as a array. + + + + Sets the stored value as an array and sets to + . + + The array to set as the value. + + + + Sets the stored value as a array and sets to + . + + The array to set as the value. + + + + Sets the stored value as a array and sets to + . + + The array to set as the value. + + + + Represents the data type of elements of the value array. + + + + + The elements are instances. + + + + + The elements are instances. + + + + + The elements are instances. + + + + + Represents GX2 GPU configuration to determine how polygons are rendered. + + + + + Initializes a new instance of the class. + + + + + Gets or sets GX2 polygon drawing settings controlling if and how triangles are rendered. + + + + + Gets or sets GX2 settings controlling how depth and stencil buffer checks are performed and handled. + + + + + Gets or sets GX2 settings controlling additional alpha blending options. + + + + + Gets or sets the reference value used for alpha testing. + + + + + Gets or sets GX2 settings controlling additional color blending options. + + + + + Gets or sets the blend target index. + + + + + Gets or sets GX2 settings controlling color and alpha blending. + + + + + Gets or sets the blend color to perform blending with. + + + + + Represents a sampler in a section, storing configuration on how to + draw and interpolate textures. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the internal representation of the sampler configuration. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Initializes a new instance of the class. + + + + + Represents a parameter value in a section, passing data to shader variables. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the type of the value. + + + + + Gets the offset in the byte array in bytes. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets the size of the value in bytes. + + + + + Represents the data types in which instances can store their value. + + + + + The value is a single . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a single . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a single . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a single . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + An invalid type for values, only used for internal computations. + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + An invalid type for values, only used for internal computations. + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + An invalid type for values, only used for internal computations. + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + Represents an FMDL subfile in a , storing model vertex data, skeletons and used materials. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets the instance to deform the model with animations. + + + + + Gets or sets the instances storing the vertex data used by the + . + + + + + Gets or sets the instances forming the surface of the model. + + + + + Gets or sets the instance applied on the to color their surface. + + + + + Gets or sets customly attached instances. + + + + + Gets the total number of vertices to process when drawing this model. + + This excludes vertices which are not processed by any shader. However, the exact value does not + seem to matter, so the total count of all vertices is taken to keep things trivial for now. + + + + Represents a spatial bounding box. + + + + + The center point of the bounding box. + + + + + The extent from the center point to the furthest point. + + + + + Represents a node in a bounding tree to determine when to show which sub mesh of a + . + + + + + Represents the surface net of a section, storing information on which + index to use for referencing vertices of the shape, mostly used for different levels of + detail (LoD) models. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the which determines how indices are used to form polygons. + + + + + Gets the determining the data type of the indices in the + . + + + + + Gets the number of indices stored in the . + + + + + Gets or sets the list of instances which split up a mesh into parts which can be + hidden if they are not visible to optimize rendering performance. + + + + + Gets or sets the storing the index data. + + + + + Gets or sets the offset to the first vertex element of a to reference by indices. + + + + + Returns the indices stored in the as instances. + + The indices stored in the . + + + + Stores the given in the in the provided + , or the current if none was specified. + + The indices to store in the . + The to use or null to use the current format. + + + + + Represents an FSHP section in a subfile. + + + + + Initializes a new instance of the class. + + + + + Gets or sets flags determining which data is available for this instance. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the index of the material to apply to the shapes surface in the owning + list. + + + + + Gets or sets the index of the to which this instance is directly attached to. The bone + must be part of the skeleton referenced by the owning instance. + + + + + Gets or sets the index of the in the owning + list. + + + + + Gets or sets the bounding radius/radii spanning the shape. BOTW uses multiple per LOD mesh. + + + + + Gets or sets the number of bones influencing the vertices stored in this buffer. 0 influences equal + rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning. + + + + + Gets or sets a value with unknown purpose. + + + + + Gets or sets the list of which are used to represent different level of details of the + shape. + + + + + Gets or sets the instances forming the bounding tree with which parts of a mesh + are culled when not visible. + + + + + Gets or sets the instance storing the data which forms the shape's surface. Saved + depending on . + + + + + Represents flags determining which data is available for instances. + + + + + The instance references a . + + + + + The boundings in all submeshes are consistent. + + + + + Represents a subarray of a section, storing a slice of indices to draw from the index buffer + referenced in the mesh, mostly used for hiding parts of a model when not visible. + + + + + Gets the offset into the index buffer in bytes. + + + + + Gets the number of indices to reference. + + + + + Represents a single bone in a section, storing its initial transform and transformation + effects. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the index of the parent this instance is a child of. + + + + + Gets or sets the index of a matrix used for smooth skinning. + + + + + Gets or sets the index of a matrix used for rigid skinning. + + + + + Gets or sets flags controlling bone behavior. + + + + + Gets or sets the rotation method used to store bone rotations in . + + + + + Gets or sets the billboard transformation applied to the bone. + + + + + Gets or sets the spatial scale of the bone. + + + + + Gets or sets the spatial rotation of the bone. If is used, the + fourth component is always 1.0f. + + + + + Gets or sets the spatial position of the bone. + + + + + Gets or sets customly attached instances. + + + + + Gets or sets the inverse matrix (Only used in bfres verson v3.3.X.X and below) + + + + + Represents flags controlling bone behavior. + + + + + Set when the bone is visible. + + + + + Represents the rotation method used to store bone rotations. + + + + + A quaternion represents the rotation. + + + + + A represents the Euler rotation in XYZ order. + + + + + Represents the possible transformations for bones to handle them as billboards. + + + + + No transformation is applied. + + + + + Transforms of the child are applied. + + + + + Transforms the Z axis parallel to the camera. + + + + + Transforms the Z axis parallel to the direction of the camera. + + + + + Transforms the Y axis parallel to the camera up vector, and the Z parallel to the camera up-vector. + + + + + Transforms the Y axis parallel to the camera up vector, and the Z axis parallel to the direction of the + camera. + + + + + Transforms the Z axis parallel to the camera by rotating only the Y axis. + + + + + Transforms the Z axis parallel to the direction of the camera by rotating only the Y axis. + + + + + Represents an FSKL section in a subfile, storing armature data. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the rotation method used to store bone rotations. + + + + + Gets or sets the list of instances forming the skeleton. + + + + + Represents the rotation method used to store bone rotations. + + + + + A quaternion represents the rotation. + + + + + A represents the Euler rotation in XYZ order. + + + + + Represents an attribute of a describing the data format, type and layout of a + specific data subset in the buffer. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the index of the buffer storing the data in the list. + + + + + Gets or sets the offset in bytes to the attribute in each vertex. + + + + + Gets or sets the determining the type in which attribute data is available. + + + + + Represents a data buffer holding vertices for a subfile. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the number of bones influencing the vertices stored in this buffer. 0 influences equal + rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning. + + + + + Gets the number of vertices stored by the . It is calculated from the size of the first + in bytes divided by the . + + + + + Gets or sets the dictionary of instances describing how to interprete data in the + . + + + + + Gets or sets the list of instances storing raw unformatted vertex data. + + + + + Represents an exception raised when handling data. + + + + + Initializes a new instance of the class with a specified error + . + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message created + from the given and . + + The format of the error message. + The parameters to format the error message with. + + + + Represents a NintendoWare for Cafe (NW4F) graphics data archive file. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Gets or sets the alignment to use for raw data blocks in the file. + + + + + Gets or sets a name describing the contents. + + + + + Gets or sets the revision of the BFRES structure formats. + + + + + Gets or sets the major revision of the BFRES structure formats. + + + + + Gets or sets the major revision of the BFRES structure formats. + + + + + Gets or sets the second major revision of the BFRES structure formats. + + + + + Gets or sets the minor revision of the BFRES structure formats. + + + + + Gets or sets the second minor revision of the BFRES structure formats. + + + + + Gets the byte order in which data is stored. Must be the endianness of the target platform. + + + + + Gets or sets the stored (FMDL) instances. + + + + + Gets or sets the stored (FTEX) instances. + + + + + Gets or sets the stored (FSKA) instances. + + + + + Gets or sets the stored (FSHU) instances. + + + + + Gets or sets the stored (FSHU) instances for color animations. + + + + + Gets or sets the stored (FSHU) instances for texture SRT animations. + + + + + Gets or sets the stored (FTXP) instances. + + + + + Gets or sets the stored (FVIS) instances for bone visibility animations. + + + + + Gets or sets the stored (FVIS) instances for material visibility animations. + + + + + Gets or sets the stored (FSHA) instances. + + + + + Gets or sets the stored (FSCN) instances. + + + + + Gets or sets attached instances. The key of the dictionary typically represents + the name of the file they were originally created from. + + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Represents an FCAM section in a subfile, storing animations controlling camera settings. + + + + + Initializes a new instance of the class. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the number of bytes required to bake all . + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets the instance storing initial camera parameters. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + The rotation mode stores ZXY angles rather than look-at points in combination with a twist. + + + + + The projection mode is perspective rather than ortographic. + + + + + Represents the animatable data of scene cameras. + + + + + The near clipping plane distance. + + + + + The far clipping plane distance. + + + + + The aspect ratio of the projected image. + + + + + The field of view of the projected image. + + + + + The spatial position of the camera. + + + + + The spatial rotation of the camera. + + + + + The spatial twist of the camera. + + + + + Gets the for instances. + + + + + Animates . + + + + + Animates . + + + + + Animates . + + + + + Animates . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates . + + + + + Represents an FCAM section in a subfile, storing animations controlling fog settings. + + + + + Initializes a new instance of the class. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the index of the distance attenuation function to use. + + + + + Gets or sets the number of bytes required to bake all . + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the name of the distance attenuation function to use. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets the instance storing initial fog parameters. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents the animatable data of scene fog. + + + + + The distance attenuation of the fog depth. + + + + + The color of the fog. + + + + + Gets the for instances. + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the X (red) component of . + + + + + Animates the Y (green) component of . + + + + + Animates the Z (blue) component of . + + + + + Represents an FLIT section in a subfile, storing animations controlling light settings. + + + + + Initializes a new instance of the class. + + + + + Gets or sets flags controlling how the animation should be played. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the index of the light type. + + + + + Gets or sets the index of the distance attenuation function to use. + + + + + Gets or sets the index of the angle attenuation function to use. + + + + + Gets or sets the number of bytes required to bake all . + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the name of the light type. + + + + + Gets or sets the name of the distance attenuation function to use. + + + + + Gets or sets the name of the angle attenuation function to use. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets the instance storing initial light parameters. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents flags specifying which fields are animated. + + + + + Enabled state is animated. + + + + + Position is animated. + + + + + Rotation is animated. + + + + + Distance attenuation is animated. + + + + + Angle attenuation is animated in degrees. + + + + + Color 0 is animated. + + + + + Color 1 is animated. + + + + + Represents the animatable data of scene lighting. + + + + + Enables or disables the light in total. + + + + + The spatial origin of the light source for point or spot lights. + + + + + The spatial rotation of the light source. + + + + + The distance attenuation of the light. + + + + + The angle attenuation of the light in degrees. + + + + + The first light source color. + + + + + The second light source color. + + + + + Gets the for instances. + + + + + Animates . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the X (red) component of . + + + + + Animates the Y (green) component of . + + + + + Animates the Z (blue) component of . + + + + + Animates the X (red) component of . + + + + + Animates the Y (green) component of . + + + + + Animates the Z (blue) component of . + + + + + Represents an FSCN subfile in a , storing scene animations controlling camera, light and + fog settings. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets the instances. + + + + + Gets or sets the instances. + + + + + Gets or sets the instances. + + + + + Gets or sets customly attached instances. + + + + + Represents a parameter animation info in a instance. + + + + + Gets or sets the index of the first instance in the parent + . + + + + + Gets or sets the index of the first instance in the parent + . + + + + + Gets or sets the number of instances used in the parent + . + + + + + Gets or sets the index of the in the . + + + + + Gets the name of the animated . + + + + + Represents an FSHU subfile in a , storing shader parameter animations of a + instance. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the number of bytes required to bake all instances of all + . + + + + + Gets or sets the instance affected by this animation. + + + + + Gets the indices of the instances in the dictionary to + bind for each animation. specifies no binding. + + + + + Gets or sets the instances creating the animation. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents a material parameter animation in a subfile. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name of the animated . + + + + + Gets or sets the list of instances. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets the index of the first relative to all curves of the parent + instances. + + + + + Gets or sets the index of the first relative to all param anim infos of the + parent instances. + + + + + Represents a key shape animation info in a instance. + + + + + Gets or sets the index of the curve in the . + + + + + Gets or sets the index of the in the . + + + + + Gets or sets the name of the in the . + + + + + Represents an FSHA subfile in a , storing shape animations of a + instance. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the number of bytes required to bake all instances of all + . + + + + + Gets or sets the instance affected by this animation. + + + + + Gets or sets the indices of the instances in the dictionary + to bind for each animation. specifies no binding. + + + + + Gets or sets the instances creating the animation. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents a vertex shape animation in a subfile. + + + + + Gets or sets the name of the animated . + + + + + Gets or sets the list of instances. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets the list of base values, excluding the base shape (which is always being initialized with 0f). + + + + + Gets or sets the index of the first relative to all curves of the parent + instances. + + + + + Gets or sets the index of the first relative to all key shape anim infos of + the parent instances. + + + + + Represents the animation of a single in a subfile. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a set of flags indicating whether initial transformation values exist in + . + + + + + Gets or sets a set of flags indicating whether curves animating the corresponding transformation exist. + + + + + Gets or sets a set of flags controlling how to transform bones. + + + + + Gets or sets the name of the animated . + + + + + Gets or sets a field with unknown purpose. + + + + + Gets or sets a field with unknown purpose. + + + + + Gets or sets the element offset in the to an initial translation. + + + + + Gets the index of the first relative to all curves of the parent + instances. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets initial transformation values. Only stores specific transformations according to + . + + + + + Represents if initial values exist for the corresponding transformation in the base animation data. + + + + + Initial scaling values exist. + + + + + Initial rotation values exist. + + + + + Initial translation values exist. + + + + + Represents if curves exist which animate the corresponding transformation component. + + + + + Curve animating the X component of a bone's scale. + + + + + Curve animating the Y component of a bone's scale. + + + + + Curve animating the Z component of a bone's scale. + + + + + Curve animating the X component of a bone's rotation. + + + + + Curve animating the Y component of a bone's rotation. + + + + + Curve animating the Z component of a bone's rotation. + + + + + Curve animating the W component of a bone's rotation. + + + + + Curve animating the X component of a bone's translation. + + + + + Curve animating the Y component of a bone's translation. + + + + + Curve animating the Z component of a bone's translation. + + + + + Represents how a bone transformation has to be applied. + + + + + Represents the animatable data of a instance. + + + + + The scaling of the bone. + + + + + The translation of the bone. + + + + + An unused field. + + + + + The rotation of the bone. + + + + + Gets the for instances. + + + + + Animates (never seen in files). + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the W component of . + + + + + Represents an FSKA subfile in a , storing armature animations of + instances in a . + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the mode used to control looping and baked settings. + + + + + Gets or sets the mode used to store scaling values. + + + + + Gets or sets the mode used to store rotation values. + + + + + Gets or sets the number of bytes required to bake all instances of all + . + + + + + Gets or sets the instances creating the animation. + + + + + Gets or sets the instance affected by this animation. + + + + + Gets or sets the indices of the instances in the dictionary + to bind for each animation. specifies no binding. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents the data format in which scaling values are stored. + + + + + No scaling. + + + + + Default scaling. + + + + + Autodesk Maya scaling. + + + + + Autodesk Softimage scaling. + + + + + Represents the data format in which rotation values are stored. + + + + + Quaternion, 4 components. + + + + + Euler XYZ, 3 components. + + + + + Represents a pattern animation info in a instance. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the index of the curve in the . + + + + + Gets or sets the index of the texture in the . + + + + + Gets or sets the name of the in the . + + + + + Represents an FTXP subfile in a , storing texture material pattern animations. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the number of bytes required to bake all instances of all + . + + + + + Gets or sets the instance affected by this animation. + + + + + Gets or sets the indices of the instances in the + dictionary to bind for each animation. specifies no binding. + + + + + Gets or sets the instances creating the animation. + + + + + Gets or sets the instances pointing to instances + participating in the animation. + + + + + Note used for older bfres files + Gets or sets the instances pointing to instances + participating in the animation. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents a texture pattern material animation in a subfile. + + + + + Gets the name of the animated . + + + + + Gets or sets the list of instances. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets the initial indices. + + + + + Gets or sets the index of the first relative to all curves of the parent + instances. + + + + + Gets or sets the index of the first relative to all param anim infos of the + parent instances. + + + + + Represents an FMDL subfile in a , storing multi-dimensional texture data. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the source channel to map to the R (red) channel. + + + + + Gets or sets the source channel to map to the G (green) channel. + + + + + Gets or sets the source channel to map to the B (blue) channel. + + + + + Gets or sets the source channel to map to the A (alpha) channel. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets the width of the texture. + + + + + Gets or sets the height of the texture. + + + + + Gets or sets the depth of the texture. + + + + + Gets or sets the number of mipmaps stored in the . + + + + + Gets or sets the swizzling value. + + + + + Gets or sets the swizzling alignment. + + + + + Gets or sets the pixel swizzling stride. + + + + + Gets or sets the desired texture data buffer format. + + + + + Gets or sets the desired texture data buffer format. + + + + + Gets or sets the shape of the texture. + + + + + Gets or sets the number of samples for the texture. + + + + + Gets or sets the texture data usage hint. + + + + + Gets or sets the tiling mode. + + + + + Gets or sets the offsets in the array to the data of the mipmap level corresponding + to the array index. + + + + + Gets or sets the raw texture data bytes. + + + + + Gets or sets the raw mipmap level data bytes for all levels. + + + + + Gets or sets customly attached instances. + + + + + Represents an FVIS subfile in a , storing visibility animations of or + instances. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the kind of data the animation controls. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the number of bytes required to bake all . + + + + + Gets or sets the instance affected by this animation. + + + + + Gets or sets the indices of entries in the or + dictionaries to bind to for each animation. specifies no binding. + + + + + Gets or sets the names of entries in the or + dictionaries to bind to for each animation. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets boolean values storing the initial visibility for each or + . + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents the kind of data the visibility animation controls. + + + + + Bone visiblity is controlled. + + + + + Material visibility is controlled. + + + + diff --git a/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.dll b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.dll new file mode 100644 index 00000000..5172a08a Binary files /dev/null and b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.dll differ diff --git a/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.pdb b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.pdb new file mode 100644 index 00000000..81157245 Binary files /dev/null and b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.pdb differ diff --git a/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.xml b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.xml new file mode 100644 index 00000000..b75688af --- /dev/null +++ b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.xml @@ -0,0 +1,5291 @@ + + + + Syroot.NintenTools.NSW.Bfres + + + + + Represents an animation curve used by several sections to control different parameters over time. + + + + + Initializes a new instance of the class. + + + + + Alignment of curve data + + + + + Gets or sets the data type in which are loaded and saved. For simplicity, the class + always stores frames as converted instances. + + + + + Gets or sets the data type in which are loaded and saved. For simplicity, the class + always stores frames as converted instances. + + + + + Gets or sets the curve type, determining the number of elements stored with each key. + + + + + Gets or sets the memory offset relative to the start of the corresponding animation data structure to + animate the field stored at that address. Note that enums exist in the specific animation which map offsets + to names. + + + + + Gets or sets the first frame at which a key is placed. + + + + + Gets or sets the last frame at which a key is placed. + + + + + Gets or sets the scale to multiply values of the curve by. + + + + + Gets or sets the offset to add to the values of the curve (after multiplicating them). + + + + + Gets or sets the difference between the lowest and highest key value. + + + + + Gets the frame numbers at which keys of the same index in the array are placed. + + + + + Gets an array of elements forming the elements of keys placed at the frames of the same index in the + array. + + + + + Represents the possible data types in which are stored. For simple library use, + they are always converted them to and from instances. + + + + + The frames are stored as instances. + + + + + The frames are stored as instances. + + + + + The frames are stored as instances. + + + + + Represents the possible data types in which are stored. For simple library use, + they are always converted them to and from instances. + + + + + The keys are stored as instances. + + + + + The keys are stored as instances. + + + + + The keys are stored as instances. + + + + + Represents the type of key values stored by this curve. This also determines the number of required elements to + define a key in the array. Use the + method to retrieve the number of elements required for the of that curve. + + + + + The curve uses cubic interpolation. 4 elements of the array form a key. + + + + + The curve uses linear interpolation. 2 elements of the array form a key. + + + + + 1 element of the array forms a key. + + + + + 1 element of the array forms a key. + + + + + 1 element of the array forms a key. + + + + + 1 element of the array forms a key. + + + + + 1 element of the array forms a key. + + + + + Gets or sets the memory offset relative to the start of the corresponding animation data structure to + animate the field stored at that address. Note that enums exist in the specific animation which map offsets + to names. + + + + + Represents a 16-bit fixed-point decimal consisting of 1 sign bit, 10 integer bits and 5 fractional bits (denoted + as Q10.5). Note that the implementation is not reporting over- and underflowing errors. + + + Examples: + SIIIIIII_IIIFFFFF + 0b00000000_00010000 = 0.5 + 0b00000000_00100000 = 1 + 0b00000001_00000000 = 8 + 0b01000000_00000000 = 512 + 0b10000000_00000000 = -1024 + + + + + Represents the largest possible value of . + + + + + Represents the smallest possible value of . + + + + + Initializes a new instance of the struct from the given + representation. + + The raw representation of the internally stored bits. + + + + Gets the internally stored value to represent the instance. + + Signed to get arithmetic rather than logical shifts. + + + + Returns the given . + + The . + The result. + + + + Adds the first to the second one. + + The first . + The second . + The addition result. + + + + Negates the given . + + The to negate. + The negated result. + + + + Subtracts the first from the second one. + + The first . + The second . + The subtraction result. + + + + Multiplicates the given by the scalar. + + The . + The scalar. + The multiplication result. + + + + Multiplicates the first by the second one. + + The first . + The second . + The multiplication result. + + + + Divides the given through the scalar. + + The . + The scalar. + The division result. + + + + Divides the first through the second one. + + The first . + The second . + The division result. + + + + Gets a value indicating whether the first specified is the same as the second + specified . + + The first to compare. + The second to compare. + true, if both are the same. + + + + Gets a value indicating whether the first specified is not the same as the second + specified . + + The first to compare. + The second to compare. + true, if both are not the same. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Gets a value indicating whether this is the same as the second specified + . + + The object to compare, if it is a . + true, if both are the same. + + + + Gets a hash code as an indication for object equality. + + The hash code. + + + + Gets a string describing this . + + A string describing this . + + + + Indicates whether the current is equal to another . + + A to compare with this . + true if the current is equal to the other parameter; otherwise, false. + + + + + Represents a 4-byte value which can hold differently typed data. + + + + + The data as an . + + + + + The data as a . + + + + + The data as an . + + + + + Converts the given value to a instance. + + The value to represent in the new instance. + + + + + Converts the given value to a instance. + + The value to represent in the new instance. + + + + + Converts the given value to a instance. + + The value to represent in the new instance. + + + + + Converts the given value to an instance. + + The value to represent in the new instance. + + + + + Converts the given value to a instance. + + The value to represent in the new instance. + + + + + Converts the given value to an instance. + + The value to represent in the new instance. + + + + + Returns the for this instance. + + The enumerated constant that is the of the class or value type that + implements this interface. + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + Converts the value of this instance to an equivalent double-precision floating-point number using the + specified culture-specific formatting information. + + An interface implementation that supplies + culture-specific formatting information. + A double-precision floating-point number equivalent to the value of this instance. + + + + This operation is not supported. + + + + + Converts the value of this instance to an equivalent 32-bit signed integer using the specified + culture-specific formatting information. + + An interface implementation that supplies + culture-specific formatting information. + An 32-bit signed integer equivalent to the value of this instance. + + + + Converts the value of this instance to an equivalent 64-bit signed integer using the specified + culture-specific formatting information. + + An interface implementation that supplies + culture-specific formatting information. + An 64-bit signed integer equivalent to the value of this instance. + + + + This operation is not supported. + + + + + Converts the value of this instance to an equivalent single-precision floating-point number using the + specified culture-specific formatting information. + + An interface implementation that supplies + culture-specific formatting information. + A single-precision floating-point number equivalent to the value of this instance. + + + + This operation is not supported. + + + + + Converts the value of this instance to an of the specified that has + an equivalent value, using the specified culture-specific formatting information. + + The to which the value of this instance is converted. + + An interface implementation that supplies + culture-specific formatting information. + An instance of type conversionType whose value is equivalent to the value of + this instance. + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + This operation is not supported. + + + + + Represents a 16-bit half-precision floating point value according to the IEEE 754 standard. + + + Examples: + SEEEEEFF_FFFFFFFF + 0b00000000_00000000 = 0 + 1b00000000_00000000 = -0 + 0b00111100_00000000 = 1 + 0b11000000_00000000 = -2 + 0b11111011_11111111 = 65504 (MaxValue) + 0b01111100_00000000 = PositiveInfinity + 0b11111100_00000000 = NegativeInfinity + + + + + Represents the smallest positive value greater than zero. + + + + + Represents the largest possible value of . + + + + + Represents the smallest possible value of . + + + + + Represents not a number (NaN). + + + + + Represents negative infinity. + + + + + Represents positive infinity. + + + + + Initializes a new instance of the struct from the given + representation. + + The raw representation of the internally stored bits. + + + + Gets the internally stored value to represent the instance. + + Signed to get arithmetic rather than logical shifts. + + + + Returns the given . + + The . + The result. + + + + Adds the first to the second one. + + The first . + The second . + The addition result. + + + + Negates the given . + + The to negate. + The negated result. + + + + Subtracts the first from the second one. + + The first . + The second . + The subtraction result. + + + + Multiplicates the first by the second one. + + The first . + The second . + The multiplication result. + + + + Divides the first through the second one. + + The first . + The second . + The division result. + + + + Gets a value indicating whether the first specified is the same as the second + specified . + + The first to compare. + The second to compare. + true, if both are the same. + + + + Gets a value indicating whether the first specified is not the same as the second + specified . + + The first to compare. + The second to compare. + true, if both are not the same. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Converts the given value to a instance. + + The value to represent in the new + instance. + + + + Gets a value indicating whether this is the same as the second specified + . + + The object to compare, if it is a . + true, if both are the same. + + + + Gets a hash code as an indication for object equality. + + The hash code. + + + + Gets a string describing this . + + A string describing this . + + + + Indicates whether the current is equal to another . + + A to compare with this . + true if the current is equal to the other parameter; otherwise, false. + + + + + Returns a value indicating whether the specified number evaluates to not a number (). + + A half-precision floating-point number. + true if value evaluates to not a number (); otherwise false. + + + + Returns a value indicating whether the specified number evaluates to negative or positive infinity. + + A half-precision floating-point number. + true if half evaluates to or ; + otherwise false. + + + + Returns a value indicating whether the specified number evaluates to negative infinity. + + A half-precision floating-point number. + true if half evaluates to ; otherwise false. + + + + Returns a value indicating whether the specified number evaluates to positive infinity. + + A half-precision floating-point number. + true if half evaluates to ; otherwise false. + + + + Represents an buffer info section in a subfile. References vertex and index buffers + + + + + Gets or sets the buffer instance that stores face data first, then vertex buffer after. + + + + + Gets or sets the buffer instance that stores face data + + + + + Gets or sets the buffer instance that stores vertex data + + + + + Gets or sets an unkown value + + + + + Represents a buffer info section + + + + + the buffer size + + + + + Flag + + + + + Represents a buffer info section + + + + + Load and display information of RLT + + + + + Represents the non-generic base of a dictionary which can quickly look up instances via + key or index. + + + + + Initializes a new instance of the class. + + + + + Gets the number of instances stored. + + + + + Adds the given to insert in the dictionary. + + Duplicated instances + already exists. + + + + Removes the given from the dictionary. + + Duplicated instances + already exists. + + + + Determines whether the given is in the dictionary. + + true if was found in the dictionary; otherwise false. + + + + + Returns the key given is within range of the dictionary. + + + + + Removes all elements from the dictionary. + + + + + Returns only the publically visible nodes, excluding the root node. + + + + + Represents a node forming the Patricia trie of the dictionary. + + + + + Represents a which is stored in a . + + + + + The textual represented by this instance. + + + + + The with which this string was read or will be written. + + + + + Converts the given value to a instance. + + The value to represent in the new instance. + + + + + Converts the given value to an instance. + + The value to represent in the new instance. + + + + + Returns the value of the property. + + The value of the property. + + + + Represents a 2D transformation. + + + + + The size of this structure. + + + + + The scaling amount of the transformation. + + + + + The rotation angle of the transformation. + + + + + The translation amount of the transformation. + + + + + Represents a 3D transformation. + + + + + The size of this structure. + + + + + The scaling amount of the transformation. + + + + + The rotation amount of the transformation. + + + + + The translation amount of the transformation. + + + + + Represents a 2D texture transformation. + + + + + The size of this structure. + + + + + The with which the transformation is applied. + + + + + The scaling amount of the transformation. + + + + + The rotation angle of the transformation. + + + + + The translation amount of the transformation. + + + + + Represents a 2D texture transformation which is multiplied by a 3x4 matrix referenced at runtime by the + . + + + + + The size of this structure. + + + + + The with which the transformation is applied. + + + + + The scaling amount of the transformation. + + + + + The rotation angle of the transformation. + + + + + The translation amount of the transformation. + + + + + A pointer to a 3x4 matrix to multiply the transformation with. Set at runtime. + + + + + Represents the texture transformation mode used in and . + + + + + Represents custom user variables which can be attached to many sections and subfiles of a . + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + The data type of the stored values. + + + + + Returns the stored value as an array of instances when the is + . + + The typed value. + + + + Returns the stored value as an array of instances when the is + . + + The typed value. + + + + Returns the stored value as an array of instances when the is + or . + + The typed value. + + + + Returns the stored value as an array of instances when the is + . + + The typed value. + + + + Sets the stored as an array and the to + + + The value to store. + + + + Sets the stored as a array and the to + + + The value to store. + + + + Sets the stored as a array and the to + or depending on + . + + true to store data as UTF-16 encoded strings, or false to store it + as ASCII encoded strings. + The value to store. + + + + Sets the stored as a array and the to + + + The value to store. + + + + Represents the possible data types of values stored in instances. + + + + + The values is an array. + + + + + The values is a array. + + + + + The values is a array encoded in ASCII. + + + + + The values is a array. + + + + + The values is a array encoded in UTF-16. + + + + + Represents extension methods for the class. + + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads a instance from the current stream and returns it. + + The extended . + The number of instances to read. + The instance. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The in which values are stored. + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The in which values are stored. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The in which values are stored. + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The in which values are stored. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The in which values are stored. + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The in which values are stored. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Reads a instance from the current stream and returns it. + + The extended . + The instance. + + + + Reads instances from the current stream and returns them. + + The extended . + The number of instances to read. + The instances. + + + + Returns the conversion delegate for converting data available in the given + into a instance. Useful to prevent repetitive lookup for multiple values. + + The extended . + The of the data. + A conversion delegate for the data. + + + + Reads a instance converted from the given and + returns it. + + The extended . + The of the data. + The instance. + + + + Reads a instances converted from the given and + returns them. + + The extended . + The number of instances to read. + The of the data. + The instances. + + + + Represents extension methods for the class. + + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + The in which values are stored. + + + + Writes instances into the current stream. + + The extended . + The instances. + The in which values are stored. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + The in which values are stored. + + + + Writes instances into the current stream. + + The extended . + The instances. + The in which values are stored. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + The in which values are stored. + + + + Writes instances into the current stream. + + The extended . + The instances. + The in which values are stored. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Writes a instance into the current stream. + + The extended . + The instance. + + + + Writes instances into the current stream. + + The extended . + The instances. + + + + Returns the conversion delegate for converting data available in the given + from a instance. Useful to prevent repetitive lookup for multiple values. + + The extended . + The of the data. + A conversion delegate for the data. + + + + Returns the conversion delegate for converting data available in the given + from a instance. Useful to prevent repetitive lookup for multiple values. + + The extended . + The of the data. + A conversion delegate for the data. + + + + Writes a instance into the current stream with the given + . + + The extended . + The instance. + The of the data. + + + + Writes instances into the current stream with the given + . + + The extended . + The instances. + The of the data. + + + + Represents extension methods for instances. + + + + + Returns an instance represented by the given number of , starting + at the . + + The extended instance. + The first bit of the encoded value. + The number of least significant bits which are used to store the + value. + The decoded . + + + + Returns the current with the bit at the set (being 1). + + The extended instance. + The 0-based index of the bit to enable. + The current with the bit enabled. + + + + Returns the current with the given set into the given number + of starting at . + + The extended instance. + The value to encode. + The first bit used for the encoded value. + The number of bits which are used to store the value. + The current with the value encoded into it. + + + + Returns the current with the bit at the cleared (being 0). + + The extended instance. + The 0-based index of the bit to disable. + The current with the bit disabled. + + + + Returns a value indicating whether the bit at the in the current + is enabled or disabled. + + The extended instance. + The 0-based index of the bit to check. + true when the bit is set; otherwise false. + + + + Returns the current with all bits rotated in the given , + where positive directions rotate left and negative directions rotate right. + + The extended instance. + The direction in which to rotate, where positive directions rotate left. + The current with the bits rotated. + + + + Returns the current with the bit at the enabled or disabled, + according to . + + The extended instance. + The 0-based index of the bit to enable or disable. + true to enable the bit; otherwise false. + The current with the bit enabled or disabled. + + + + Returns the current with the bit at the enabled when it is + disabled or disabled when it is enabled. + + The extended instance. + The 0-based index of the bit to toggle. + The current with the bit toggled. + + + + Represents extension methods for instances. + + + + + Returns an instance represented by the given number of , starting + at the . + + The extended instance. + The first bit of the encoded value. + The number of least significant bits which are used to store the + value. + The decoded . + + + + Returns the current with the bit at the set (being 1). + + The extended instance. + The 0-based index of the bit to enable. + The current with the bit enabled. + + + + Returns the current with the given set into the given number + of starting at . + + The extended instance. + The value to encode. + The first bit used for the encoded value. + The number of bits which are used to store the value. + The current with the value encoded into it. + + + + Returns the current with the bit at the cleared (being 0). + + The extended instance. + The 0-based index of the bit to disable. + The current with the bit disabled. + + + + Returns a value indicating whether the bit at the in the current + is enabled or disabled. + + The extended instance. + The 0-based index of the bit to check. + true when the bit is set; otherwise false. + + + + Returns the current with all bits rotated in the given , + where positive directions rotate left and negative directions rotate right. + + The extended instance. + The direction in which to rotate, where positive directions rotate left. + The current with the bits rotated. + + + + Returns the current with the bit at the enabled or disabled, + according to . + + The extended instance. + The 0-based index of the bit to enable or disable. + true to enable the bit; otherwise false. + The current with the bit enabled or disabled. + + + + Returns the current with the bit at the enabled when it is + disabled or disabled when it is enabled. + + The extended instance. + The 0-based index of the bit to toggle. + The current with the bit toggled. + + + + Represents the common interface for data instances. + + + + + Loads raw data from the data stream into instances. + + The to load data with. + + + + Saves header data of the instance and queues referenced data in the given . + + The to save headers and queue data with. + + + + Loads the hierachy and data of a . + + + + + Initializes a new instance of the class loading data into the given + from the specified which is optionally left open. + + The instance to load data into. + The to read data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The instance to load data into. + The name of the file to load the data from. + + + + Gets the loaded instance. + + + + + Gets the loaded instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the loaded instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the loaded instance. + + + + + Starts deserializing the data from the root. + + + + + Reads and returns an instance of type from the following + offset or returns null if the read offset is 0. + + The type of the to read. + The instance or null. + + + + Reads and returns an instance of arbitrary type from the following offset with the + given or returns null if the read offset is 0. + + The type of the data to read. + The callback to read the instance data with. + The optional offset to use instead of reading a following one. + The data instance or null. + Offset required for ExtFile header (offset specified before size). + + + + Reads and returns an instance with elements of type from + the following offset or returns an empty instance if the read offset is 0. + + The type of the elements. + The instance. + + + + Reads and returns an instance with elements of type + from the following offset or returns null if the read offset is 0. + + The type of the elements. + The number of elements to expect for the list. + The optional offset to use instead of reading a following one. + The instance or null. + Offset required for FMDL FVTX lists (offset specified before count). + + + + Reads and returns a instance from the following offset or null if the read + offset is 0. + + The optional encoding of the text. + The read text. + + + + Reads and returns instances from the following offsets. + + The number of instances to read. + The optional encoding of the texts. + The read texts. + + + + Reads a BFRES signature consisting of 4 ASCII characters encoded as an and checks for + validity. + + A valid signature. + + + + Reads a BFRES offset which is the absolute address. + + The absolute address of the offset. + + + + Reads BFRES offsets which is the absolute addresses. + + The number of offsets to read. + The absolute addresses of the offsets. + + + + Saves the hierachy and data of a . + + + + + Gets or sets a data block alignment typically seen with . + + + + + Initializes a new instance of the class saving data from the given + into the specified which is optionally left open. + + The instance to save data from. + The to save data into. + true to leave the stream open after writing, otherwise false. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Initializes a new instance of the class for the file with the given + . + + The instance to save. + The name of the file to save the data into. + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the saved instance. + + + + + Gets the current index when writing lists or dicts. + + + + + Starts serializing the data from the root. + + + + + Gets the block size of all external files + + + + + Reserves space for an offset to the written later. + + The to save. + The index of the element, used for instances referenced by a . + The position the offset is saved to. + + + + + Reserves space for the file size field which is automatically filled later. + + + + + Save pointer array to be relocated in section 1 + + + + + Reserves space for the string pool size and offset fields which are automatically + filled later. + + + + + Reserves space for the memory pool field which is automatically filled later. + + + + + Reserves space for the memory pool field which is automatically filled later. + + + + + Saves the Index buffer pointer to be used later in the relocation table + + + + + Saves the Vertex buffer pointer to be used later in the relocation table + + + + + Reserves space for the memory pool field which is automatically filled later. + + + + + Reserves space for an offset to the written later. + + The type of the elements. + The to save. + + + + Reserves space for an offset to the written later. + + The type of the element values. + The to save. + + + + Reserves space for an offset to the written later with the + . + + The data to save. + The to invoke to write the data. + + + + Reserves space for an offset to the written later in the string pool with the + specified . + + The name to save. + The in which the name will be stored. + + + + Reserves space for offsets to the written later in the string pool with the + specified + + The names to save. + The in which the names will be stored. + + + + Reserves space for an offset and size for header block. + + + + + Reserves space for an offset to the written later in the data block pool. + + The data to save. + The alignment to seek to before invoking the callback. + The to invoke to write the data. + + + + Writes a BFRES signature consisting of 4 ASCII characters encoded as an . + + A valid signature. + + + + Represents a sorting empty strings to the end of lists. + + + + + Represents a file attachment to a which can be of arbitrary data. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the raw data stored by the external file. + + + + + Opens and returns a on the raw byte array, which optionally + can be written to. + + true to allow write access to the raw data. + The opened instance. + + + + Represents the format of a vertex attribute entry. Possible type conversions: + UNorm: attrib unsigned integer is converted to/from [0.0, 1.0] in shader. + UInt: attrib unsigned integer is copied to/from shader as unsigned int. + SNorm: attrib signed integer is converted to/from [-1.0, 1.0] in shader. + SInt: attrib signed integer is copied to/from shader as signed int. + Single: attrib single is copied to/from shader as Single. + UIntToSingle: attrib unsigned integer is converted Single in shader. + SIntToSingle: attrib signed integer is converted Single in shader. + + + + + Represents compare functions used for depth and stencil tests. + + + + + Represents the type in which vertex indices are stored. + + + + + Represents the base primitive used to draw each side of the polygon when dual-sided polygon mode is enabled. + + + + + Represents the type of primitives to draw. + + + + + Represents type of border color to use. + + + + + Represents how to treat texture coordinates outside of the normalized coordinate texture range. + + + + + Represents a helper class for working with instances. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with data read from the given + . The data is available in the , which defaults + to system byte order. + + The to initially read data from. + The in which vertex data is available. null to use + system byte order. + + + + Gets or sets the in which vertex data will be stored when calling + . This should be the same as the remainder of the in + which it will be stored. + + + + + Gets or sets the number of bones influencing the vertices stored in the buffer. 0 influences equal + rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning. + + + + + Gets or sets the list of instances which store the data. + + + + + Gets or sets the instance at the given . + + The index of the instance. + The instance at the given index. + + + + Gets or sets the first instance with the given + . + + The name of the instance. + The instance with the given name. + + + + Returns a instance out of the stored helper data. + + A new . + + + + Represents an attribute and the data it stores in a instance. + + + + + The name of the attribute, typically used to determine the use of the data. + + + + + The into which data will be converted upon creating a + . + + + + + The data stored for this attribute. Has to be of the same length as every other + . Depending on , not every component of the + elements is used. + + + + + Represents an FMAA section in a subfile, storing material animation data. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the number of bytes required to bake all . + + + + + Gets or sets the instance affected by this animation. + + + + + Gets the indices of the instances in the dictionary to + bind for each animation. specifies no binding. + + + + + Gets or sets customly attached instances. + + + + + Gets or sets the mode used to control looping and baked settings. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents a material animation in a subfile, storing material animation data. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the list of instances. + + + + + Gets or sets the list of instances. + + + + + Gets or sets the list of instances. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Represents a material animation in a subfile, storing material animation data. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the index of the first instance in the parent + . + + + + + Gets or sets the index of the first instance in the parent + . + + + + + Gets or sets the number of instances used in the parent + . + + + + + Gets or sets the index of the in the . + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Represents a material animation in a subfile, storing material animation data. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the index of the curve in the . + + + + + Gets or sets the index of the first instance in the parent + . + + + + + Gets or sets the index of the in the . + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Represents an FMAT subsection of a subfile, storing information on with which textures and + how technically a surface is drawn. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets flags specifying how a is rendered. + + + + + Gets or sets the list of instances referencing the instances + required to draw the material. + + + + + Gets or sets a dictionary of instances which configure how to draw + instances referenced by the list. + + + + + Gets or sets the raw data block which stores values. + + + + + Gets or sets customly attached instances. + + + + + Gets or sets a set of bits determining whether instances are volatile. + + + + + Represents general flags specifying how a is rendered. + + + + + The material is not rendered at all. + + + + + The material is rendered. + + + + + Represents a render info in a FMAT section storing uniform parameters required to render the + . + + + + + Initializes a new instance of the class. + + + + + Gets the determining the data type of the stored value. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets the stored value as an array. Only valid if is + . + + The stored value as an array. + + + + Gets the stored value as a array. Only valid if is + . + + The stored value as a array. + + + + Gets the stored value as a array. Only valid if is + . + + The stored value as a array. + + + + Sets the stored value as an array and sets to + . + + The array to set as the value. + + + + Sets the stored value as a array and sets to + . + + The array to set as the value. + + + + Sets the stored value as a array and sets to + . + + The array to set as the value. + + + + Represents the data type of elements of the value array. + + + + + The elements are instances. + + + + + The elements are instances. + + + + + The elements are instances. + + + + + Represents a sampler in a section, storing configuration on how to + draw and interpolate textures. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the UV wrap mode in the U direction + + + + + Gets or sets the UV wrap mode in the V direction + + + + + Gets or sets the UV wrap mode in the W direction + + + + + Gets or sets the compare function + + + + + Gets or sets the border color + + + + + Gets or sets the max anisotropic filtering value + + + + + Initializes a new instance of the class. + + + + + Represents a parameter value in a section, passing data to shader variables. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the type of the value. + + + + + Gets the offset in the byte array in bytes. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets the size of the value in bytes. + + + + + Represents the data types in which instances can store their value. + + + + + The value is a single . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a single . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a single . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a single . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + An invalid type for values, only used for internal computations. + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + An invalid type for values, only used for internal computations. + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + An invalid type for values, only used for internal computations. + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + The value is a . + + + + + Represents an FMDL subfile in a , storing model vertex data, skeletons and used materials. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets the instance to deform the model with animations. + + + + + Gets or sets the instances storing the vertex data used by the + . + + + + + Gets or sets the instances forming the surface of the model. + + + + + Gets or sets the instances forming the surface of the model. + + + + + Gets or sets the names. + + + + + Gets or sets the instance applied on the to color their surface. + + + + + Gets or sets customly attached names. + + + + + Gets or sets customly attached instances. + + + + + Gets the total number of vertices to process when drawing this model. + + This excludes vertices which are not processed by any shader. However, the exact value does not + seem to matter, so the total count of all vertices is taken to keep things trivial for now. + + + + Represents a spatial bounding box. + + + + + The center point of the bounding box. + + + + + The extent from the center point to the furthest point. + + + + + Represents a node in a bounding tree to determine when to show which sub mesh of a + . + + + + + Index for for morhping the shape with instances. + + + + + Index for for morhping the shape with instances. + + + + + Index for for morhping the shape with instances. + + + + + Index for for morhping the shape with instances. + + + + + Index for for morhping the shape with instances. + + + + + Represents the surface net of a section, storing information on which + index to use for referencing vertices of the shape, mostly used for different levels of + detail (LoD) models. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the instance storing buffer data at runtime + + + + + Gets or sets the instance storing buffer size + + + + + Gets or sets the which determines how indices are used to form polygons. + + + + + Gets the determining the data type of the indices in the + . + + + + + Gets the number of indices stored in the . + + + + + Gets or sets the list of instances which split up a mesh into parts which can be + hidden if they are not visible to optimize rendering performance. + + + + + Gets or sets the offset to the first vertex element of a to reference by indices. + + + + + Returns the indices stored in the as instances. + + The indices stored in the . + + + + Stores the given in the in the provided + , or the current if none was specified. + + The indices to store in the . + The to use or null to use the current format. + + + + + Represents a sphere boundry in a to determine when to show which sub mesh of a + . + + + + + Represents an FSHP section in a subfile. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets flags determining which data is available for this instance. + + + + + Gets or sets the index of the material to apply to the shapes surface in the owning + list. + + + + + Gets or sets the index of the to which this instance is directly attached to. The bone + must be part of the skeleton referenced by the owning instance. + + + + + Gets or sets the index of the in the owning + list. + + + + + Gets or sets the bounding radius/radii spanning the shape for each LOD mesh + + + + + Gets or sets the number of bones influencing the vertices stored in this buffer. 0 influences equal + rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning. + + + + + Gets or sets a value with unknown purpose. + + + + + Gets or sets the list of which are used to represent different level of details of the + shape. + + + + + Gets or sets the instances forming the bounding tree with which parts of a mesh + are culled when not visible. + + + + + Gets or sets the instance storing the data which forms the shape's surface. Saved + depending on . + + + + + Represents flags determining which data is available for instances. + + + + + The instance references a . + + + + + The boundings in all submeshes are consistent. + + + + + Represents a subarray of a section, storing a slice of indices to draw from the index buffer + referenced in the mesh, mostly used for hiding parts of a model when not visible. + + + + + Gets the offset into the index buffer in bytes. + + + + + Gets the number of indices to reference. + + + + + Represents a single bone in a section, storing its initial transform and transformation + effects. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the index of the parent this instance is a child of. + + + + + Gets or sets the index of a matrix used for smooth skinning. + + + + + Gets or sets the index of a matrix used for rigid skinning. + + + + + Gets or sets flags controlling bone behavior. + + + + + Gets or sets the rotation method used to store bone rotations in . + + + + + Gets or sets the billboard transformation applied to the bone. + + + + + Gets or sets the spatial scale of the bone. + + + + + Gets or sets the spatial rotation of the bone. If is used, the + fourth component is always 1.0f. + + + + + Gets or sets the spatial position of the bone. + + + + + Gets or sets customly attached names. + + + + + Gets or sets customly attached instances. + + + + + Represents flags controlling bone behavior. + + + + + Set when the bone is visible. + + + + + Represents the rotation method used to store bone rotations. + + + + + A quaternion represents the rotation. + + + + + A represents the Euler rotation in XYZ order. + + + + + Represents the possible transformations for bones to handle them as billboards. + + + + + No transformation is applied. + + + + + Transforms of the child are applied. + + + + + Transforms the Z axis parallel to the camera. + + + + + Transforms the Z axis parallel to the direction of the camera. + + + + + Transforms the Y axis parallel to the camera up vector, and the Z parallel to the camera up-vector. + + + + + Transforms the Y axis parallel to the camera up vector, and the Z axis parallel to the direction of the + camera. + + + + + Transforms the Z axis parallel to the camera by rotating only the Y axis. + + + + + Transforms the Z axis parallel to the direction of the camera by rotating only the Y axis. + + + + + Represents an FSKL section in a subfile, storing armature data. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Gets or sets the rotation method used to store bone rotations. + + + + + Gets or sets the list of names. + + + + + Gets or sets the list of instances forming the skeleton. + + + + + Represents the rotation method used to store bone rotations. + + + + + A quaternion represents the rotation. + + + + + A represents the Euler rotation in XYZ order. + + + + + Represents an attribute of a describing the data format, type and layout of a + specific data subset in the buffer. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the index of the buffer storing the data in the list. + + + + + Gets or sets the offset in bytes to the attribute in each vertex. + + + + + Gets or sets the determining the type in which attribute data is available. + + + + + Represents a data buffer holding vertices for a subfile. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the number of bones influencing the vertices stored in this buffer. 0 influences equal + rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning. + + + + + Gets the number of vertices stored by the . It is calculated from the size of the first + in bytes divided by the . + + + + + Gets or sets the instance storing buffer data at runtime + + + + + The size of a full vertex in bytes. + + + + + Gets or sets the dictionary of instances describing how to interprete data in the + . + + + + + Gets or sets the list of instances storing raw unformatted vertex data. + + + + + Represents stride and size in a + specific data subset in the buffer. + + + + + The size of a full vertex in bytes. + + + + + The gpu access flags. + + + + + Represents stride and size in a + specific data subset in the buffer. + + + + + The size of a full vertex in bytes. + + + + + Represents an exception raised when handling data. + + + + + Initializes a new instance of the class with a specified error + . + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message created + from the given and . + + The format of the error message. + The parameters to format the error message with. + + + + Represents a NintendoWare for Cafe (NW4F) graphics data archive file. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Gets or sets a name describing the contents. + + + + + Gets or sets the alignment to use for raw data blocks in the file. + + + + + Gets or sets the major revision of the BFRES structure formats. + + + + + Gets or sets the major revision of the BFRES structure formats. + + + + + Gets or sets the second major revision of the BFRES structure formats. + + + + + Gets or sets the minor revision of the BFRES structure formats. + + + + + Gets or sets the second minor revision of the BFRES structure formats. + + + + + Gets the byte order in which data is stored. Must be the endianness of the target platform. + + + + + Gets or sets the alignment value. + + + + + Gets or sets the target adress size to use for raw data blocks in the file. + + + + + Gets or sets the flag. Unknown purpose. + + + + + Gets or sets the BlockOffset. + + + + + Gets or sets the stored (FMDL) names. + + + + + Gets or sets the stored (FMDL) instances. + + + + + Gets or sets the stored (FSKA) instances. + + + + + Gets or sets the stored (FSKA) instances for many types of skeletal animations. + + + + + Gets or sets the stored (FMAA) names. + + + + + Gets or sets the stored (FMAA) instances for many types of material animations. + + + + + Gets or sets the stored (FVIS) names + + + + + Gets or sets the stored (FVIS) instances for bone visibility animations. + + + + + Gets or sets the stored (FSHA) names. + + + + + Gets or sets the stored (FSHA) instances. + + + + + Gets or sets the stored (FSCN) names. + + + + + Gets or sets the stored (FSCN) instances. + + + + + Gets or sets the stored instances. + + + + + Gets or sets the stored instances. + + + + + Gets or sets attached names + + + + + Gets or sets attached instances. The key of the dictionary typically represents + the name of the file they were originally created from. + + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Represents an FCAM section in a subfile, storing animations controlling camera settings. + + + + + Initializes a new instance of the class. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the number of bytes required to bake all . + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets the instance storing initial camera parameters. + + + + + Gets or sets customly attached instances. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + The rotation mode stores ZXY angles rather than look-at points in combination with a twist. + + + + + The projection mode is perspective rather than ortographic. + + + + + Represents the animatable data of scene cameras. + + + + + The near clipping plane distance. + + + + + The far clipping plane distance. + + + + + The aspect ratio of the projected image. + + + + + The field of view of the projected image. + + + + + The spatial position of the camera. + + + + + The spatial rotation of the camera. + + + + + The spatial twist of the camera. + + + + + Gets the for instances. + + + + + Animates . + + + + + Animates . + + + + + Animates . + + + + + Animates . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates . + + + + + Represents an FCAM section in a subfile, storing animations controlling fog settings. + + + + + Initializes a new instance of the class. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the index of the distance attenuation function to use. + + + + + Gets or sets the number of bytes required to bake all . + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the name of the distance attenuation function to use. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets the instance storing initial fog parameters. + + + + + Gets or sets customly attached instances. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents the animatable data of scene fog. + + + + + The distance attenuation of the fog depth. + + + + + The color of the fog. + + + + + Gets the for instances. + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the X (red) component of . + + + + + Animates the Y (green) component of . + + + + + Animates the Z (blue) component of . + + + + + Represents an FLIT section in a subfile, storing animations controlling light settings. + + + + + Initializes a new instance of the class. + + + + + Gets or sets flags controlling how the animation should be played. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the index of the light type. + + + + + Gets or sets the index of the distance attenuation function to use. + + + + + Gets or sets the index of the angle attenuation function to use. + + + + + Gets or sets the number of bytes required to bake all . + + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the name of the light type. + + + + + Gets or sets the name of the distance attenuation function to use. + + + + + Gets or sets the name of the angle attenuation function to use. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets the instance storing initial light parameters. + + + + + Gets or sets customly attached instances. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents flags specifying which fields are animated. + + + + + Enabled state is animated. + + + + + Position is animated. + + + + + Rotation is animated. + + + + + Distance attenuation is animated. + + + + + Angle attenuation is animated in degrees. + + + + + Color 0 is animated. + + + + + Color 1 is animated. + + + + + Represents the animatable data of scene lighting. + + + + + Enables or disables the light in total. + + + + + The spatial origin of the light source for point or spot lights. + + + + + The spatial rotation of the light source. + + + + + The distance attenuation of the light. + + + + + The angle attenuation of the light in degrees. + + + + + The first light source color. + + + + + The second light source color. + + + + + Gets the for instances. + + + + + Animates . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the X (red) component of . + + + + + Animates the Y (green) component of . + + + + + Animates the Z (blue) component of . + + + + + Animates the X (red) component of . + + + + + Animates the Y (green) component of . + + + + + Animates the Z (blue) component of . + + + + + Represents an FSCN subfile in a , storing scene animations controlling camera, light and + fog settings. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets the instances. + + + + + Gets or sets the instances. + + + + + Gets or sets the instances. + + + + + Gets or sets customly attached instances. + + + + + Gets or sets the instances. + + + + + Gets or sets the instances. + + + + + Gets or sets the instances. + + + + + Gets or sets customly attached instances. + + + + + Represents a key shape animation info in a instance. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the index of the curve in the . + + + + + Gets or sets the index of the in the . + + + + + Gets or sets the name of the in the . + + + + + Represents an FSHA subfile in a , storing shape animations of a + instance. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the number of bytes required to bake all instances of all + . + + + + + Gets or sets the instance affected by this animation. + + + + + Gets or sets the indices of the instances in the dictionary + to bind for each animation. specifies no binding. + + + + + Gets or sets the instances creating the animation. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents a vertex shape animation in a subfile. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name of the animated . + + + + + Gets or sets the list of instances. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets the list of base values, excluding the base shape (which is always being initialized with 0f). + + + + + Gets or sets the index of the first relative to all curves of the parent + instances. + + + + + Gets or sets the index of the first relative to all key shape anim infos of + the parent instances. + + + + + Represents the animation of a single in a subfile. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a set of flags indicating whether initial transformation values exist in + . + + + + + Gets or sets a set of flags indicating whether curves animating the corresponding transformation exist. + + + + + Gets or sets a set of flags controlling how to transform bones. + + + + + Gets or sets the name of the animated . + + + + + Gets or sets a field with unknown purpose. + + + + + Gets or sets a field with unknown purpose. + + + + + Gets or sets the element offset in the to an initial translation. + + + + + Gets the index of the first relative to all curves of the parent + instances. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets initial transformation values. Only stores specific transformations according to + . + + + + + Represents if initial values exist for the corresponding transformation in the base animation data. + + + + + Initial scaling values exist. + + + + + Initial rotation values exist. + + + + + Initial translation values exist. + + + + + Represents if curves exist which animate the corresponding transformation component. + + + + + Curve animating the X component of a bone's scale. + + + + + Curve animating the Y component of a bone's scale. + + + + + Curve animating the Z component of a bone's scale. + + + + + Curve animating the X component of a bone's rotation. + + + + + Curve animating the Y component of a bone's rotation. + + + + + Curve animating the Z component of a bone's rotation. + + + + + Curve animating the W component of a bone's rotation. + + + + + Curve animating the X component of a bone's translation. + + + + + Curve animating the Y component of a bone's translation. + + + + + Curve animating the Z component of a bone's translation. + + + + + Represents how a bone transformation has to be applied. + + + + + Represents the animatable data of a instance. + + + + + The scaling of the bone. + + + + + The translation of the bone. + + + + + An unused field. + + + + + The rotation of the bone. + + + + + Gets the for instances. + + + + + Animates (never seen in files). + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the X component of . + + + + + Animates the Y component of . + + + + + Animates the Z component of . + + + + + Animates the W component of . + + + + + Represents an FSKA subfile in a , storing armature animations of + instances in a . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets the mode used to control looping and baked settings. + + + + + Gets or sets the mode used to store scaling values. + + + + + Gets or sets the mode used to store rotation values. + + + + + Gets or sets the number of bytes required to bake all instances of all + . + + + + + Gets or sets the instances creating the animation. + + + + + Gets or sets the instance affected by this animation. + + + + + Gets or sets the indices of the instances in the dictionary + to bind for each animation. specifies no binding. + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + + Represents the data format in which scaling values are stored. + + + + + No scaling. + + + + + Default scaling. + + + + + Autodesk Maya scaling. + + + + + Autodesk Softimage scaling. + + + + + Represents the data format in which rotation values are stored. + + + + + Quaternion, 4 components. + + + + + Euler XYZ, 3 components. + + + + + Represents an FVIS subfile in a , storing visibility animations of or + instances. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from the given which + is optionally left open. + + The to load the data from. + true to leave the stream open after reading, otherwise false. + + + + Initializes a new instance of the class from the file with the given + . + + The name of the file to load the data from. + + + + Saves the contents in the given and optionally leaves it open + + The to save the contents into. + true to leave the stream open after writing, otherwise false. + + + + Saves the contents in the file with the given . + + The name of the file to save the contents into. + + + + Gets or sets the name with which the instance can be referenced uniquely in + instances. + + + + + Gets or sets the path of the file which originally supplied the data of this instance. + + + + + Gets or sets the total number of frames this animation plays. + + + + + Gets or sets flags controlling how animation data is stored or how the animation should be played. + + + + + Gets or sets the number of bytes required to bake all instances of all + . + + + + + Gets or sets the instance affected by this animation. + + + + + Gets or sets the indices of entries in the or + dictionaries to bind to for each animation. specifies no binding. + + + + + Gets or sets the names of entries in the or + dictionaries to bind to for each animation. + + + + + Gets or sets instances animating properties of objects stored in this section. + + + + + Gets or sets boolean values storing the initial visibility for each or + . + + + + + Gets or sets customly attached instances. + + + + + Represents flags specifying how animation data is stored or should be played. + + + + + The stored curve data has been baked. + + + + + The animation repeats from the start after the last frame has been played. + + + + diff --git a/File_Format_Library/FileFormats/Archives/SARC.cs b/File_Format_Library/FileFormats/Archives/SARC.cs index cace0af3..98aa0268 100644 --- a/File_Format_Library/FileFormats/Archives/SARC.cs +++ b/File_Format_Library/FileFormats/Archives/SARC.cs @@ -226,24 +226,6 @@ namespace FirstPlugin GC.SuppressFinalize(this); } - IEnumerable Collect(TreeNodeCollection nodes) - { - foreach (TreeNode node in nodes) - { - yield return node; - - bool IsNodeFile = node is IFileFormat; - - if (!IsNodeFile) - { - //We don't need to save the child of IFIleFormats - //If opened the file should save it's own children - foreach (var child in Collect(node.Nodes)) - yield return child; - } - } - } - static uint NameHash(string name) { uint result = 0; diff --git a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs index 24ef4aeb..ddcb336c 100644 --- a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs +++ b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs @@ -399,6 +399,7 @@ namespace Bfres.Structs Textures.Add(name); } + Materials.Clear(); foreach (var matanim in anim.MaterialAnimDataList) { var mat = new MaterialAnimEntry(matanim.Name); diff --git a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSHU.cs b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSHU.cs index 8b6d2b9d..b7a2df38 100644 --- a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSHU.cs +++ b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSHU.cs @@ -154,6 +154,8 @@ namespace Bfres.Structs FrameCount = anim.FrameCount; ShaderParamAnim = anim; + + Materials.Clear(); foreach (ShaderParamMatAnim matAnim in anim.ShaderParamMatAnims) { MaterialAnimEntry matNode = new MaterialAnimEntry(matAnim.Name); diff --git a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSKA.cs b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSKA.cs index add443cf..86f42680 100644 --- a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSKA.cs +++ b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSKA.cs @@ -133,17 +133,10 @@ namespace Bfres.Structs { STSkeleton skeleton = GetActiveSkeleton(); - for (int i = 0; i <= FrameCount; i++) - { - - } - if (SkeletalAnimU != null) BrawlboxHelper.FSKAConverter.Fska2Chr0(BfresPlatformConverter.FSKAConvertWiiUToSwitch(SkeletalAnimU), FileName); else BrawlboxHelper.FSKAConverter.Fska2Chr0(SkeletalAnim, FileName); - - // BrawlboxHelper.FSKAConverter.Fska2Chr0(this, skeleton, FileName); } else if (ext == ".smd") { diff --git a/File_Format_Library/FileFormats/Layout/BFLYT.cs b/File_Format_Library/FileFormats/Layout/BFLYT.cs index 718f9ac6..ab3413c8 100644 --- a/File_Format_Library/FileFormats/Layout/BFLYT.cs +++ b/File_Format_Library/FileFormats/Layout/BFLYT.cs @@ -13,7 +13,7 @@ using SharpYaml.Serialization; namespace FirstPlugin { - public class BFLYT : IFileFormat, IEditor, IConvertableTextFormat + public class BFLYT : IFileFormat, IEditorForm, IConvertableTextFormat { public FileType FileType { get; set; } = FileType.Layout; @@ -75,7 +75,7 @@ namespace FirstPlugin return editor; } - public void FillEditor(UserControl control) { + public void FillEditor(Form control) { ((LayoutEditor)control).LoadBflyt(header, FileName); } @@ -85,7 +85,101 @@ namespace FirstPlugin CanSave = false; header = new Header(); - header.Read(new FileReader(stream), FileName); + header.Read(new FileReader(stream), this); + } + + public List GetShadersGTX() + { + List shaders = new List(); + if (IFileInfo.ArchiveParent != null) + { + foreach (var file in IFileInfo.ArchiveParent.Files) + { + if (Utils.GetExtension(file.FileName) == ".gsh") + { + GTXFile bnsh = (GTXFile)file.OpenFile(); + shaders.Add(bnsh); + } + } + } + return shaders; + } + + public List GetShadersNX() + { + List shaders = new List(); + if (IFileInfo.ArchiveParent != null) + { + foreach (var file in IFileInfo.ArchiveParent.Files) + { + if (Utils.GetExtension(file.FileName) == ".bnsh") + { + BNSH bnsh = (BNSH)file.OpenFile(); + shaders.Add(bnsh); + } + } + } + return shaders; + } + + public List GetLayouts() + { + List animations = new List(); + if (IFileInfo.ArchiveParent != null) + { + foreach (var file in IFileInfo.ArchiveParent.Files) + { + if (Utils.GetExtension(file.FileName) == ".bflyt") + { + BFLYT bflyt = (BFLYT)file.OpenFile(); + animations.Add(bflyt); + } + } + } + return animations; + } + + public List GetAnimations() + { + List animations = new List(); + if (IFileInfo.ArchiveParent != null) + { + foreach (var file in IFileInfo.ArchiveParent.Files) + { + if (Utils.GetExtension(file.FileName) == ".bflan") + { + BFLAN bflan = (BFLAN)file.OpenFile(); + animations.Add(bflan); + } + } + } + return animations; + } + + public Dictionary GetTextures() + { + Console.WriteLine($"ArchiveParent {IFileInfo.ArchiveParent != null}"); + + Dictionary textures = new Dictionary(); + if (IFileInfo.ArchiveParent != null) + { + foreach (var file in IFileInfo.ArchiveParent.Files) + { + if (Utils.GetExtension(file.FileName) == ".bntx") + { + BNTX bntx = (BNTX)file.OpenFile(); + foreach (var tex in bntx.Textures) + textures.Add(tex.Key, tex.Value); + } + else if (Utils.GetExtension(file.FileName) == ".bflim") + { + BFLIM bflim = (BFLIM)file.OpenFile(); + textures.Add(bflim.FileName, bflim); + } + } + } + + return textures; } public void Unload() @@ -101,7 +195,12 @@ namespace FirstPlugin //https://github.com/FuryBaguette/SwitchLayoutEditor/tree/master/SwitchThemesCommon public class Header { - public string FileName { get; set; } + internal BFLYT FileInfo; + + public string FileName + { + get { return FileInfo.FileName; } + } private const string Magic = "FLYT"; @@ -122,7 +221,25 @@ namespace FirstPlugin } } + public uint VersionMajor + { + get { return Version >> 24; } + } + public uint VersionMinor + { + get { return Version >> 16 & 0xFF; } + } + + public uint VersionMicro + { + get { return Version >> 8 & 0xFF; } + } + + public uint VersionMicro2 + { + get { return Version & 0xFF; } + } public LYT1 LayoutInfo { get; set; } public TXL1 TextureList { get; set; } @@ -136,9 +253,16 @@ namespace FirstPlugin // public List Panes = new List(); - public void Read(FileReader reader, string fileName) + public void Read(FileReader reader, BFLYT bflyt) { - FileName = fileName; + LayoutInfo = new LYT1(); + TextureList = new TXL1(); + MaterialList = new MAT1(); + FontList = new FNL1(); + RootPane = new PAN1(); + RootGroup = new GRP1(); + + FileInfo = bflyt; reader.SetByteOrder(true); reader.ReadSignature(4, Magic); @@ -164,10 +288,7 @@ namespace FirstPlugin string Signature = reader.ReadString(4, Encoding.ASCII); uint SectionSize = reader.ReadUInt32(); - Console.WriteLine($"{Signature} {SectionSize}"); - SectionCommon section = new SectionCommon(); - switch (Signature) { case "lyt1": @@ -194,7 +315,7 @@ namespace FirstPlugin currentPane = panel; break; case "pic1": - var picturePanel = new PIC1(reader); + var picturePanel = new PIC1(reader, this); SetPane(picturePanel, parentPane); currentPane = picturePanel; @@ -218,8 +339,7 @@ namespace FirstPlugin currentPane = partsPanel; break; case "wnd1": - var windowPanel = new PRT1(reader); - + var windowPanel = new WND1(reader); SetPane(windowPanel, parentPane); currentPane = windowPanel; break; @@ -273,6 +393,8 @@ namespace FirstPlugin public void Write(FileWriter writer) { + Version = VersionMajor << 24 | VersionMinor << 16 | VersionMicro << 8 | VersionMicro2; + writer.WriteSignature(Magic); writer.Write(ByteOrderMark); writer.Write(HeaderSize); @@ -291,9 +413,24 @@ namespace FirstPlugin public class BasePane : SectionCommon { + public bool DisplayInEditor { get; set; } = true; + + public string Name { get; set; } + + public Vector3F Translate { get; set; } + public Vector3F Rotate { get; set; } + public Vector2F Scale { get; set; } + public float Width { get; set; } + public float Height { get; set; } + public BasePane Parent { get; set; } public List Childern { get; set; } = new List(); + + public bool HasChildern + { + get { return Childern.Count > 0; } + } } public class TexCoord @@ -339,10 +476,10 @@ namespace FirstPlugin } } - public ushort TextLength; - public ushort MaxTextLength; - public ushort MaterialIndex; - public ushort FontIndex; + public ushort TextLength { get; set; } + public ushort MaxTextLength { get; set; } + public ushort MaterialIndex { get; set; } + public ushort FontIndex { get; set; } public byte TextAlignment { get; set; } public LineAlign LineAlignment { get; set; } @@ -483,10 +620,24 @@ namespace FirstPlugin } } + public class CustomRectangle + { + public int LeftPoint; + public int RightPoint; + public int TopPoint; + public int BottomPoint; + + public CustomRectangle(int left, int right, int top, int bottom) + { + LeftPoint = left; + RightPoint = right; + TopPoint = top; + BottomPoint = bottom; + } + } + public class GRP1 : BasePane { - public string Name { get; set; } - public List Panes { get; set; } = new List(); public GRP1() : base() @@ -497,7 +648,7 @@ namespace FirstPlugin public GRP1(FileReader reader, Header header) { ushort numNodes = 0; - if (header.Version >= 0x05020000) + if (header.VersionMajor >= 5) { Name = reader.ReadString(34).Replace("\0", string.Empty); numNodes = reader.ReadUInt16(); @@ -561,6 +712,13 @@ namespace FirstPlugin public ushort MaterialIndex { get; set; } + public Material GetMaterial() + { + return ParentLayout.MaterialList.Materials[MaterialIndex]; + } + + private BFLYT.Header ParentLayout; + public PIC1() : base() { ColorTopLeft = STColor8.White; ColorTopRight = STColor8.White; @@ -571,8 +729,10 @@ namespace FirstPlugin TexCoords[0] = new TexCoord(); } - public PIC1(FileReader reader) : base(reader) + public PIC1(FileReader reader, BFLYT.Header header) : base(reader) { + ParentLayout = header; + ColorTopLeft = STColor8.FromBytes(reader.ReadBytes(4)); ColorTopRight = STColor8.FromBytes(reader.ReadBytes(4)); ColorBottomLeft = STColor8.FromBytes(reader.ReadBytes(4)); @@ -580,6 +740,18 @@ namespace FirstPlugin MaterialIndex = reader.ReadUInt16(); byte numUVs = reader.ReadByte(); reader.Seek(1); //padding + + TexCoords = new TexCoord[numUVs]; + for (int i = 0; i < numUVs; i++) + { + TexCoords[i] = new TexCoord() + { + TopLeft = reader.ReadVec2SY(), + TopRight = reader.ReadVec2SY(), + BottomLeft = reader.ReadVec2SY(), + BottomRight = reader.ReadVec2SY(), + }; + } } public override void Write(FileWriter writer, Header header) @@ -665,15 +837,8 @@ namespace FirstPlugin public byte Alpha { get; set; } public byte Unknown { get; set; } - public string Name { get; set; } public string UserDataInfo { get; set; } - public Vector3F Translate; - public Vector3F Rotate; - public Vector2F Scale; - public float Width; - public float Height; - public PAN1() : base() { @@ -686,7 +851,7 @@ namespace FirstPlugin Alpha = reader.ReadByte(); Unknown = reader.ReadByte(); Name = reader.ReadString(0x18).Replace("\0", string.Empty); - UserDataInfo = reader.ReadString(0x18).Replace("\0", string.Empty); + UserDataInfo = reader.ReadString(0x8).Replace("\0", string.Empty); Translate = reader.ReadVec3SY(); Rotate = reader.ReadVec3SY(); Scale = reader.ReadVec2SY(); @@ -701,7 +866,7 @@ namespace FirstPlugin writer.Write(Alpha); writer.Write(Unknown); writer.WriteString(Name, 0x18); - writer.WriteString(UserDataInfo, 0x18); + writer.WriteString(UserDataInfo, 0x8); writer.Write(Translate); writer.Write(Rotate); writer.Write(Scale); @@ -722,6 +887,82 @@ namespace FirstPlugin Top = 1, Bottom = 2 }; + + + public BFLYT.CustomRectangle CreateRectangle() + { + int left = 0; + int right = 0; + int top = 0; + int bottom = 0; + + + //Do origin transforms + var transformed = TransformOrientation((int)Width, (int)Height); + + //Now do parent transforms + + Vector2 ParentWH = new Vector2(0,0); + if (Parent != null && Parent is BasePane) + ParentWH = new Vector2((int)Parent.Width, (int)Parent.Height); + + var transformedParent = TransformOrientation(ParentWH.X, ParentWH.Y); + + // if (Parent != null) + // transformed -= transformedParent; + + return new CustomRectangle( + transformed.X, + transformed.Y, + transformed.Z, + transformed.W); + } + + private Vector4 TransformOrientation(int Width, int Height) + { + int left = 0; + int right = 0; + int top = 0; + int bottom = 0; + + if (originX == OriginX.Left) + right = Width; + else if (originX == OriginX.Right) + left = -Width; + else //To center + { + left = -Width / 2; + right = Width / 2; + } + + if (originY == OriginY.Top) + bottom = Height; + else if (originY == OriginY.Bottom) + top = -Height; + else //To center + { + top = -Height / 2; + bottom = Height / 2; + } + + return new Vector4(left, right, top, bottom); + } + + public bool ParentVisibility + { + get + { + if (Scale.X == 0 || Scale.Y == 0) + return false; + if (!Visible) + return false; + if (Parent != null && Parent is PAN1) + { + return ((PAN1)Parent).ParentVisibility && Visible; + } + return true; + } + } } public class MAT1 : SectionCommon @@ -766,7 +1007,7 @@ namespace FirstPlugin public List TextureMaps { get; set; } public List TextureTransforms { get; set; } - private int flags; + private uint flags; private int unknown; public Material() @@ -781,9 +1022,9 @@ namespace FirstPlugin TextureTransforms = new List(); Name = reader.ReadString(0x1C).Replace("\0", string.Empty); - if (header.Version == 0x8030000) + if (header.VersionMajor == 8) { - flags = reader.ReadInt32(); + flags = reader.ReadUInt32(); unknown = reader.ReadInt32(); ForeColor = STColor8.FromBytes(reader.ReadBytes(4)); BackColor = STColor8.FromBytes(reader.ReadBytes(4)); @@ -792,11 +1033,11 @@ namespace FirstPlugin { ForeColor = STColor8.FromBytes(reader.ReadBytes(4)); BackColor = STColor8.FromBytes(reader.ReadBytes(4)); - flags = reader.ReadInt32(); + flags = reader.ReadUInt32(); } - int texCount = flags & 3; - int mtxCount = (flags & 0xC) >> 2; + uint texCount = Convert.ToUInt32(flags & 3); + uint mtxCount = Convert.ToUInt32(flags >> 2) & 3; for (int i = 0; i < texCount; i++) TextureMaps.Add(new TextureRef(reader)); @@ -855,22 +1096,55 @@ namespace FirstPlugin public class TextureRef { public ushort ID; - public byte WrapS; - public byte WrapT; + byte flag1; + byte flag2; + + public WrapMode WrapModeU + { + get { return (WrapMode)(flag1 & 0x3); } + } + + public WrapMode WrapModeV + { + get { return (WrapMode)(flag2 & 0x3); } + } + + public FilterMode MinFilterMode + { + get { return (FilterMode)((flag1 >> 2) & 0x3); } + } + + public FilterMode MaxFilterMode + { + get { return (FilterMode)((flag2 >> 2) & 0x3); } + } public TextureRef() {} public TextureRef(FileReader reader) { ID = reader.ReadUInt16(); - WrapS = reader.ReadByte(); - WrapT = reader.ReadByte(); + flag1 = reader.ReadByte(); + flag2 = reader.ReadByte(); } public void Write(FileWriter writer) { writer.Write(ID); - writer.Write(WrapS); - writer.Write(WrapT); + writer.Write(flag1); + writer.Write(flag2); + } + + public enum FilterMode + { + Near = 0, + Linear = 1 + } + + public enum WrapMode + { + Clamp = 0, + Repeat = 1, + Mirror = 2 } } @@ -939,6 +1213,7 @@ namespace FirstPlugin for (int i = 0; i < offsets.Length; i++) { reader.SeekBegin(offsets[i] + pos); + Textures.Add(reader.ReadZeroTerminatedString()); } } diff --git a/File_Format_Library/FileFormats/Layout/PaneTreeWrapper.cs b/File_Format_Library/FileFormats/Layout/PaneTreeWrapper.cs new file mode 100644 index 00000000..3df55167 --- /dev/null +++ b/File_Format_Library/FileFormats/Layout/PaneTreeWrapper.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Toolbox.Library; + +namespace FirstPlugin +{ + public class PaneTreeWrapper : TreeNodeCustom + { + + } +} diff --git a/File_Format_Library/File_Format_Library.csproj b/File_Format_Library/File_Format_Library.csproj index 337a4026..a70861aa 100644 --- a/File_Format_Library/File_Format_Library.csproj +++ b/File_Format_Library/File_Format_Library.csproj @@ -199,6 +199,12 @@ ..\Toolbox\Lib\VGAudio.dll False + + ..\packages\DockPanelSuite.3.0.6\lib\net40\WeifenLuo.WinFormsUI.Docking.dll + + + ..\packages\DockPanelSuite.ThemeVS2015.3.0.6\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll + @@ -287,6 +293,7 @@ + @@ -307,14 +314,26 @@ + + UserControl + + + LayoutHierarchy.cs + + + UserControl + + + LayoutProperties.cs + - Form + UserControl LayoutTextureList.cs - Form + UserControl LayoutViewer.cs @@ -332,7 +351,7 @@ BffntEditor.cs - UserControl + Form LayoutEditor.cs @@ -1056,6 +1075,7 @@ + @@ -1081,6 +1101,12 @@ LayoutEditor.cs + + LayoutHierarchy.cs + + + LayoutProperties.cs + LayoutTextureList.cs @@ -1366,7 +1392,6 @@ - @@ -1449,5 +1474,26 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/File_Format_Library/File_Format_Library.csproj.user b/File_Format_Library/File_Format_Library.csproj.user new file mode 100644 index 00000000..64a5aae8 --- /dev/null +++ b/File_Format_Library/File_Format_Library.csproj.user @@ -0,0 +1,6 @@ + + + + true + + \ No newline at end of file diff --git a/File_Format_Library/GUI/BFLYT/LayoutEditor.Designer.cs b/File_Format_Library/GUI/BFLYT/LayoutEditor.Designer.cs index dcb8d064..e7b8dbc2 100644 --- a/File_Format_Library/GUI/BFLYT/LayoutEditor.Designer.cs +++ b/File_Format_Library/GUI/BFLYT/LayoutEditor.Designer.cs @@ -29,24 +29,59 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LayoutEditor)); + this.dockPanel1 = new WeifenLuo.WinFormsUI.Docking.DockPanel(); + this.backColorDisplay = new System.Windows.Forms.PictureBox(); + this.viewportBackColorCB = new Toolbox.Library.Forms.STComboBox(); this.stToolStrip1 = new Toolbox.Library.Forms.STToolStrip(); this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); this.stMenuStrip1 = new Toolbox.Library.Forms.STMenuStrip(); this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.stPanel1 = new Toolbox.Library.Forms.STPanel(); this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.textureListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + ((System.ComponentModel.ISupportInitialize)(this.backColorDisplay)).BeginInit(); this.stToolStrip1.SuspendLayout(); this.stMenuStrip1.SuspendLayout(); this.SuspendLayout(); // + // dockPanel1 + // + this.dockPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.dockPanel1.Location = new System.Drawing.Point(0, 49); + this.dockPanel1.Name = "dockPanel1"; + this.dockPanel1.Size = new System.Drawing.Size(549, 349); + this.dockPanel1.TabIndex = 6; + // + // backColorDisplay + // + this.backColorDisplay.Location = new System.Drawing.Point(319, 25); + this.backColorDisplay.Name = "backColorDisplay"; + this.backColorDisplay.Size = new System.Drawing.Size(21, 21); + this.backColorDisplay.TabIndex = 10; + this.backColorDisplay.TabStop = false; + this.backColorDisplay.Click += new System.EventHandler(this.backColorDisplay_Click); + // + // viewportBackColorCB + // + this.viewportBackColorCB.BorderColor = System.Drawing.Color.Empty; + this.viewportBackColorCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.viewportBackColorCB.ButtonColor = System.Drawing.Color.Empty; + this.viewportBackColorCB.FormattingEnabled = true; + this.viewportBackColorCB.IsReadOnly = false; + this.viewportBackColorCB.Location = new System.Drawing.Point(167, 25); + this.viewportBackColorCB.Name = "viewportBackColorCB"; + this.viewportBackColorCB.Size = new System.Drawing.Size(146, 21); + this.viewportBackColorCB.TabIndex = 9; + this.viewportBackColorCB.SelectedIndexChanged += new System.EventHandler(this.viewportBackColorCB_SelectedIndexChanged); + this.viewportBackColorCB.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.stComboBox1_MouseDoubleClick); + // // stToolStrip1 // this.stToolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripButton1}); this.stToolStrip1.Location = new System.Drawing.Point(0, 24); this.stToolStrip1.Name = "stToolStrip1"; - this.stToolStrip1.Size = new System.Drawing.Size(836, 25); + this.stToolStrip1.Size = new System.Drawing.Size(549, 25); this.stToolStrip1.TabIndex = 3; this.stToolStrip1.Text = "stToolStrip1"; // @@ -62,11 +97,12 @@ // stMenuStrip1 // this.stMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, this.editToolStripMenuItem, this.viewToolStripMenuItem}); this.stMenuStrip1.Location = new System.Drawing.Point(0, 0); this.stMenuStrip1.Name = "stMenuStrip1"; - this.stMenuStrip1.Size = new System.Drawing.Size(836, 24); + this.stMenuStrip1.Size = new System.Drawing.Size(549, 24); this.stMenuStrip1.TabIndex = 0; this.stMenuStrip1.Text = "stMenuStrip1"; // @@ -76,14 +112,6 @@ this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); this.editToolStripMenuItem.Text = "Edit"; // - // stPanel1 - // - this.stPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.stPanel1.Location = new System.Drawing.Point(0, 49); - this.stPanel1.Name = "stPanel1"; - this.stPanel1.Size = new System.Drawing.Size(836, 469); - this.stPanel1.TabIndex = 4; - // // viewToolStripMenuItem // this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -95,20 +123,30 @@ // textureListToolStripMenuItem // this.textureListToolStripMenuItem.Name = "textureListToolStripMenuItem"; - this.textureListToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.textureListToolStripMenuItem.Size = new System.Drawing.Size(133, 22); this.textureListToolStripMenuItem.Text = "Texture List"; this.textureListToolStripMenuItem.Click += new System.EventHandler(this.textureListToolStripMenuItem_Click); // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "File"; + // // LayoutEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.stPanel1); + this.ClientSize = new System.Drawing.Size(549, 398); + this.Controls.Add(this.backColorDisplay); + this.Controls.Add(this.viewportBackColorCB); + this.Controls.Add(this.dockPanel1); this.Controls.Add(this.stToolStrip1); this.Controls.Add(this.stMenuStrip1); + this.IsMdiContainer = true; this.Name = "LayoutEditor"; - this.Size = new System.Drawing.Size(836, 518); this.ParentChanged += new System.EventHandler(this.LayoutEditor_ParentChanged); + ((System.ComponentModel.ISupportInitialize)(this.backColorDisplay)).EndInit(); this.stToolStrip1.ResumeLayout(false); this.stToolStrip1.PerformLayout(); this.stMenuStrip1.ResumeLayout(false); @@ -124,8 +162,11 @@ private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; private Toolbox.Library.Forms.STToolStrip stToolStrip1; private System.Windows.Forms.ToolStripButton toolStripButton1; - private Toolbox.Library.Forms.STPanel stPanel1; private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem textureListToolStripMenuItem; + private WeifenLuo.WinFormsUI.Docking.DockPanel dockPanel1; + private Toolbox.Library.Forms.STComboBox viewportBackColorCB; + private System.Windows.Forms.PictureBox backColorDisplay; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; } } diff --git a/File_Format_Library/GUI/BFLYT/LayoutEditor.cs b/File_Format_Library/GUI/BFLYT/LayoutEditor.cs index c2b5bea6..a23f0a93 100644 --- a/File_Format_Library/GUI/BFLYT/LayoutEditor.cs +++ b/File_Format_Library/GUI/BFLYT/LayoutEditor.cs @@ -7,10 +7,15 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using Toolbox.Library.Forms; +using WeifenLuo.WinFormsUI.Docking; +using WeifenLuo.WinFormsUI.ThemeVS2015; +using Toolbox.Library.IO; +using Toolbox.Library; namespace FirstPlugin.Forms { - public partial class LayoutEditor : UserControl + public partial class LayoutEditor : Form { public List LayoutFiles = new List(); @@ -22,27 +27,138 @@ namespace FirstPlugin.Forms Animation, } + public EventHandler ObjectSelected; + public EventHandler ObjectChanged; + public LayoutEditor() { InitializeComponent(); + + var theme = new VS2015DarkTheme(); + this.dockPanel1.Theme = theme; + this.dockPanel1.BackColor = FormThemes.BaseTheme.FormBackColor; + this.BackColor = FormThemes.BaseTheme.FormBackColor; + + viewportBackColorCB.Items.Add("Back Color : Default"); + viewportBackColorCB.Items.Add("Back Color : Custom"); + viewportBackColorCB.SelectedIndex = 0; + + ObjectSelected += OnObjectSelected; + ObjectChanged += OnObjectChanged; } + private DockContent TextureListDock; + private DockContent GroupTreeDock; + private DockContent PaneTreeDock; + private DockContent ColorDock; + private DockContent PropertiesDock; + + private List Viewports = new List(); + private LayoutViewer ActiveViewport; + private bool isLoaded = false; public void LoadBflyt(BFLYT.Header header, string fileName) { - if (isLoaded) return; + LayoutFiles.Add(header); + ActiveLayout = header; - LayoutViewer viewer = new LayoutViewer(); - viewer.Dock = DockStyle.Fill; - viewer.TopLevel = false; - viewer.FormBorderStyle = FormBorderStyle.SizableToolWindow; - stPanel1.Controls.Add(viewer); + LayoutViewer Viewport = new LayoutViewer(header); + Viewport.Dock = DockStyle.Fill; + DockShow(Viewport, fileName, DockState.Document); + Viewports.Add(Viewport); + ActiveViewport = Viewport; + + if (!isLoaded) + InitializeDockPanels(); isLoaded = true; - ActiveLayout = header; } + private void InitializeDockPanels() + { + ShowTextureList(); + ShowPaneHierarchy(); + ShowGroupsHierarchy(); + ShowPropertiesPanel(); + UpdateBackColor(); + + } + + private void OnObjectChanged(object sender, EventArgs e) + { + + } + + private void OnProperyChanged() + { + if (ActiveViewport != null) + ActiveViewport.UpdateViewport(); + } + + private bool isChecked = false; + private void OnObjectSelected(object sender, EventArgs e) + { + if (isChecked) return; + + ActiveViewport.SelectedPanes.Clear(); + + if (PropertiesDock != null && (string)sender == "Select") + { + if (e is TreeViewEventArgs) { + var node = ((TreeViewEventArgs)e).Node; + var pane = (BFLYT.BasePane)node.Tag; + + ((LayoutProperties)PropertiesDock.Controls[0]).LoadProperties(pane, OnProperyChanged); + + ActiveViewport.SelectedPanes.Add(pane); + } + } + if (ActiveViewport != null) + { + if (e is TreeViewEventArgs && (string)sender == "Checked" && !isChecked) { + isChecked = true; + var node = ((TreeViewEventArgs)e).Node; + ToggleChildern(node, node.Checked); + isChecked = false; + } + + ActiveViewport.UpdateViewport(); + } + } + + private void ToggleChildern(TreeNode node, bool isChecked) + { + if (node.Tag is BFLYT.BasePane) + ((BFLYT.BasePane)node.Tag).DisplayInEditor = isChecked; + + node.Checked = isChecked; + foreach (TreeNode child in node.Nodes) + ToggleChildern(child, isChecked); + } + + private DockContent DockShow(UserControl control, string text, DockAlignment dockState, DockContent dockSide = null, float Alignment = 0) + { + DockContent content = CreateContent(control, text); + content.Show(dockSide.Pane, dockState, Alignment); + return content; + } + + private DockContent DockShow(UserControl control, string text, DockState dockState) + { + DockContent content = CreateContent(control, text); + content.Show(dockPanel1, dockState); + return content; + } + + private DockContent CreateContent(UserControl control, string text) + { + DockContent content = new DockContent(); + content.Text = text; + control.Dock = DockStyle.Fill; + content.Controls.Add(control); + return content; + } public void LoadBflan() { @@ -59,15 +175,87 @@ namespace FirstPlugin.Forms if (this.ParentForm == null) return; } - private void textureListToolStripMenuItem_Click(object sender, EventArgs e) + private void textureListToolStripMenuItem_Click(object sender, EventArgs e) { + ShowTextureList(); + } + + private void ShowGroupsHierarchy() + { + dockPanel1.GetContainerControl(); + + LayoutHierarchy hierarchyList = new LayoutHierarchy(); + hierarchyList.LoadLayout(ActiveLayout,ObjectSelected, true); + GroupTreeDock = DockShow(hierarchyList, "Groups", DockAlignment.Top, TextureListDock, 0.5f); + + } + + private void ShowPropertiesPanel() + { + LayoutProperties properties = new LayoutProperties(); + PropertiesDock = DockShow(properties, "Properties", DockAlignment.Top, TextureListDock, 0.5f); + } + + private void ShowPaneHierarchy() + { + LayoutHierarchy hierarchyList = new LayoutHierarchy(); + hierarchyList.LoadLayout(ActiveLayout, ObjectSelected); + PaneTreeDock = DockShow(hierarchyList, "Panes", DockAlignment.Top, TextureListDock, 0.5f); + } + + private void ShowTextureList() { LayoutTextureList textureListForm = new LayoutTextureList(); textureListForm.LoadTextures(ActiveLayout); + TextureListDock = DockShow(textureListForm, "Texture List", DockState.DockRight); + } - if (ParentForm != null && ParentForm.TopLevel) - textureListForm.Show(ParentForm); + private void stComboBox1_MouseDoubleClick(object sender, MouseEventArgs e) + { + + } + + private bool isBGUpdating = false; + private void viewportBackColorCB_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveViewport == null || isBGUpdating) return; + UpdateBackColor(); + } + + private void UpdateBackColor() + { + if (viewportBackColorCB.SelectedIndex == 0) + { + ActiveViewport.UpdateBackgroundColor(Color.FromArgb(130, 130, 130)); + backColorDisplay.BackColor = Color.FromArgb(130, 130, 130); + } else - textureListForm.Show(); + { + ColorDialog dlg = new ColorDialog(); + if (dlg.ShowDialog() == DialogResult.OK) + { + ActiveViewport.UpdateBackgroundColor(dlg.Color); + backColorDisplay.BackColor = dlg.Color; + } + else + viewportBackColorCB.SelectedIndex = 0; + } + } + + private void backColorDisplay_Click(object sender, EventArgs e) + { + isBGUpdating = true; + + ColorDialog dlg = new ColorDialog(); + if (dlg.ShowDialog() == DialogResult.OK) + { + ActiveViewport.UpdateBackgroundColor(dlg.Color); + backColorDisplay.BackColor = dlg.Color; + + if (viewportBackColorCB.SelectedIndex == 0) + viewportBackColorCB.SelectedIndex = 1; + } + + isBGUpdating = false; } } } diff --git a/File_Format_Library/GUI/BFLYT/LayoutHierarchy.Designer.cs b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.Designer.cs new file mode 100644 index 00000000..be64830e --- /dev/null +++ b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.Designer.cs @@ -0,0 +1,60 @@ +namespace FirstPlugin.Forms +{ + partial class LayoutHierarchy + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.treeView1 = new System.Windows.Forms.TreeView(); + this.SuspendLayout(); + // + // treeView1 + // + this.treeView1.CheckBoxes = true; + this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeView1.Location = new System.Drawing.Point(0, 0); + this.treeView1.Name = "treeView1"; + this.treeView1.Size = new System.Drawing.Size(317, 372); + this.treeView1.TabIndex = 0; + this.treeView1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterCheck); + this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); + // + // LayoutHierarchy + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.treeView1); + this.Name = "LayoutHierarchy"; + this.Size = new System.Drawing.Size(317, 372); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TreeView treeView1; + } +} diff --git a/File_Format_Library/GUI/BFLYT/LayoutHierarchy.cs b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.cs new file mode 100644 index 00000000..79ba7836 --- /dev/null +++ b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using FirstPlugin; +using Toolbox.Library.Forms; + +namespace FirstPlugin.Forms +{ + public partial class LayoutHierarchy : UserControl + { + public LayoutHierarchy() + { + InitializeComponent(); + + treeView1.BackColor = FormThemes.BaseTheme.FormBackColor; + treeView1.ForeColor = FormThemes.BaseTheme.FormForeColor; + + var imgList = new ImageList(); + imgList.Images.Add("AlignmentPane", Properties.Resources.AlignmentPane); + imgList.Images.Add("WindowPane", Properties.Resources.WindowPane); + imgList.Images.Add("ScissorPane", Properties.Resources.ScissorPane); + imgList.Images.Add("BoundryPane", Properties.Resources.BoundryPane); + imgList.Images.Add("NullPane", Properties.Resources.NullPane); + imgList.Images.Add("PicturePane", Properties.Resources.PicturePane); + imgList.ImageSize = new Size(22,22); + treeView1.ImageList = imgList; + } + + private bool isLoaded = false; + private EventHandler OnProperySelected; + public void LoadLayout(BFLYT.Header bflyt, EventHandler onPropertySelected, bool useGroup = false) + { + isLoaded = false; + OnProperySelected = onPropertySelected; + + if (useGroup) + LoadPane(bflyt.RootGroup); + else + LoadPane(bflyt.RootPane); + + isLoaded = true; + } + + private void LoadPane(BFLYT.BasePane pane, TreeNode parent = null) + { + PaneTreeWrapper paneNode = new PaneTreeWrapper(); + paneNode.Checked = true; + paneNode.Text = pane.Name; + paneNode.Tag = pane; + + string imageKey = ""; + if (pane is BFLYT.WND1) imageKey = "WindowPane"; + else if (pane is BFLYT.PIC1) imageKey = "PicturePane"; + else if (pane is BFLYT.BND1) imageKey = "BoundryPane"; + else imageKey = "NullPane"; + + paneNode.ImageKey = imageKey; + paneNode.SelectedImageKey = imageKey; + + if (parent == null) + treeView1.Nodes.Add(paneNode); + else + parent.Nodes.Add(paneNode); + + foreach (var childPane in pane.Childern) + LoadPane(childPane, paneNode); + } + + private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) + { + if (isLoaded) + OnProperySelected.Invoke("Select", e); + } + + private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (isLoaded) + OnProperySelected.Invoke("Checked", e); + } + } +} diff --git a/File_Format_Library/GUI/BFLYT/LayoutHierarchy.resx b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/File_Format_Library/GUI/BFLYT/LayoutProperties.Designer.cs b/File_Format_Library/GUI/BFLYT/LayoutProperties.Designer.cs new file mode 100644 index 00000000..350ded3c --- /dev/null +++ b/File_Format_Library/GUI/BFLYT/LayoutProperties.Designer.cs @@ -0,0 +1,59 @@ +namespace FirstPlugin.Forms +{ + partial class LayoutProperties + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.stTabControl1 = new FlatTabControl.FlatTabControl(); + this.SuspendLayout(); + // + // stTabControl1 + // + this.stTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.stTabControl1.Location = new System.Drawing.Point(0, 0); + this.stTabControl1.myBackColor = System.Drawing.Color.Empty; + this.stTabControl1.Name = "stTabControl1"; + this.stTabControl1.SelectedIndex = 0; + this.stTabControl1.Size = new System.Drawing.Size(368, 338); + this.stTabControl1.TabIndex = 0; + // + // LayoutProperties + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.stTabControl1); + this.Name = "LayoutProperties"; + this.Size = new System.Drawing.Size(368, 338); + this.ResumeLayout(false); + + } + + #endregion + + private FlatTabControl.FlatTabControl stTabControl1; + } +} diff --git a/File_Format_Library/GUI/BFLYT/LayoutProperties.cs b/File_Format_Library/GUI/BFLYT/LayoutProperties.cs new file mode 100644 index 00000000..d9e82b57 --- /dev/null +++ b/File_Format_Library/GUI/BFLYT/LayoutProperties.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Toolbox.Library.Forms; + +namespace FirstPlugin.Forms +{ + public partial class LayoutProperties : UserControl + { + public LayoutProperties() + { + InitializeComponent(); + + stTabControl1.myBackColor = FormThemes.BaseTheme.FormBackColor; + } + + public void LoadProperties(BFLYT.BasePane prop, Action propChanged) + { + stTabControl1.Controls.Clear(); + + if (prop is BFLYT.PIC1) + { + LoadPropertyTab("Pane", prop, propChanged); + LoadPropertyTab("Materials", ((BFLYT.PIC1)prop).GetMaterial(), propChanged); + } + else + LoadPropertyTab("Pane", prop, propChanged); + } + + private void LoadPropertyTab(string text, object prop, Action propChanged) + { + TabPage page = new TabPage(); + page.Text = text; + var propGrid = new STPropertyGrid(); + propGrid.Dock = DockStyle.Fill; + propGrid.LoadProperty(prop, propChanged); + page.Controls.Add(propGrid); + stTabControl1.Controls.Add(page); + } + } +} diff --git a/File_Format_Library/GUI/BFLYT/LayoutProperties.resx b/File_Format_Library/GUI/BFLYT/LayoutProperties.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/File_Format_Library/GUI/BFLYT/LayoutProperties.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/File_Format_Library/GUI/BFLYT/LayoutTextureList.Designer.cs b/File_Format_Library/GUI/BFLYT/LayoutTextureList.Designer.cs index 5622b8f9..96758061 100644 --- a/File_Format_Library/GUI/BFLYT/LayoutTextureList.Designer.cs +++ b/File_Format_Library/GUI/BFLYT/LayoutTextureList.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LayoutTextureList)); this.stToolStrip1 = new Toolbox.Library.Forms.STToolStrip(); this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); @@ -39,34 +38,24 @@ this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.contentContainer.SuspendLayout(); this.stToolStrip1.SuspendLayout(); this.SuspendLayout(); // - // contentContainer - // - this.contentContainer.Controls.Add(this.listViewCustom1); - this.contentContainer.Controls.Add(this.listViewTpyeCB); - this.contentContainer.Controls.Add(this.stToolStrip1); - this.contentContainer.Controls.SetChildIndex(this.stToolStrip1, 0); - this.contentContainer.Controls.SetChildIndex(this.listViewTpyeCB, 0); - this.contentContainer.Controls.SetChildIndex(this.listViewCustom1, 0); - // // stToolStrip1 // this.stToolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripButton1, this.toolStripButton2}); - this.stToolStrip1.Location = new System.Drawing.Point(0, 25); + this.stToolStrip1.Location = new System.Drawing.Point(0, 0); this.stToolStrip1.Name = "stToolStrip1"; - this.stToolStrip1.Size = new System.Drawing.Size(543, 25); + this.stToolStrip1.Size = new System.Drawing.Size(549, 25); this.stToolStrip1.TabIndex = 11; this.stToolStrip1.Text = "stToolStrip1"; // // toolStripButton1 // this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image"))); + this.toolStripButton1.Image = global::FirstPlugin.Properties.Resources.AddIcon; this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripButton1.Name = "toolStripButton1"; this.toolStripButton1.Size = new System.Drawing.Size(23, 22); @@ -75,7 +64,7 @@ // toolStripButton2 // this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image"))); + this.toolStripButton2.Image = global::FirstPlugin.Properties.Resources.RemoveIcon; this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripButton2.Name = "toolStripButton2"; this.toolStripButton2.Size = new System.Drawing.Size(23, 22); @@ -88,7 +77,7 @@ this.listViewTpyeCB.ButtonColor = System.Drawing.Color.Empty; this.listViewTpyeCB.FormattingEnabled = true; this.listViewTpyeCB.IsReadOnly = false; - this.listViewTpyeCB.Location = new System.Drawing.Point(139, 27); + this.listViewTpyeCB.Location = new System.Drawing.Point(117, 2); this.listViewTpyeCB.Name = "listViewTpyeCB"; this.listViewTpyeCB.Size = new System.Drawing.Size(146, 21); this.listViewTpyeCB.TabIndex = 12; @@ -96,6 +85,7 @@ // // listViewCustom1 // + this.listViewCustom1.AllowDrop = true; this.listViewCustom1.BorderStyle = System.Windows.Forms.BorderStyle.None; this.listViewCustom1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.columnHeader1, @@ -104,21 +94,24 @@ this.columnHeader4, this.columnHeader5}); this.listViewCustom1.Dock = System.Windows.Forms.DockStyle.Fill; - this.listViewCustom1.Location = new System.Drawing.Point(0, 50); + this.listViewCustom1.Location = new System.Drawing.Point(0, 25); this.listViewCustom1.Name = "listViewCustom1"; this.listViewCustom1.OwnerDraw = true; - this.listViewCustom1.Size = new System.Drawing.Size(543, 343); + this.listViewCustom1.Size = new System.Drawing.Size(549, 373); this.listViewCustom1.TabIndex = 13; this.listViewCustom1.UseCompatibleStateImageBehavior = false; this.listViewCustom1.View = System.Windows.Forms.View.Details; + this.listViewCustom1.DragEnter += new System.Windows.Forms.DragEventHandler(this.listViewCustom1_DragEnter); // // columnHeader1 // this.columnHeader1.Text = "Name"; + this.columnHeader1.Width = 118; // // columnHeader2 // this.columnHeader2.Text = "Format"; + this.columnHeader2.Width = 101; // // columnHeader3 // @@ -131,19 +124,22 @@ // columnHeader5 // this.columnHeader5.Text = "Size"; + this.columnHeader5.Width = 210; // // LayoutTextureList // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(549, 398); + this.Controls.Add(this.listViewCustom1); + this.Controls.Add(this.listViewTpyeCB); + this.Controls.Add(this.stToolStrip1); this.Name = "LayoutTextureList"; - this.Text = "LayoutTextureList"; - this.contentContainer.ResumeLayout(false); - this.contentContainer.PerformLayout(); + this.Size = new System.Drawing.Size(549, 398); + this.DragDrop += new System.Windows.Forms.DragEventHandler(this.LayoutTextureList_DragDrop); this.stToolStrip1.ResumeLayout(false); this.stToolStrip1.PerformLayout(); this.ResumeLayout(false); + this.PerformLayout(); } diff --git a/File_Format_Library/GUI/BFLYT/LayoutTextureList.cs b/File_Format_Library/GUI/BFLYT/LayoutTextureList.cs index 1b60f14c..83ccdd25 100644 --- a/File_Format_Library/GUI/BFLYT/LayoutTextureList.cs +++ b/File_Format_Library/GUI/BFLYT/LayoutTextureList.cs @@ -9,11 +9,15 @@ using System.Threading.Tasks; using System.Windows.Forms; using FirstPlugin; using Toolbox.Library.Forms; +using Toolbox.Library; +using System.Threading; +using WeifenLuo.WinFormsUI.Docking; namespace FirstPlugin.Forms { - public partial class LayoutTextureList : STForm + public partial class LayoutTextureList : UserControl { + ImageList imgList = new ImageList(); public LayoutTextureList() { InitializeComponent(); @@ -24,18 +28,58 @@ namespace FirstPlugin.Forms listViewTpyeCB.Items.Add(View.SmallIcon); listViewTpyeCB.Items.Add(View.Tile); listViewTpyeCB.SelectedIndex = 0; + listViewCustom1.FullRowSelect = true; + + imgList = new ImageList() + { + ColorDepth = ColorDepth.Depth32Bit, + ImageSize = new Size(30, 30), + }; } private bool isLoaded = false; public void LoadTextures(BFLYT.Header header) { + listViewCustom1.Items.Clear(); + imgList.Images.Clear(); + imgList.Images.Add(new Bitmap(30, 30)); + + listViewCustom1.LargeImageList = imgList; + listViewCustom1.SmallImageList = imgList; + + var textureList = header.FileInfo.GetTextures(); + listViewCustom1.BeginUpdate(); foreach (var texture in header.TextureList.Textures) { ListViewItem item = new ListViewItem(); item.Text = texture; + item.ImageIndex = 0; listViewCustom1.Items.Add(item); } + + Console.WriteLine($"textureList " + textureList.Count); + + //Load textures after on a seperate thread + + Thread Thread = new Thread((ThreadStart)(() => + { + foreach (ListViewItem item in listViewCustom1.Items) + { + if (textureList.ContainsKey(item.Text)) + { + LoadTextureIcon(item, textureList[item.Text]); + } + } + })); + Thread.Start(); + + foreach (ListViewItem item in listViewCustom1.Items) + { + if (textureList.ContainsKey(item.Text)) + LoadTextureIcon(item, textureList[item.Text]); + } + listViewCustom1.EndUpdate(); isLoaded = true; @@ -45,5 +89,54 @@ namespace FirstPlugin.Forms if (isLoaded) listViewCustom1.View = (View)listViewTpyeCB.SelectedItem; } + + private void LoadTextureIcon(ListViewItem item, STGenericTexture texture) + { + Bitmap temp = texture.GetBitmap(); + + if (listViewCustom1.InvokeRequired) + { + listViewCustom1.Invoke((MethodInvoker)delegate { + item.ImageIndex = imgList.Images.Count; + item.SubItems.Add(texture.Format.ToString()); + item.SubItems.Add(texture.Width.ToString()); + item.SubItems.Add(texture.Height.ToString()); + item.SubItems.Add(texture.DataSize); + + // Running on the UI thread + imgList.Images.Add(temp); + var dummy = imgList.Handle; + }); + } + + temp.Dispose(); + } + + private void LayoutTextureList_DragDrop(object sender, DragEventArgs e) + { + Cursor.Current = Cursors.WaitCursor; + + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + foreach (string filename in files) + OpenTextureFile(filename); + + Cursor.Current = Cursors.Default; + } + + private void OpenTextureFile(string fileName) + { + + } + + private void listViewCustom1_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) + e.Effect = DragDropEffects.All; + else + { + String[] strGetFormats = e.Data.GetFormats(); + e.Effect = DragDropEffects.None; + } + } } } diff --git a/File_Format_Library/GUI/BFLYT/LayoutTextureList.resx b/File_Format_Library/GUI/BFLYT/LayoutTextureList.resx index 677ad9c3..7930f31b 100644 --- a/File_Format_Library/GUI/BFLYT/LayoutTextureList.resx +++ b/File_Format_Library/GUI/BFLYT/LayoutTextureList.resx @@ -120,35 +120,4 @@ 17, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - \ No newline at end of file diff --git a/File_Format_Library/GUI/BFLYT/LayoutViewer.cs b/File_Format_Library/GUI/BFLYT/LayoutViewer.cs index c819a83a..e498a659 100644 --- a/File_Format_Library/GUI/BFLYT/LayoutViewer.cs +++ b/File_Format_Library/GUI/BFLYT/LayoutViewer.cs @@ -8,18 +8,44 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using OpenTK.Graphics.OpenGL; +using OpenTK; using Toolbox.Library; using Toolbox.Library.Rendering; +using Toolbox.Library.IO; namespace FirstPlugin.Forms { - public partial class LayoutViewer : Form + public partial class LayoutViewer : UserControl { + public List SelectedPanes = new List(); + + public Camera2D Camera = new Camera2D(); + + public class Camera2D + { + public float Zoom = 1; + public Vector2 Position; + } + private RenderableTex backgroundTex; - public LayoutViewer() + private BFLYT.Header LayoutFile; + + private static Dictionary Textures; + + public LayoutViewer(BFLYT.Header bflyt) { InitializeComponent(); + LayoutFile = bflyt; + + Textures = new Dictionary(); + if (bflyt.TextureList.Textures.Count > 0) + Textures = bflyt.FileInfo.GetTextures(); + } + + public void UpdateViewport() + { + glControl1.Invalidate(); } private void glControl1_Paint(object sender, PaintEventArgs e) @@ -31,8 +57,11 @@ namespace FirstPlugin.Forms OnRender(); } + private Color BackgroundColor = Color.FromArgb(130, 130, 130); private void OnRender() { + if (LayoutFile == null) return; + GL.Viewport(0, 0, glControl1.Width, glControl1.Height); GL.MatrixMode(MatrixMode.Projection); GL.LoadIdentity(); @@ -40,64 +69,406 @@ namespace FirstPlugin.Forms GL.MatrixMode(MatrixMode.Modelview); GL.LoadIdentity(); - GL.ClearColor(System.Drawing.Color.FromArgb(40, 40, 40)); + GL.ClearColor(BackgroundColor); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); - DrawBackground(); + GL.Enable(EnableCap.AlphaTest); + GL.AlphaFunc(AlphaFunction.Gequal, 0.1f); + GL.Enable(EnableCap.Blend); + GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha); + + DrawRootPane(LayoutFile.RootPane); + DrawGrid(); + DrawXyLines(); + + GL.Scale(1 * Camera.Zoom, -1 * Camera.Zoom, 1); + GL.Translate(Camera.Position.X, Camera.Position.Y, 0); + + RenderPanes(LayoutFile.RootPane, true); glControl1.SwapBuffers(); } + private void RenderPanes(BFLYT.BasePane pane, bool isRoot) + { + if (!pane.DisplayInEditor) + return; + + GL.PushMatrix(); + GL.Translate(pane.Translate.X, pane.Translate.Y, 0); + GL.Rotate(pane.Rotate.Z, pane.Rotate.X, pane.Rotate.Y, pane.Rotate.Z); + GL.Scale(pane.Scale.X, pane.Scale.Y, 1); + + if (!isRoot) + { + if (pane is BFLYT.PIC1) + DrawPicturePane(LayoutFile, (BFLYT.PIC1)pane); + else if (pane is BFLYT.PAN1) + DrawDefaultPane(LayoutFile, (BFLYT.PAN1)pane); + } + else + isRoot = false; + + foreach (var childPane in pane.Childern) + RenderPanes(childPane, isRoot); + + GL.PopMatrix(); + } + + private void DrawRootPane(BFLYT.PAN1 pane) + { + GL.LoadIdentity(); + GL.PushMatrix(); + GL.Scale(pane.Scale.X * Camera.Zoom, -pane.Scale.Y * Camera.Zoom, 1); + GL.Rotate(pane.Rotate.Z, pane.Rotate.X, pane.Rotate.Y, pane.Rotate.Z); + GL.Translate(pane.Translate.X + Camera.Position.X, pane.Translate.Y + Camera.Position.Y, 0); + + Color color = Color.Black; + if (SelectedPanes.Contains(pane)) + color = Color.Red; + + BFLYT.CustomRectangle rect = pane.CreateRectangle(); + + //Draw a quad which is the backcolor but lighter + GL.Begin(PrimitiveType.Quads); + GL.Color3(BackgroundColor.Lighten(10)); + GL.Vertex2(rect.LeftPoint, rect.TopPoint); + GL.Vertex2(rect.RightPoint, rect.TopPoint); + GL.Vertex2(rect.RightPoint, rect.BottomPoint); + GL.Vertex2(rect.LeftPoint, rect.BottomPoint); + GL.End(); + + //Draw outline of root pane + GL.Begin(PrimitiveType.LineLoop); + GL.PolygonOffset(0.5f, 2); + GL.LineWidth(33); + GL.Color3(color); + GL.Vertex2(rect.LeftPoint, rect.TopPoint); + GL.Vertex2(rect.RightPoint, rect.TopPoint); + GL.Vertex2(rect.RightPoint, rect.BottomPoint); + GL.Vertex2(rect.LeftPoint, rect.BottomPoint); + GL.End(); + + GL.PopMatrix(); + } + + private void DrawDefaultPane(BFLYT.Header bflyt, BFLYT.PAN1 pane) + { + Vector2[] TexCoords = new Vector2[] { + new Vector2(1,1), + new Vector2(0,1), + new Vector2(0,0), + new Vector2(1,0) + }; + + Color color = Color.White; + if (SelectedPanes.Contains(pane)) + color = Color.Red; + + Color[] Colors = new Color[] { + color, + color, + color, + color, + }; + + DrawRectangle(pane.CreateRectangle(), TexCoords, Colors); + } + + private void DrawPicturePane(BFLYT.Header bflyt, BFLYT.PIC1 pane) + { + Vector2[] TexCoords = new Vector2[] { + new Vector2(1,1), + new Vector2(0,1), + new Vector2(0,0), + new Vector2(1,0) + }; + + Color[] Colors = new Color[] { + pane.ColorTopLeft.Color, + pane.ColorTopRight.Color, + pane.ColorBottomRight.Color, + pane.ColorBottomLeft.Color, + }; + + GL.Enable(EnableCap.Texture2D); + + if (pane.TexCoords.Length > 0) + { + var mat = bflyt.MaterialList.Materials[pane.MaterialIndex]; + string textureMap0 = ""; + if (mat.TextureMaps.Count > 0) + textureMap0 = bflyt.TextureList.Textures[mat.TextureMaps[0].ID]; + + if (Textures.ContainsKey(textureMap0)) + BindGLTexture(mat.TextureMaps[0], Textures[textureMap0]); + + TexCoords = new Vector2[] { + pane.TexCoords[0].TopLeft.ToTKVector2(), + pane.TexCoords[0].TopRight.ToTKVector2(), + pane.TexCoords[0].BottomRight.ToTKVector2(), + pane.TexCoords[0].BottomLeft.ToTKVector2(), + }; + } + + DrawRectangle(pane.CreateRectangle(), TexCoords, Colors, false); + + GL.BindTexture(TextureTarget.Texture2D, 0); + } + + public void DrawRectangle(BFLYT.CustomRectangle rect, Vector2[] texCoords, Color[] colors, bool useLines = true) + { + if (useLines) + { + GL.Begin(PrimitiveType.LineLoop); + GL.Color3(colors[0]); + GL.Vertex2(rect.LeftPoint, rect.BottomPoint); + GL.Vertex2(rect.RightPoint, rect.BottomPoint); + GL.Vertex2(rect.RightPoint, rect.TopPoint); + GL.Vertex2(rect.LeftPoint, rect.TopPoint); + GL.End(); + } + else + { + GL.Begin(PrimitiveType.Quads); + GL.Color3(colors[0]); + GL.TexCoord2(texCoords[0]); + GL.Vertex2(rect.LeftPoint, rect.BottomPoint); + GL.Color3(colors[1]); + GL.TexCoord2(texCoords[1]); + GL.Vertex2(rect.RightPoint, rect.BottomPoint); + GL.Color3(colors[2]); + GL.TexCoord2(texCoords[2]); + GL.Vertex2(rect.RightPoint, rect.TopPoint); + GL.Color3(colors[3]); + GL.TexCoord2(texCoords[3]); + GL.Vertex2(rect.LeftPoint, rect.TopPoint); + GL.End(); + } + } + + private static void BindGLTexture(BFLYT.TextureRef tex, STGenericTexture texture) + { + if (texture.RenderableTex == null || !texture.RenderableTex.GLInitialized) + texture.LoadOpenGLTexture(); + + //If the texture is still not initialized then return + if (!texture.RenderableTex.GLInitialized) + return; + + // GL.ActiveTexture(TextureUnit.Texture0 + texid); + GL.BindTexture(TextureTarget.Texture2D, texture.RenderableTex.TexID); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, ConvertTextureWrap(tex.WrapModeU)); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, ConvertTextureWrap(tex.WrapModeV)); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, ConvertMagFilterMode(tex.MaxFilterMode)); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, ConvertMinFilterMode(tex.MinFilterMode)); + GL.TexParameter(TextureTarget.Texture2D, (TextureParameterName)ExtTextureFilterAnisotropic.TextureMaxAnisotropyExt, 0.0f); + } + + private static int ConvertTextureWrap(BFLYT.TextureRef.WrapMode wrapMode) + { + switch (wrapMode) + { + case BFLYT.TextureRef.WrapMode.Clamp: return (int)TextureWrapMode.Clamp; + case BFLYT.TextureRef.WrapMode.Mirror: return (int)TextureWrapMode.MirroredRepeat; + case BFLYT.TextureRef.WrapMode.Repeat: return (int)TextureWrapMode.Repeat; + default: return (int)TextureWrapMode.Clamp; + } + } + + private static int ConvertMagFilterMode(BFLYT.TextureRef.FilterMode filterMode) + { + switch (filterMode) + { + case BFLYT.TextureRef.FilterMode.Linear: return (int)TextureMagFilter.Linear; + case BFLYT.TextureRef.FilterMode.Near: return (int)TextureMagFilter.Nearest; + default: return (int)BFLYT.TextureRef.FilterMode.Linear; + } + } + + private static int ConvertMinFilterMode(BFLYT.TextureRef.FilterMode filterMode) + { + switch (filterMode) + { + case BFLYT.TextureRef.FilterMode.Linear: return (int)TextureMinFilter.Linear; + case BFLYT.TextureRef.FilterMode.Near: return (int)TextureMinFilter.Nearest; + default: return (int)BFLYT.TextureRef.FilterMode.Linear; + } + } + private void DrawBackground() { if (backgroundTex == null) - backgroundTex = RenderableTex.FromBitmap(Properties.Resources.GridBackground); + { + /* backgroundTex = RenderableTex.FromBitmap(Properties.Resources.GridBackground); + backgroundTex.TextureWrapR = TextureWrapMode.Repeat; + backgroundTex.TextureWrapT = TextureWrapMode.Repeat; - GL.Enable(EnableCap.Texture2D); - GL.BindTexture(TextureTarget.Texture2D, backgroundTex.TexID); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)backgroundTex.TextureWrapR); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)backgroundTex.TextureWrapT); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (float)backgroundTex.TextureMagFilter); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (float)backgroundTex.TextureMinFilter); - float scale = 4; + GL.Enable(EnableCap.Texture2D); + GL.BindTexture(TextureTarget.Texture2D, backgroundTex.TexID); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)backgroundTex.TextureWrapR); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)backgroundTex.TextureWrapT); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (float)backgroundTex.TextureMagFilter); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (float)backgroundTex.TextureMinFilter); - GL.MatrixMode(MatrixMode.Modelview); + float UVscale = 15; + + int PanelWidth = 9000; + int PanelWHeight = 9000; + + Vector2 scaleCenter = new Vector2(0.5f, 0.5f); + + Vector2[] TexCoords = new Vector2[] { + new Vector2(1,1), + new Vector2(0,1), + new Vector2(0,0), + new Vector2(1,0), + }; + + for (int i = 0; i < TexCoords.Length; i++) + TexCoords[i] = (TexCoords[i] - scaleCenter) * 20 + scaleCenter; + + GL.MatrixMode(MatrixMode.Modelview); + GL.LoadIdentity(); + GL.PushMatrix(); + GL.Scale(1, 1, 1); + GL.Translate(0, 0, 0); + + GL.Color4(Color.White); + + GL.Begin(PrimitiveType.Quads); + GL.TexCoord2(TexCoords[0]); + GL.Vertex3(PanelWidth, PanelWHeight, 0); + GL.TexCoord2(TexCoords[1]); + GL.Vertex3(-PanelWidth, PanelWHeight, 0); + GL.TexCoord2(TexCoords[2]); + GL.Vertex3(-PanelWidth, -PanelWHeight, 0); + GL.TexCoord2(TexCoords[3]); + GL.Vertex3(PanelWidth, -PanelWHeight, 0); + GL.End(); + + GL.BindTexture(TextureTarget.Texture2D, 0); + GL.PopMatrix();*/ + } + } + + public void UpdateBackgroundColor(Color color) + { + BackgroundColor = color; + glControl1.Invalidate(); + } + + private void DrawXyLines() + { GL.LoadIdentity(); GL.PushMatrix(); - GL.Scale(scale, scale, scale); - GL.Translate(0, 0, 0); + GL.Scale(1 * Camera.Zoom, -1 * Camera.Zoom, 1); + GL.Translate(Camera.Position.X, Camera.Position.Y, 0); - GL.Color4(Color.White); + int lineLength = 20; - GL.Begin(PrimitiveType.Quads); - GL.TexCoord2(-1, -1); - GL.Vertex3(-Width, -Height, 0); - GL.TexCoord2(0, -1); - GL.Vertex3(Width, -Height, 0); - GL.TexCoord2(0, 0); - GL.Vertex3(Width, Height, 0); - GL.TexCoord2(-1, 0); - GL.Vertex3(-Width, Height, 0); + GL.Color3(Color.Green); + GL.Begin(PrimitiveType.Lines); + GL.Vertex2(0, 0); + GL.Vertex2(0, lineLength); + GL.End(); + + GL.Color3(Color.Red); + GL.Begin(PrimitiveType.Lines); + GL.Vertex2(0, 0); + GL.Vertex2(lineLength, 0); GL.End(); - GL.BindTexture(TextureTarget.Texture2D, 0); GL.PopMatrix(); } + private void DrawGrid() + { + var size = 40; + var amount = 300; + + GL.LoadIdentity(); + GL.PushMatrix(); + GL.Scale(1 * Camera.Zoom, -1 * Camera.Zoom, 1); + GL.Translate(Camera.Position.X, Camera.Position.Y, 0); + GL.Rotate(90, new Vector3(1,0,0)); + + GL.LineWidth(0.001f); + GL.Color3(BackgroundColor.Darken(20)); + GL.Begin(PrimitiveType.Lines); + + int squareGridCounter = 0; + for (var i = -amount; i <= amount; i++) + { + if (squareGridCounter > 5) + { + squareGridCounter = 0; + GL.LineWidth(33f); + } + else + { + GL.LineWidth(0.001f); + } + + GL.Vertex3(new Vector3(-amount * size, 0f, i * size)); + GL.Vertex3(new Vector3(amount * size, 0f, i * size)); + GL.Vertex3(new Vector3(i * size, 0f, -amount * size)); + GL.Vertex3(new Vector3(i * size, 0f, amount * size)); + + squareGridCounter++; + } + GL.End(); + GL.Color3(Color.Transparent); + GL.PopAttrib(); + GL.Enable(EnableCap.Texture2D); + GL.PopMatrix(); + } + + private bool mouseHeldDown = false; + private Point originMouse; private void glControl1_MouseDown(object sender, MouseEventArgs e) { - + if (e.Button == MouseButtons.Left) + { + mouseHeldDown = true; + originMouse = e.Location; + glControl1.Invalidate(); + } } private void glControl1_MouseUp(object sender, MouseEventArgs e) { - + if (e.Button == MouseButtons.Left) + { + mouseHeldDown = false; + glControl1.Invalidate(); + } } private void glControl1_MouseMove(object sender, MouseEventArgs e) { + if (mouseHeldDown) + { + var pos = new Vector2(e.Location.X - originMouse.X, e.Location.Y - originMouse.Y); + Camera.Position.X += pos.X; + Camera.Position.Y -= pos.Y; + originMouse = e.Location; + + glControl1.Invalidate(); + } + } + + protected override void OnMouseWheel(MouseEventArgs e) + { + base.OnMouseWheel(e); + if (e.Delta > 0 && Camera.Zoom > 0) + Camera.Zoom += 0.1f; + if (e.Delta < 0 && Camera.Zoom < 10 && Camera.Zoom > 0.1) + Camera.Zoom -= 0.1f; + + glControl1.Invalidate(); } private void glControl1_Resize(object sender, EventArgs e) diff --git a/File_Format_Library/Properties/Resources.Designer.cs b/File_Format_Library/Properties/Resources.Designer.cs index dfe69589..2d4d4e1c 100644 --- a/File_Format_Library/Properties/Resources.Designer.cs +++ b/File_Format_Library/Properties/Resources.Designer.cs @@ -70,6 +70,16 @@ namespace FirstPlugin.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap AlignmentPane { + get { + object obj = ResourceManager.GetObject("AlignmentPane", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -150,6 +160,16 @@ namespace FirstPlugin.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BoundryPane { + get { + object obj = ResourceManager.GetObject("BoundryPane", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -170,6 +190,26 @@ namespace FirstPlugin.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NullPane { + get { + object obj = ResourceManager.GetObject("NullPane", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap PicturePane { + get { + object obj = ResourceManager.GetObject("PicturePane", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -180,6 +220,26 @@ namespace FirstPlugin.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ScissorPane { + get { + object obj = ResourceManager.GetObject("ScissorPane", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TextPane { + get { + object obj = ResourceManager.GetObject("TextPane", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -219,5 +279,15 @@ namespace FirstPlugin.Properties { return ((byte[])(obj)); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap WindowPane { + get { + object obj = ResourceManager.GetObject("WindowPane", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/File_Format_Library/Properties/Resources.resx b/File_Format_Library/Properties/Resources.resx index ec132dec..689d9510 100644 --- a/File_Format_Library/Properties/Resources.resx +++ b/File_Format_Library/Properties/Resources.resx @@ -166,4 +166,25 @@ ..\Resources\ArrowIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Layout\AlignmentPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Layout\BoundryPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Layout\NullPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Layout\PicturePane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Layout\ScissorPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Layout\TextPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Layout\WindowPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/File_Format_Library/Resources/GridBackground.png b/File_Format_Library/Resources/GridBackground.png index 3d5d8398..6b7b540c 100644 Binary files a/File_Format_Library/Resources/GridBackground.png and b/File_Format_Library/Resources/GridBackground.png differ diff --git a/File_Format_Library/Resources/Layout/AlignmentPane.png b/File_Format_Library/Resources/Layout/AlignmentPane.png new file mode 100644 index 00000000..a2dc7c9f Binary files /dev/null and b/File_Format_Library/Resources/Layout/AlignmentPane.png differ diff --git a/File_Format_Library/Resources/Layout/BoundryPane.png b/File_Format_Library/Resources/Layout/BoundryPane.png new file mode 100644 index 00000000..a2dc7c9f Binary files /dev/null and b/File_Format_Library/Resources/Layout/BoundryPane.png differ diff --git a/File_Format_Library/Resources/Layout/NullPane.png b/File_Format_Library/Resources/Layout/NullPane.png new file mode 100644 index 00000000..6b22666b Binary files /dev/null and b/File_Format_Library/Resources/Layout/NullPane.png differ diff --git a/File_Format_Library/Resources/Layout/PicturePane.png b/File_Format_Library/Resources/Layout/PicturePane.png new file mode 100644 index 00000000..da2f2dfd Binary files /dev/null and b/File_Format_Library/Resources/Layout/PicturePane.png differ diff --git a/File_Format_Library/Resources/Layout/ScissorPane.png b/File_Format_Library/Resources/Layout/ScissorPane.png new file mode 100644 index 00000000..a050a7c6 Binary files /dev/null and b/File_Format_Library/Resources/Layout/ScissorPane.png differ diff --git a/File_Format_Library/Resources/Layout/TextPane.png b/File_Format_Library/Resources/Layout/TextPane.png new file mode 100644 index 00000000..8541ed71 Binary files /dev/null and b/File_Format_Library/Resources/Layout/TextPane.png differ diff --git a/File_Format_Library/Resources/Layout/WindowPane.png b/File_Format_Library/Resources/Layout/WindowPane.png new file mode 100644 index 00000000..c91a051b Binary files /dev/null and b/File_Format_Library/Resources/Layout/WindowPane.png differ diff --git a/File_Format_Library/app.config b/File_Format_Library/app.config index cd8e858d..62cf6766 100644 --- a/File_Format_Library/app.config +++ b/File_Format_Library/app.config @@ -10,6 +10,10 @@ + + + + diff --git a/File_Format_Library/packages.config b/File_Format_Library/packages.config index 6b8deb9c..40f6789f 100644 --- a/File_Format_Library/packages.config +++ b/File_Format_Library/packages.config @@ -1,3 +1,5 @@  + + \ No newline at end of file diff --git a/Switch_Toolbox_Library/FileFormats/DDS/RGBAPixelDecoder.cs b/Switch_Toolbox_Library/FileFormats/DDS/RGBAPixelDecoder.cs index 83e15325..1c9767b5 100644 --- a/Switch_Toolbox_Library/FileFormats/DDS/RGBAPixelDecoder.cs +++ b/Switch_Toolbox_Library/FileFormats/DDS/RGBAPixelDecoder.cs @@ -47,6 +47,8 @@ namespace Toolbox.Library uint bpp = STGenericTexture.GetBytesPerPixel(format); int size = width * height * 4; + bpp = (uint)(data.Length / (width * height)); + byte[] output = new byte[size]; int inPos = 0; @@ -54,6 +56,10 @@ namespace Toolbox.Library byte[] compSel = new byte[4] {0,1,2,3 }; + if (format == TEX_FORMAT.L8 || format == TEX_FORMAT.LA8) + compSel = new byte[4] { 0, 0, 0, 1 }; + + for (int Y = 0; Y < height; Y++) { for (int X = 0; X < width; X++) diff --git a/Switch_Toolbox_Library/Forms/Archive/ArchiveFilePanel.cs b/Switch_Toolbox_Library/Forms/Archive/ArchiveFilePanel.cs index dea11d67..eda17c58 100644 --- a/Switch_Toolbox_Library/Forms/Archive/ArchiveFilePanel.cs +++ b/Switch_Toolbox_Library/Forms/Archive/ArchiveFilePanel.cs @@ -15,6 +15,7 @@ namespace Toolbox.Library.Forms public partial class ArchiveFilePanel : UserControl { ArchiveFileInfo ArchiveFileInfo; + IArchiveFile ArchiveFile; private bool _IsLoaded = false; @@ -27,6 +28,12 @@ namespace Toolbox.Library.Forms saveBtn.Visible = false; } + public void LoadFile(ArchiveFileInfo archiveFileInfo, IArchiveFile archiveFile) + { + ArchiveFileInfo = archiveFileInfo; + ArchiveFile = archiveFile; + } + public void LoadFile(ArchiveFileInfo archiveFileInfo) { ArchiveFileInfo = archiveFileInfo; @@ -89,6 +96,9 @@ namespace Toolbox.Library.Forms return; } + if (File.IFileInfo != null && ArchiveFile != null) + File.IFileInfo.ArchiveParent = ArchiveFile; + ArchiveFileInfo.FileFormat = File; SetEditorForm(File); } diff --git a/Switch_Toolbox_Library/Forms/Custom/DropdownPanel/STCollapsePanelButton.Designer.cs b/Switch_Toolbox_Library/Forms/Custom/DropdownPanel/STCollapsePanelButton.Designer.cs index a66bb0d7..2fb82676 100644 --- a/Switch_Toolbox_Library/Forms/Custom/DropdownPanel/STCollapsePanelButton.Designer.cs +++ b/Switch_Toolbox_Library/Forms/Custom/DropdownPanel/STCollapsePanelButton.Designer.cs @@ -42,7 +42,7 @@ // this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); - this.pictureBox1.Image = global::Toolbox.Library.Properties.Resources.arrowMinimize_; + this.pictureBox1.Image = global::Toolbox.Library.Properties.Resources.arrowMinimize; this.pictureBox1.Location = new System.Drawing.Point(0, 0); this.pictureBox1.Name = "pictureBox1"; this.pictureBox1.Size = new System.Drawing.Size(30, 18); diff --git a/Switch_Toolbox_Library/Forms/Custom/FlatTabControl/FlatTabControl.cs b/Switch_Toolbox_Library/Forms/Custom/FlatTabControl/FlatTabControl.cs index 21253e2d..4e9710cc 100644 --- a/Switch_Toolbox_Library/Forms/Custom/FlatTabControl/FlatTabControl.cs +++ b/Switch_Toolbox_Library/Forms/Custom/FlatTabControl/FlatTabControl.cs @@ -399,6 +399,18 @@ namespace FlatTabControl private void FlatTabControl_SelectedIndexChanged(object sender, EventArgs e) { + foreach (TabPage tpCheck in TabPages) + { + tpCheck.BackColor = FormThemes.BaseTheme.TabPageInactive; + tpCheck.ForeColor = FormThemes.BaseTheme.DisabledItemColor; + } + + if (SelectedTab != null) + { + SelectedTab.BackColor = FormThemes.BaseTheme.TabPageActive; + SelectedTab.ForeColor = FormThemes.BaseTheme.TextForeColor; + } + UpdateUpDown(); Invalidate(); // we need to update border and background colors } diff --git a/Switch_Toolbox_Library/Forms/Custom/STTabControl.cs b/Switch_Toolbox_Library/Forms/Custom/STTabControl.cs index f59fc060..e6569470 100644 --- a/Switch_Toolbox_Library/Forms/Custom/STTabControl.cs +++ b/Switch_Toolbox_Library/Forms/Custom/STTabControl.cs @@ -10,10 +10,9 @@ namespace Toolbox.Library.Forms { public class STTabControl : FlatTabControl.FlatTabControl { - public STTabControl() + public STTabControl() : base() { myBackColor = FormThemes.BaseTheme.FormBackColor; - InitializeComponent(); } diff --git a/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.Designer.cs b/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.Designer.cs index af6d6743..64fe588a 100644 --- a/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.Designer.cs +++ b/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.Designer.cs @@ -29,28 +29,31 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - this.splitter1 = new System.Windows.Forms.Splitter(); - this.stPanel2 = new Toolbox.Library.Forms.STPanel(); - this.stPanel1 = new Toolbox.Library.Forms.STPanel(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.stPanel5 = new Toolbox.Library.Forms.STPanel(); this.nodeSizeCB = new Toolbox.Library.Forms.STComboBox(); - this.stPanel4 = new Toolbox.Library.Forms.STPanel(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.treeViewCustom1 = new Toolbox.Library.TreeViewCustom(); this.stToolStrip1 = new Toolbox.Library.Forms.STToolStrip(); this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); this.searchFormToolStrip = new System.Windows.Forms.ToolStripButton(); this.stPanel3 = new Toolbox.Library.Forms.STPanel(); - this.searchImgPB = new System.Windows.Forms.PictureBox(); this.activeEditorChkBox = new Toolbox.Library.Forms.STCheckBox(); + this.searchImgPB = new System.Windows.Forms.PictureBox(); this.objectEditorMenu = new Toolbox.Library.Forms.STMenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.sortToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.dockSearchListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.stPanel2 = new Toolbox.Library.Forms.STPanel(); + this.btnPanelDisplay = new Toolbox.Library.Forms.STButton(); this.treeNodeContextMenu = new Toolbox.Library.Forms.STContextMenuStrip(this.components); - this.stPanel1.SuspendLayout(); - this.stPanel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.stPanel5.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel2.SuspendLayout(); this.splitContainer1.SuspendLayout(); @@ -60,36 +63,36 @@ this.objectEditorMenu.SuspendLayout(); this.SuspendLayout(); // - // splitter1 + // splitContainer2 // - this.splitter1.Location = new System.Drawing.Point(314, 0); - this.splitter1.Name = "splitter1"; - this.splitter1.Size = new System.Drawing.Size(3, 542); - this.splitter1.TabIndex = 13; - this.splitter1.TabStop = false; - this.splitter1.LocationChanged += new System.EventHandler(this.splitter1_LocationChanged); - this.splitter1.Resize += new System.EventHandler(this.splitter1_Resize); + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; // - // stPanel2 + // splitContainer2.Panel1 // - this.stPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.stPanel2.Location = new System.Drawing.Point(314, 0); - this.stPanel2.Name = "stPanel2"; - this.stPanel2.Size = new System.Drawing.Size(593, 542); - this.stPanel2.TabIndex = 12; + this.splitContainer2.Panel1.Controls.Add(this.stPanel5); // - // stPanel1 + // splitContainer2.Panel2 // - this.stPanel1.Controls.Add(this.nodeSizeCB); - this.stPanel1.Controls.Add(this.stPanel4); - this.stPanel1.Controls.Add(this.stToolStrip1); - this.stPanel1.Controls.Add(this.stPanel3); - this.stPanel1.Dock = System.Windows.Forms.DockStyle.Left; - this.stPanel1.Location = new System.Drawing.Point(0, 0); - this.stPanel1.Name = "stPanel1"; - this.stPanel1.Size = new System.Drawing.Size(314, 542); - this.stPanel1.TabIndex = 11; - this.stPanel1.Resize += new System.EventHandler(this.stPanel1_Resize); + this.splitContainer2.Panel2.Controls.Add(this.stPanel2); + this.splitContainer2.Panel2.Controls.Add(this.btnPanelDisplay); + this.splitContainer2.Size = new System.Drawing.Size(907, 542); + this.splitContainer2.SplitterDistance = 302; + this.splitContainer2.TabIndex = 14; + // + // stPanel5 + // + this.stPanel5.Controls.Add(this.nodeSizeCB); + this.stPanel5.Controls.Add(this.splitContainer1); + this.stPanel5.Controls.Add(this.stToolStrip1); + this.stPanel5.Controls.Add(this.stPanel3); + this.stPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.stPanel5.Location = new System.Drawing.Point(0, 0); + this.stPanel5.Name = "stPanel5"; + this.stPanel5.Size = new System.Drawing.Size(302, 542); + this.stPanel5.TabIndex = 2; // // nodeSizeCB // @@ -99,35 +102,28 @@ this.nodeSizeCB.ButtonColor = System.Drawing.Color.Empty; this.nodeSizeCB.FormattingEnabled = true; this.nodeSizeCB.IsReadOnly = false; - this.nodeSizeCB.Location = new System.Drawing.Point(172, 29); + this.nodeSizeCB.Location = new System.Drawing.Point(138, 26); this.nodeSizeCB.Name = "nodeSizeCB"; - this.nodeSizeCB.Size = new System.Drawing.Size(136, 21); + this.nodeSizeCB.Size = new System.Drawing.Size(144, 21); this.nodeSizeCB.TabIndex = 5; this.nodeSizeCB.SelectedIndexChanged += new System.EventHandler(this.nodeSizeCB_SelectedIndexChanged); // - // stPanel4 - // - this.stPanel4.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.stPanel4.Controls.Add(this.splitContainer1); - this.stPanel4.Location = new System.Drawing.Point(3, 54); - this.stPanel4.Name = "stPanel4"; - this.stPanel4.Size = new System.Drawing.Size(305, 485); - this.stPanel4.TabIndex = 4; - // // splitContainer1 // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Location = new System.Drawing.Point(0, 51); this.splitContainer1.Name = "splitContainer1"; this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Resize += new System.EventHandler(this.splitContainer1_Panel1_Resize); this.splitContainer1.Panel1Collapsed = true; // // splitContainer1.Panel2 // this.splitContainer1.Panel2.Controls.Add(this.treeViewCustom1); - this.splitContainer1.Size = new System.Drawing.Size(305, 485); + this.splitContainer1.Size = new System.Drawing.Size(302, 491); this.splitContainer1.SplitterDistance = 201; this.splitContainer1.TabIndex = 1; // @@ -142,7 +138,7 @@ this.treeViewCustom1.Location = new System.Drawing.Point(0, 0); this.treeViewCustom1.Name = "treeViewCustom1"; this.treeViewCustom1.SelectedImageIndex = 0; - this.treeViewCustom1.Size = new System.Drawing.Size(305, 485); + this.treeViewCustom1.Size = new System.Drawing.Size(302, 491); this.treeViewCustom1.TabIndex = 0; this.treeViewCustom1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeViewCustom1_AfterCheck); this.treeViewCustom1.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.treeViewCustom1_AfterCollapse); @@ -166,7 +162,7 @@ this.searchFormToolStrip}); this.stToolStrip1.Location = new System.Drawing.Point(0, 26); this.stToolStrip1.Name = "stToolStrip1"; - this.stToolStrip1.Size = new System.Drawing.Size(314, 25); + this.stToolStrip1.Size = new System.Drawing.Size(302, 25); this.stToolStrip1.TabIndex = 3; this.stToolStrip1.Text = "stToolStrip1"; // @@ -183,7 +179,7 @@ // searchFormToolStrip // this.searchFormToolStrip.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.searchFormToolStrip.Image = global::Toolbox.Library.Properties.Resources.Antu_edit_find_mail1; + this.searchFormToolStrip.Image = global::Toolbox.Library.Properties.Resources.Antu_edit_find_mail_svg; this.searchFormToolStrip.ImageTransparentColor = System.Drawing.Color.Magenta; this.searchFormToolStrip.Name = "searchFormToolStrip"; this.searchFormToolStrip.Size = new System.Drawing.Size(23, 22); @@ -192,31 +188,20 @@ // // stPanel3 // - this.stPanel3.Controls.Add(this.searchImgPB); this.stPanel3.Controls.Add(this.activeEditorChkBox); + this.stPanel3.Controls.Add(this.searchImgPB); this.stPanel3.Controls.Add(this.objectEditorMenu); this.stPanel3.Dock = System.Windows.Forms.DockStyle.Top; this.stPanel3.Location = new System.Drawing.Point(0, 0); this.stPanel3.Name = "stPanel3"; - this.stPanel3.Size = new System.Drawing.Size(314, 26); + this.stPanel3.Size = new System.Drawing.Size(302, 26); this.stPanel3.TabIndex = 2; // - // searchImgPB - // - this.searchImgPB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.searchImgPB.BackColor = System.Drawing.Color.Transparent; - this.searchImgPB.Image = global::Toolbox.Library.Properties.Resources.Antu_edit_find_mail_svg; - this.searchImgPB.Location = new System.Drawing.Point(-654, 5); - this.searchImgPB.Name = "searchImgPB"; - this.searchImgPB.Size = new System.Drawing.Size(22, 17); - this.searchImgPB.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.searchImgPB.TabIndex = 1; - this.searchImgPB.TabStop = false; - // // activeEditorChkBox // + this.activeEditorChkBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.activeEditorChkBox.AutoSize = true; - this.activeEditorChkBox.Location = new System.Drawing.Point(137, 6); + this.activeEditorChkBox.Location = new System.Drawing.Point(138, 3); this.activeEditorChkBox.Name = "activeEditorChkBox"; this.activeEditorChkBox.Size = new System.Drawing.Size(144, 17); this.activeEditorChkBox.TabIndex = 3; @@ -224,6 +209,18 @@ this.activeEditorChkBox.UseVisualStyleBackColor = true; this.activeEditorChkBox.CheckedChanged += new System.EventHandler(this.activeEditorChkBox_CheckedChanged); // + // searchImgPB + // + this.searchImgPB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.searchImgPB.BackColor = System.Drawing.Color.Transparent; + this.searchImgPB.Image = global::Toolbox.Library.Properties.Resources.Antu_edit_find_mail_svg; + this.searchImgPB.Location = new System.Drawing.Point(-666, 5); + this.searchImgPB.Name = "searchImgPB"; + this.searchImgPB.Size = new System.Drawing.Size(22, 17); + this.searchImgPB.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.searchImgPB.TabIndex = 1; + this.searchImgPB.TabStop = false; + // // objectEditorMenu // this.objectEditorMenu.Dock = System.Windows.Forms.DockStyle.Fill; @@ -232,7 +229,7 @@ this.viewToolStripMenuItem}); this.objectEditorMenu.Location = new System.Drawing.Point(0, 0); this.objectEditorMenu.Name = "objectEditorMenu"; - this.objectEditorMenu.Size = new System.Drawing.Size(314, 26); + this.objectEditorMenu.Size = new System.Drawing.Size(302, 26); this.objectEditorMenu.TabIndex = 1; this.objectEditorMenu.Text = "stContextMenuStrip1"; // @@ -275,6 +272,26 @@ this.dockSearchListToolStripMenuItem.Text = "Dock Search List"; this.dockSearchListToolStripMenuItem.Click += new System.EventHandler(this.dockSearchListToolStripMenuItem_Click); // + // stPanel2 + // + this.stPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.stPanel2.Location = new System.Drawing.Point(14, 0); + this.stPanel2.Name = "stPanel2"; + this.stPanel2.Size = new System.Drawing.Size(587, 542); + this.stPanel2.TabIndex = 12; + // + // btnPanelDisplay + // + this.btnPanelDisplay.Dock = System.Windows.Forms.DockStyle.Left; + this.btnPanelDisplay.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnPanelDisplay.Location = new System.Drawing.Point(0, 0); + this.btnPanelDisplay.Name = "btnPanelDisplay"; + this.btnPanelDisplay.Size = new System.Drawing.Size(14, 542); + this.btnPanelDisplay.TabIndex = 3; + this.btnPanelDisplay.Text = "<"; + this.btnPanelDisplay.UseVisualStyleBackColor = false; + this.btnPanelDisplay.Click += new System.EventHandler(this.btnPanelDisplay_Click); + // // treeNodeContextMenu // this.treeNodeContextMenu.Name = "treeNodeContextMenu"; @@ -282,14 +299,15 @@ // // ObjectEditorTree // - this.Controls.Add(this.splitter1); - this.Controls.Add(this.stPanel2); - this.Controls.Add(this.stPanel1); + this.Controls.Add(this.splitContainer2); this.Name = "ObjectEditorTree"; this.Size = new System.Drawing.Size(907, 542); - this.stPanel1.ResumeLayout(false); - this.stPanel1.PerformLayout(); - this.stPanel4.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.stPanel5.ResumeLayout(false); + this.stPanel5.PerformLayout(); this.splitContainer1.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); this.splitContainer1.ResumeLayout(false); @@ -305,10 +323,7 @@ } #endregion - - private System.Windows.Forms.Splitter splitter1; public STPanel stPanel2; - private STPanel stPanel1; private STPanel stPanel3; private TreeViewCustom treeViewCustom1; private System.Windows.Forms.PictureBox searchImgPB; @@ -322,9 +337,11 @@ private STToolStrip stToolStrip1; private System.Windows.Forms.ToolStripButton searchFormToolStrip; private System.Windows.Forms.ToolStripButton toolStripButton1; - private STPanel stPanel4; private System.Windows.Forms.SplitContainer splitContainer1; private System.Windows.Forms.ToolStripMenuItem dockSearchListToolStripMenuItem; private STComboBox nodeSizeCB; + private STPanel stPanel5; + private STButton btnPanelDisplay; + private System.Windows.Forms.SplitContainer splitContainer2; } } \ No newline at end of file diff --git a/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.cs b/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.cs index ff9e2897..92965213 100644 --- a/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.cs +++ b/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.cs @@ -142,12 +142,14 @@ namespace Toolbox.Library.Forms { InitializeComponent(); + btnPanelDisplay.ForeColor = FormThemes.BaseTheme.DisabledBorderColor; + UpdateSearchPanelDockState(); ObjectEditor = objectEditor; if (Runtime.ObjectEditor.ListPanelWidth > 0) - stPanel1.Width = Runtime.ObjectEditor.ListPanelWidth; + splitContainer1.Panel1.Width = Runtime.ObjectEditor.ListPanelWidth; treeViewCustom1.BackColor = FormThemes.BaseTheme.ObjectEditorBackColor; @@ -589,11 +591,6 @@ namespace Toolbox.Library.Forms { } - private void stPanel1_Resize(object sender, EventArgs e) - { - Runtime.ObjectEditor.ListPanelWidth = stPanel1.Width; - } - private void activeEditorChkBox_CheckedChanged(object sender, EventArgs e) { AddFilesToActiveEditor = activeEditorChkBox.Checked; @@ -860,5 +857,26 @@ namespace Toolbox.Library.Forms treeViewCustom1.EndUpdate(); } } + + private bool DisplayEditor = true; + private void btnPanelDisplay_Click(object sender, EventArgs e) + { + if (DisplayEditor) { + splitContainer2.Panel1Collapsed = true; + splitContainer2.Panel1.Hide(); + DisplayEditor = false; + btnPanelDisplay.Text = ">"; + } + else { + splitContainer2.Panel1Collapsed = false; + splitContainer2.Panel1.Show(); + DisplayEditor = true; + btnPanelDisplay.Text = "<"; + } + } + + private void splitContainer1_Panel1_Resize(object sender, EventArgs e) { + Runtime.ObjectEditor.ListPanelWidth = splitContainer1.Panel1.Width; + } } } diff --git a/Switch_Toolbox_Library/Generics/Texture/GenericTexture.cs b/Switch_Toolbox_Library/Generics/Texture/GenericTexture.cs index 7e4f0669..1fb28583 100644 --- a/Switch_Toolbox_Library/Generics/Texture/GenericTexture.cs +++ b/Switch_Toolbox_Library/Generics/Texture/GenericTexture.cs @@ -486,6 +486,8 @@ namespace Toolbox.Library if (data == null) throw new Exception("Data is null!"); + Console.WriteLine("Decoding " + Format + " " + Runtime.UseDirectXTexDecoder); + if (PlatformSwizzle == PlatformSwizzle.Platform_3DS && !IsCompressed(Format)) { var Image = BitmapExtension.GetBitmap(ConvertBgraToRgba(CTR_3DS.DecodeBlock(data, (int)width, (int)height, Format)), @@ -513,13 +515,14 @@ namespace Toolbox.Library case TEX_FORMAT.ETC1_A4: return BitmapExtension.GetBitmap(ETC1.ETC1Decompress(data, (int)width, (int)height, true), (int)width, (int)height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + case TEX_FORMAT.L8: + return BitmapExtension.GetBitmap(RGBAPixelDecoder.Decode(data, (int)width, (int)height, Format), + (int)width, (int)height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); case TEX_FORMAT.LA8: return BitmapExtension.GetBitmap(RGBAPixelDecoder.Decode(data, (int)width, (int)height, Format), (int)width, (int)height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); } - Console.WriteLine("Decoding " + Format + " " + Runtime.UseDirectXTexDecoder); - if (Runtime.UseDirectXTexDecoder) { return BitmapExtension.GetBitmap(DecodeBlock(data, width, height, Format, new byte[0], Parameters), @@ -627,6 +630,11 @@ namespace Toolbox.Library if (Format == TEX_FORMAT.BC5_SNORM) imageData = DDSCompressor.DecompressBC5(data, (int)Width, (int)Height, true, true); + if (Format == TEX_FORMAT.L8) + return RGBAPixelDecoder.Decode(data, (int)Width, (int)Height, Format); + if (Format == TEX_FORMAT.LA8) + return RGBAPixelDecoder.Decode(data, (int)Width, (int)Height, Format); + if (IsCompressed(Format)) imageData = DDSCompressor.DecompressBlock(data, (int)Width, (int)Height, (DDS.DXGI_FORMAT)Format); else diff --git a/Switch_Toolbox_Library/IO/Extensions/IOExtensions.cs b/Switch_Toolbox_Library/IO/Extensions/IOExtensions.cs index 80997a47..0a30b026 100644 --- a/Switch_Toolbox_Library/IO/Extensions/IOExtensions.cs +++ b/Switch_Toolbox_Library/IO/Extensions/IOExtensions.cs @@ -15,6 +15,18 @@ namespace Toolbox.Library.IO { public static class IOExtensions { + public static OpenTK.Vector2 ToTKVector2(this Syroot.Maths.Vector2F vec2) { + return new OpenTK.Vector2(vec2.X, vec2.Y); + } + + public static OpenTK.Vector3 ToTKVector3(this Syroot.Maths.Vector3F vec3) { + return new OpenTK.Vector3(vec3.X, vec3.Y, vec3.Z); + } + + public static OpenTK.Vector4 ToTKVector4(this Syroot.Maths.Vector4F vec4) { + return new OpenTK.Vector4(vec4.X, vec4.Y, vec4.Z, vec4.W); + } + public static byte[] DeserializeToBytes(this T structure) where T : struct { using (MemoryStream stream = new MemoryStream()) diff --git a/Switch_Toolbox_Library/IO/STFileLoader.cs b/Switch_Toolbox_Library/IO/STFileLoader.cs index 832f320d..95ebb1d8 100644 --- a/Switch_Toolbox_Library/IO/STFileLoader.cs +++ b/Switch_Toolbox_Library/IO/STFileLoader.cs @@ -45,12 +45,14 @@ namespace Toolbox.Library.IO foreach (IFileFormat fileFormat in FileManager.GetFileFormats()) { fileFormat.FileName = Path.GetFileName(FileName); - fileFormat.IFileInfo = new IFileInfo(); foreach (Type type in FileTypes) { if (fileFormat.Identify(stream) && fileFormat.GetType() == type) + { + fileFormat.IFileInfo = new IFileInfo(); return OpenFileFormat(FileName, data); + } } } @@ -335,10 +337,10 @@ namespace Toolbox.Library.IO //Most is by magic but some can be extension or name. fileFormat.FileName = Path.GetFileName(FileName); - fileFormat.IFileInfo = new IFileInfo(); if (fileFormat.Identify(stream)) { + fileFormat.IFileInfo = new IFileInfo(); fileFormat.IFileInfo.DecompressedSize = DecompressedFileSize; fileFormat.IFileInfo.CompressedSize = CompressedFileSize; return SetFileFormat(fileFormat, FileName, stream, LeaveStreamOpen, InArchive, archiveNode, Compressed, CompType); diff --git a/Switch_Toolbox_Library/Interfaces/FileFormatting/IArchiveFile.cs b/Switch_Toolbox_Library/Interfaces/FileFormatting/IArchiveFile.cs index 0c2fbf51..46607b37 100644 --- a/Switch_Toolbox_Library/Interfaces/FileFormatting/IArchiveFile.cs +++ b/Switch_Toolbox_Library/Interfaces/FileFormatting/IArchiveFile.cs @@ -79,6 +79,9 @@ namespace Toolbox.Library [Browsable(false)] public virtual IFileFormat OpenFile() { + if (FileFormat != null) + return FileFormat; + if (FileDataStream != null) { return STFileLoader.OpenFileFormat(FileDataStream, @@ -881,10 +884,13 @@ namespace Toolbox.Library if (file == null) //Format not supported so return return; + if (file.IFileInfo != null) + file.IFileInfo.ArchiveParent = ArchiveFile; + if (Utils.HasInterface(file.GetType(), typeof(IEditor<>))) - { + OpenControlDialog(file); + else if (Utils.HasInterface(file.GetType(), typeof(IEditorForm<>))) OpenFormDialog(file); - } else if (file is IArchiveFile) { if (ArchiveFileInfo.FileFormat != null) @@ -912,9 +918,35 @@ namespace Toolbox.Library ArchiveFileInfo.FileFormat = file; } - private void OpenFormDialog(IFileFormat fileFormat) + private static Form activeForm; + public void OpenFormDialog(IFileFormat fileFormat) { - UserControl form = GetEditorForm(fileFormat); + if (activeForm != null) + { + activeForm.Text = (((IFileFormat)fileFormat).FileName); + System.Reflection.MethodInfo methodFill = fileFormat.GetType().GetMethod("FillEditor"); + methodFill.Invoke(fileFormat, new object[1] { activeForm }); + } + else + { + activeForm = GetEditorForm(fileFormat); + activeForm.Text = (((IFileFormat)fileFormat).FileName); + activeForm.Show(); + } + + /* if (form.ShowDialog() == DialogResult.OK) + { + if (fileFormat.CanSave) + { + ArchiveFileInfo.SaveFileFormat(); + UpdateEditor(); + } + }*/ + } + + private void OpenControlDialog(IFileFormat fileFormat) + { + UserControl form = GetEditorControl(fileFormat); form.Text = (((IFileFormat)fileFormat).FileName); var parentForm = LibraryGUI.GetActiveForm(); @@ -937,7 +969,21 @@ namespace Toolbox.Library return; } - public UserControl GetEditorForm(IFileFormat fileFormat) + public Form GetEditorForm(IFileFormat fileFormat) + { + Type objectType = fileFormat.GetType(); + foreach (var inter in objectType.GetInterfaces()) + { + if (inter.IsGenericType && inter.GetGenericTypeDefinition() == typeof(IEditorForm<>)) + { + System.Reflection.MethodInfo method = objectType.GetMethod("OpenForm"); + return (Form)method.Invoke(fileFormat, new object[0]); + } + } + return null; + } + + public UserControl GetEditorControl(IFileFormat fileFormat) { Type objectType = fileFormat.GetType(); foreach (var inter in objectType.GetInterfaces()) @@ -965,7 +1011,7 @@ namespace Toolbox.Library LibraryGUI.LoadEditor(editor); } - editor.LoadFile(ArchiveFileInfo); + editor.LoadFile(ArchiveFileInfo, ArchiveFile); editor.UpdateEditor(); } diff --git a/Switch_Toolbox_Library/Interfaces/FileFormatting/IFileFormat.cs b/Switch_Toolbox_Library/Interfaces/FileFormatting/IFileFormat.cs index 164e98d5..ac10d69e 100644 --- a/Switch_Toolbox_Library/Interfaces/FileFormatting/IFileFormat.cs +++ b/Switch_Toolbox_Library/Interfaces/FileFormatting/IFileFormat.cs @@ -57,6 +57,7 @@ namespace Toolbox.Library public class IFileInfo { public CompressionType CompressionType { get; set; } + public IArchiveFile ArchiveParent { get; set; } public bool FileIsCompressed { get; set; } public bool FileIsEdited { get; set; } public bool UseEditMenu { get; set; } diff --git a/Switch_Toolbox_Library/Properties/Resources.Designer.cs b/Switch_Toolbox_Library/Properties/Resources.Designer.cs index eae92f12..ff980afa 100644 --- a/Switch_Toolbox_Library/Properties/Resources.Designer.cs +++ b/Switch_Toolbox_Library/Properties/Resources.Designer.cs @@ -105,17 +105,7 @@ namespace Toolbox.Library.Properties { /// public static System.Drawing.Bitmap Antu_edit_find_mail_svg { get { - object obj = ResourceManager.GetObject("Antu_edit-find-mail.svg", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - public static System.Drawing.Bitmap Antu_edit_find_mail1 { - get { - object obj = ResourceManager.GetObject("Antu_edit-find-mail1", resourceCulture); + object obj = ResourceManager.GetObject("Antu_edit_find_mail_svg", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -133,9 +123,9 @@ namespace Toolbox.Library.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap arrowMinimize_ { + public static System.Drawing.Bitmap arrowMinimize { get { - object obj = ResourceManager.GetObject("arrowMinimize ", resourceCulture); + object obj = ResourceManager.GetObject("arrowMinimize", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } diff --git a/Switch_Toolbox_Library/Properties/Resources.resx b/Switch_Toolbox_Library/Properties/Resources.resx index 038e04eb..15e2a93b 100644 --- a/Switch_Toolbox_Library/Properties/Resources.resx +++ b/Switch_Toolbox_Library/Properties/Resources.resx @@ -211,9 +211,6 @@ ..\Resources\maximize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Antu_edit-find-mail.svg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\CheckBox\CheckClicked.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -316,9 +313,6 @@ ..\Resources\LoadingImage.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Antu_edit-find-mail.svg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\InjectTexErrored.dds;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -352,9 +346,6 @@ ..\Resources\materialSphereTransparent.tif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\arrowMinimize .png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\UVPattern.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -385,4 +376,10 @@ ..\Resources\AddIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Antu_edit-find-mail.svg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowMinimize .png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Switch_Toolbox_Library/Toolbox_Library.csproj b/Switch_Toolbox_Library/Toolbox_Library.csproj index 7a06e7d0..696e6939 100644 --- a/Switch_Toolbox_Library/Toolbox_Library.csproj +++ b/Switch_Toolbox_Library/Toolbox_Library.csproj @@ -1317,6 +1317,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Toolbox/Lib/Plugins/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll b/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll similarity index 81% rename from Toolbox/Lib/Plugins/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll rename to Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll index 9f9703c5..041e1815 100644 Binary files a/Toolbox/Lib/Plugins/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll and b/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll differ diff --git a/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.dll b/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.dll index 4da5cdd4..dfe045e9 100644 Binary files a/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.dll and b/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.dll differ diff --git a/Toolbox/MainForm.Designer.cs b/Toolbox/MainForm.Designer.cs index 78c55714..a5b5d90b 100644 --- a/Toolbox/MainForm.Designer.cs +++ b/Toolbox/MainForm.Designer.cs @@ -35,6 +35,7 @@ this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.newFromFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.recentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -70,7 +71,6 @@ this.stToolStrip1 = new Toolbox.Library.Forms.STToolStrip(); this.saveToolStripButton = new System.Windows.Forms.ToolStripButton(); this.updateToolstrip = new System.Windows.Forms.ToolStripButton(); - this.openFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1.SuspendLayout(); this.stPanel1.SuspendLayout(); this.tabControlContextMenuStrip.SuspendLayout(); @@ -119,33 +119,40 @@ // newToolStripMenuItem // this.newToolStripMenuItem.Name = "newToolStripMenuItem"; - this.newToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.newToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.newToolStripMenuItem.Text = "New"; // // newFromFileToolStripMenuItem // this.newFromFileToolStripMenuItem.Name = "newFromFileToolStripMenuItem"; - this.newFromFileToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.newFromFileToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.newFromFileToolStripMenuItem.Text = "New From File"; // // openToolStripMenuItem // this.openToolStripMenuItem.Name = "openToolStripMenuItem"; - this.openToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.openToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.openToolStripMenuItem.Text = "Open"; this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); // + // openFolderToolStripMenuItem + // + this.openFolderToolStripMenuItem.Name = "openFolderToolStripMenuItem"; + this.openFolderToolStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.openFolderToolStripMenuItem.Text = "Open (Folder)"; + this.openFolderToolStripMenuItem.Click += new System.EventHandler(this.openFolderToolStripMenuItem_Click); + // // recentToolStripMenuItem // this.recentToolStripMenuItem.Name = "recentToolStripMenuItem"; - this.recentToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.recentToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.recentToolStripMenuItem.Text = "Recent"; // // saveToolStripMenuItem // this.saveToolStripMenuItem.Enabled = false; this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // @@ -153,14 +160,14 @@ // this.saveAsToolStripMenuItem.Enabled = false; this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; - this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.saveAsToolStripMenuItem.Text = "Save As"; this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click); // // exitToolStripMenuItem // this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.exitToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.exitToolStripMenuItem.Text = "Exit"; this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); // @@ -328,7 +335,7 @@ // tabForms // this.tabForms.Dock = System.Windows.Forms.DockStyle.Top; - this.tabForms.Location = new System.Drawing.Point(0, 55); + this.tabForms.Location = new System.Drawing.Point(0, 49); this.tabForms.myBackColor = System.Drawing.Color.Empty; this.tabForms.Name = "tabForms"; this.tabForms.SelectedIndex = 0; @@ -361,7 +368,7 @@ this.stPanel2.Dock = System.Windows.Forms.DockStyle.Top; this.stPanel2.Location = new System.Drawing.Point(0, 25); this.stPanel2.Name = "stPanel2"; - this.stPanel2.Size = new System.Drawing.Size(1108, 30); + this.stPanel2.Size = new System.Drawing.Size(1108, 24); this.stPanel2.TabIndex = 7; // // BtnMdiMinimize @@ -371,7 +378,7 @@ this.BtnMdiMinimize.Image = ((System.Drawing.Image)(resources.GetObject("BtnMdiMinimize.Image"))); this.BtnMdiMinimize.Location = new System.Drawing.Point(991, 2); this.BtnMdiMinimize.Name = "BtnMdiMinimize"; - this.BtnMdiMinimize.Size = new System.Drawing.Size(38, 25); + this.BtnMdiMinimize.Size = new System.Drawing.Size(38, 22); this.BtnMdiMinimize.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; this.BtnMdiMinimize.TabIndex = 6; this.BtnMdiMinimize.TabStop = false; @@ -386,7 +393,7 @@ this.BtnMdiMinMax.Image = ((System.Drawing.Image)(resources.GetObject("BtnMdiMinMax.Image"))); this.BtnMdiMinMax.Location = new System.Drawing.Point(1029, 2); this.BtnMdiMinMax.Name = "BtnMdiMinMax"; - this.BtnMdiMinMax.Size = new System.Drawing.Size(38, 25); + this.BtnMdiMinMax.Size = new System.Drawing.Size(38, 22); this.BtnMdiMinMax.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; this.BtnMdiMinMax.TabIndex = 5; this.BtnMdiMinMax.TabStop = false; @@ -401,7 +408,7 @@ this.BtnMdiClose.Image = ((System.Drawing.Image)(resources.GetObject("BtnMdiClose.Image"))); this.BtnMdiClose.Location = new System.Drawing.Point(1067, 2); this.BtnMdiClose.Name = "BtnMdiClose"; - this.BtnMdiClose.Size = new System.Drawing.Size(38, 25); + this.BtnMdiClose.Size = new System.Drawing.Size(38, 22); this.BtnMdiClose.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; this.BtnMdiClose.TabIndex = 4; this.BtnMdiClose.TabStop = false; @@ -417,7 +424,7 @@ this.updateToolstrip}); this.stToolStrip1.Location = new System.Drawing.Point(0, 0); this.stToolStrip1.Name = "stToolStrip1"; - this.stToolStrip1.Size = new System.Drawing.Size(1108, 30); + this.stToolStrip1.Size = new System.Drawing.Size(1108, 24); this.stToolStrip1.TabIndex = 0; this.stToolStrip1.Text = "stToolStrip1"; // @@ -428,7 +435,7 @@ this.saveToolStripButton.Image = global::Toolbox.Properties.Resources.Save; this.saveToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.saveToolStripButton.Name = "saveToolStripButton"; - this.saveToolStripButton.Size = new System.Drawing.Size(23, 27); + this.saveToolStripButton.Size = new System.Drawing.Size(23, 21); this.saveToolStripButton.Text = "saveToolStripButton1"; this.saveToolStripButton.ToolTipText = "Save File"; this.saveToolStripButton.Click += new System.EventHandler(this.saveToolStripButton_Click); @@ -440,18 +447,11 @@ this.updateToolstrip.Image = global::Toolbox.Properties.Resources.UpdateIcon; this.updateToolstrip.ImageTransparentColor = System.Drawing.Color.Magenta; this.updateToolstrip.Name = "updateToolstrip"; - this.updateToolstrip.Size = new System.Drawing.Size(23, 27); + this.updateToolstrip.Size = new System.Drawing.Size(23, 21); this.updateToolstrip.Text = "toolStripButton1"; this.updateToolstrip.ToolTipText = "Update Tool"; this.updateToolstrip.Click += new System.EventHandler(this.updateToolstrip_Click); // - // openFolderToolStripMenuItem - // - this.openFolderToolStripMenuItem.Name = "openFolderToolStripMenuItem"; - this.openFolderToolStripMenuItem.Size = new System.Drawing.Size(180, 22); - this.openFolderToolStripMenuItem.Text = "Open (Folder)"; - this.openFolderToolStripMenuItem.Click += new System.EventHandler(this.openFolderToolStripMenuItem_Click); - // // MainForm // this.AllowDrop = true; diff --git a/Toolbox/MainForm.cs b/Toolbox/MainForm.cs index ff7f5e4a..8849857e 100644 --- a/Toolbox/MainForm.cs +++ b/Toolbox/MainForm.cs @@ -308,7 +308,6 @@ namespace Toolbox var form = (Form)method.Invoke(file, new object[0]); TabDupeIndex = 0; form.Text = CheckTabDupes(((IFileFormat)file).FileName); - form.MdiParent = this; form.Show(); HasEditorActive = true; diff --git a/Toolbox/Toolbox.csproj b/Toolbox/Toolbox.csproj index 3591a8d2..bd8a6c16 100644 --- a/Toolbox/Toolbox.csproj +++ b/Toolbox/Toolbox.csproj @@ -503,6 +503,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/packages/DockPanelSuite.3.0.6/.signature.p7s b/packages/DockPanelSuite.3.0.6/.signature.p7s new file mode 100644 index 00000000..591e4934 Binary files /dev/null and b/packages/DockPanelSuite.3.0.6/.signature.p7s differ diff --git a/packages/DockPanelSuite.3.0.6/DockPanelSuite.3.0.6.nupkg b/packages/DockPanelSuite.3.0.6/DockPanelSuite.3.0.6.nupkg new file mode 100644 index 00000000..80f17b11 Binary files /dev/null and b/packages/DockPanelSuite.3.0.6/DockPanelSuite.3.0.6.nupkg differ diff --git a/packages/DockPanelSuite.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.dll b/packages/DockPanelSuite.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.dll new file mode 100644 index 00000000..e4b2787a Binary files /dev/null and b/packages/DockPanelSuite.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.dll differ diff --git a/packages/DockPanelSuite.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.dll b/packages/DockPanelSuite.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.dll new file mode 100644 index 00000000..dfe045e9 Binary files /dev/null and b/packages/DockPanelSuite.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.dll differ diff --git a/packages/DockPanelSuite.ThemeVS2015.3.0.6/.signature.p7s b/packages/DockPanelSuite.ThemeVS2015.3.0.6/.signature.p7s new file mode 100644 index 00000000..703a8b88 Binary files /dev/null and b/packages/DockPanelSuite.ThemeVS2015.3.0.6/.signature.p7s differ diff --git a/packages/DockPanelSuite.ThemeVS2015.3.0.6/DockPanelSuite.ThemeVS2015.3.0.6.nupkg b/packages/DockPanelSuite.ThemeVS2015.3.0.6/DockPanelSuite.ThemeVS2015.3.0.6.nupkg new file mode 100644 index 00000000..c2b4c391 Binary files /dev/null and b/packages/DockPanelSuite.ThemeVS2015.3.0.6/DockPanelSuite.ThemeVS2015.3.0.6.nupkg differ diff --git a/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll b/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll new file mode 100644 index 00000000..0dbf5f40 Binary files /dev/null and b/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll differ diff --git a/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll b/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll new file mode 100644 index 00000000..041e1815 Binary files /dev/null and b/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll differ