libgm 0.5.1

A tool for modding, unpacking and decompiling GameMaker games
Documentation
use crate::prelude::*;
use crate::wad::deserialize::reader::DataReader;
use crate::wad::elements::GMElement;
use crate::wad::elements::font::GMFont;
use crate::wad::reference::GMRef;
use crate::wad::serialize::builder::DataBuilder;
#[derive(Debug, Clone, PartialEq)]
pub struct TextItemInstance {
    pub name: String,
    pub x: i32,
    pub y: i32,
    pub font: GMRef<GMFont>,
    pub scale_x: f32,
    pub scale_y: f32,
    pub rotation: f32,
    pub color: u32,
    pub origin_x: f32,
    pub origin_y: f32,
    pub text: String,
    pub alignment: i32,
    pub character_spacing: f32,
    pub line_spacing: f32,
    pub frame_width: f32,
    pub frame_height: f32,
    pub wrap: bool,
}

impl GMElement for TextItemInstance {
    fn deserialize(reader: &mut DataReader) -> Result<Self> {
        let name: String = reader.read_gm_string()?;
        let x = reader.read_i32()?;
        let y = reader.read_i32()?;
        let font: GMRef<GMFont> = reader.read_resource_by_id()?;
        let scale_x = reader.read_f32()?;
        let scale_y = reader.read_f32()?;
        let rotation = reader.read_f32()?;
        let color = reader.read_u32()?;
        let origin_x = reader.read_f32()?;
        let origin_y = reader.read_f32()?;
        let text: String = reader.read_gm_string()?;
        let alignment = reader.read_i32()?;
        let character_spacing = reader.read_f32()?;
        let line_spacing = reader.read_f32()?;
        let frame_width = reader.read_f32()?;
        let frame_height = reader.read_f32()?;
        let wrap = reader.read_bool32()?;

        Ok(Self {
            name,
            x,
            y,
            font,
            scale_x,
            scale_y,
            rotation,
            color,
            origin_x,
            origin_y,
            text,
            alignment,
            character_spacing,
            line_spacing,
            frame_width,
            frame_height,
            wrap,
        })
    }

    fn serialize(&self, builder: &mut DataBuilder) -> Result<()> {
        builder.write_gm_string(&self.name);
        builder.write_i32(self.x);
        builder.write_i32(self.y);
        builder.write_resource_id(self.font);
        builder.write_f32(self.scale_x);
        builder.write_f32(self.scale_y);
        builder.write_f32(self.rotation);
        builder.write_u32(self.color);
        builder.write_f32(self.origin_x);
        builder.write_f32(self.origin_y);
        builder.write_gm_string(&self.text);
        builder.write_i32(self.alignment);
        builder.write_f32(self.character_spacing);
        builder.write_f32(self.line_spacing);
        builder.write_f32(self.frame_width);
        builder.write_f32(self.frame_height);
        builder.write_bool32(self.wrap);
        Ok(())
    }
}