| 143 | for (field, _) in data.fields.iter() { |
| 144 | let raw = field.as_ref(); |
| 145 | if let Some(detail) = perro_scene::water_body_removed_field(raw) { |
| 146 | report.error(format!( |
| 147 | "{}: `{node_name}` {:?} field `{raw}`: {detail}", |
| 148 | file.display(), |
| 149 | data.node_type |
| 150 | )); |
| 151 | } |
| 152 | } |
| 153 | } |
| 154 | if let Some(base) = data.base.as_ref() { |
| 155 | let base = match base { |
| 156 | perro_scene::SceneNodeDataBase::Borrowed(data) => data, |
| 157 | perro_scene::SceneNodeDataBase::Owned(data) => data.as_ref(), |
| 158 | }; |
| 159 | validate_removed_node_fields(file, node_name, base, report); |
| 160 | } |
| 161 | } |
| 162 | |
| 163 | // Game `.wgsl` files only become full modules once the engine wraps a prelude |
| 164 | // and entry points around them, so composing here is the only way to catch a |