public ItemType(WadMoveableId moveableId, TRVersion.Game gameVersion = TRVersion.Game.TR4) { IsStatic = false; MoveableId = moveableId; _gameVersion = gameVersion.Native(); StaticId = new WadStaticId(); }
public ItemType(WadStaticId staticId, TRVersion.Game gameVersion = TRVersion.Game.TR4) { IsStatic = true; MoveableId = new WadMoveableId(); _gameVersion = gameVersion.Native(); StaticId = staticId; }
public WadStatic WadTryGetStatic(WadStaticId id) { WadStatic result; foreach (ReferencedWad wad in Wads) { if (wad.Wad != null && wad.Wad.Statics.TryGetValue(id, out result)) { return(result); } } return(null); }
public AutoStaticMeshMergeEntry GetStaticMergeEntry(WadStaticId staticMeshId) => AutoStaticMeshMerges.FirstOrDefault(e => e.meshId == staticMeshId.TypeId);
public ItemType(WadStaticId staticId, LevelSettings levelSettings) // wad can be null : this(staticId, levelSettings?.GameVersion ?? TRVersion.Game.TR4) { }
internal static WadStatic ConvertTr4StaticMeshToWadStatic(Wad2 wad, Tr4Wad oldWad, int staticIndex, /*List<WadMesh> meshes*/ Dictionary <int, WadTexture> textures) { var oldStaticMesh = oldWad.Statics[staticIndex]; var newId = new WadStaticId(oldStaticMesh.ObjectId); // A workaround to find out duplicated item IDs produced by StrPix unpatched for v130 wads. // In such case, a legacy name is used to guess real item ID, if this fails - broken item is filtered out. if (wad.Statics.ContainsKey(newId)) { var message = "Duplicated static ID " + oldStaticMesh.ObjectId + " was identified while loading " + oldWad.BaseName + ". "; if (oldWad.LegacyNames.Count - oldWad.Moveables.Count < staticIndex) { logger.Warn(message + "Can't restore real ID by name, name table is too short. Ignoring static."); return(null); } bool isMoveable; var guessedId = TrCatalog.GetItemIndex(TRVersion.Game.TR4, oldWad.LegacyNames[oldWad.Moveables.Count + staticIndex], out isMoveable); if (!isMoveable && guessedId.HasValue) { newId = new WadStaticId(guessedId.Value); if (wad.Statics.ContainsKey(newId)) { logger.Warn(message + "Can't restore real ID by name, name table is inconsistent. Ignoring static."); return(null); } else { logger.Warn(message + "Successfully restored real ID by name."); } } else { logger.Warn(message + "Can't find provided name in catalog. Ignoring static."); return(null); } } var staticMesh = new WadStatic(newId); //staticMesh.Name = TrCatalog.GetStaticName(WadTombRaiderVersion.TR4, oldStaticMesh.ObjectId); // First setup collisional and visibility bounding boxes staticMesh.CollisionBox = new BoundingBox(new Vector3(oldStaticMesh.CollisionX1, -oldStaticMesh.CollisionY1, oldStaticMesh.CollisionZ1), new Vector3(oldStaticMesh.CollisionX2, -oldStaticMesh.CollisionY2, oldStaticMesh.CollisionZ2)); staticMesh.VisibilityBox = new BoundingBox(new Vector3(oldStaticMesh.VisibilityX1, -oldStaticMesh.VisibilityY1, oldStaticMesh.VisibilityZ1), new Vector3(oldStaticMesh.VisibilityX2, -oldStaticMesh.VisibilityY2, oldStaticMesh.VisibilityZ2)); staticMesh.Mesh = ConvertTr4MeshToWadMesh(wad, oldWad, textures, oldWad.Meshes[(int)oldWad.RealPointers[oldStaticMesh.PointersIndex]], (int)oldStaticMesh.ObjectId); wad.Statics.Add(staticMesh.Id, staticMesh); return(staticMesh); }