internal Unknown(Script script, ScriptBlock block, AssetLoader loader) : base(script, block) { Content = new Codex<byte>(loader.Reader.ReadBytes(block.ContentSize)); }
internal Object(Script script, ScriptBlock block, AssetLoader loader) : base(script, block) { var reader = loader.Reader; loader.Expect((ushort)0x1234); LocalVariableOffset = reader.ReadUInt16(); int functionSelectorListOffset = reader.ReadUInt16(); int variableSelectorCount = reader.ReadUInt16(); Codex<VariableSelector> variableSelectors = new Codex<VariableSelector>(variableSelectorCount); Variables = variableSelectors; for (int index = 0; index < variableSelectorCount; index++) variableSelectors.Add(new VariableSelector(this, loader)); int functionSelectorCount = reader.ReadUInt16(); Codex<FunctionSelector> functionSelectors = new Codex<FunctionSelector>(functionSelectorCount); Functions = functionSelectors; for (int index = 0; index < functionSelectorCount; index++) functionSelectors.Add(new FunctionSelector(this, loader)); loader.Expect((ushort)0); for (int index = 0; index < functionSelectorCount; index++) functionSelectors[index].ReadCodeOffset(loader); loader.ExpectPosition(block.EndOffset); }
internal Strings(Script script, ScriptBlock block, AssetLoader loader) : base(script, block) { Codex<string> list = new Codex<string>(); Values = list; while (loader.Position < block.EndOffset) list.Add(loader.Reader.ReadStringz(Encoding.ASCII)); }
internal Locals(Script script, ScriptBlock block, AssetLoader loader) : base(script, block) { Codex<ushort> values = new Codex<ushort>(block.ContentSize / 2); Values = values; for (int index = 0; index < block.ContentSize / 2; index++) values.Add(loader.Reader.ReadUInt16()); }
internal static ScriptSection Read(Script script, AssetLoader loader) { ScriptBlock block = new ScriptBlock(loader); switch (block.Type) { case ScriptBlockType.End: return null; case ScriptBlockType.Locals: return new Locals(script, block, loader); case ScriptBlockType.Object: return new Object(script, block, loader); case ScriptBlockType.Strings: return new Strings(script, block, loader); default: return new Unknown(script, block, loader); } }
internal ScriptSection(Script script, ScriptBlock block) { Block = block; Script = script; }
internal Unknown(Script script, ScriptBlock block, AssetLoader loader) : base(script, block) { Content = new Codex <byte>(loader.Reader.ReadBytes(block.ContentSize)); }