public static void AddEncounter(WorldObject wo) { Encounters.Add(wo); var objDesc = new ObjDesc(wo.SetupTableId, wo.ClothingBase ?? 0, (PaletteTemplate)(wo.PaletteTemplate ?? 0), (float)(wo.Shade ?? 0.0)); if (wo is Creature creature) { foreach (var equippedObject in creature.EquippedObjects.Values.OrderBy(i => (int)(i.ClothingPriority ?? 0))) { if ((equippedObject.CurrentWieldedLocation & EquipMask.Selectable) != 0) { continue; } objDesc.Add(equippedObject.ClothingBase ?? 0, (PaletteTemplate)(equippedObject.PaletteTemplate ?? 0), (float)(equippedObject.Shade ?? 0.0)); } } wo.PhysicsObj.UpdateObjDesc(objDesc); var r_PhysicsObj = new R_PhysicsObj(wo.PhysicsObj); Buffer.AddEncounter(r_PhysicsObj, objDesc); if (UpdateObjs == null) { UpdateObjs = new List <WorldObject>(); } UpdateObjs.Add(wo); }
public bool EnterPlayerMode() { Player = new Player(true); // location = current camera location var cameraPos = Camera.GetPosition(); if (cameraPos == null) { Console.WriteLine($"WorldViewer.EnterPlayerMode() - camera position null!"); return(false); } var success = Player.WorldObject.AddPhysicsObj(cameraPos); if (!success) { Console.WriteLine($"WorldViewer.EnterPlayerMode() - AddPhysicsObj({cameraPos}) failed"); return(false); } var r_PhysicsObj = new R_PhysicsObj(Player.PhysicsObj); Buffer.AddPlayer(r_PhysicsObj); Buffer.BuildTextureAtlases(Buffer.AnimatedTextureAtlasChains); Buffer.BuildBuffer(Buffer.RB_Animated); Camera.Locked = true; PlayerMode = true; return(true); }
public SetupInstance(R_PhysicsObj obj) { var setupID = obj.PhysicsObj.PartArray.Setup._dat.Id; if (setupID == 0 && obj.PhysicsObj.PartArray.Parts.Count > 0) { setupID = obj.PhysicsObj.PartArray.Parts[0].GfxObj.ID; } if (setupID == 0) { setupID = obj.PhysicsObj.ID; } Setup = SetupCache.Get(setupID); Position = obj.PhysicsObj.Position.Frame.Origin.ToXna(); Rotation = obj.PhysicsObj.Position.Frame.Orientation.ToXna(); Scale = obj.PhysicsObj.PartArray.Scale.ToXna(); BuildWorldTransform(); }
public void LoadModel(uint wcid) { Server.Initting = true; Buffer.ClearBuffer(); TextureCache.Init(); LScape.unload_landblocks_all(); Console.WriteLine($"Loading {wcid}"); GfxObjMode = false; var wo = WorldObjectFactory.CreateNewWorldObject(wcid); if (wo == null) { return; } wo.InitPhysicsObj(); var location = new Position(); location.ObjCellID = 0x00000001; location.Frame.Origin = new System.Numerics.Vector3(12, 12, 0); var success = wo.PhysicsObj.enter_world(location); if (!success || wo.PhysicsObj.CurCell == null) { wo.PhysicsObj.DestroyObject(); wo.PhysicsObj = null; Console.WriteLine($"WorldObjectViewer.LoadModel({wcid}).AddPhysicsObj({wo.Name}, {location}) - failed to spawn"); return; } Console.WriteLine($"Spawned {wcid} - {wo.Name} @ {location}"); var objDesc = new ObjDesc(wo.SetupTableId, wo.ClothingBase ?? 0, (PaletteTemplate)(wo.PaletteTemplate ?? 0), (float)(wo.Shade ?? 0.0)); if (wo is Creature creature) { objDesc.AddBaseModelData(wo); var equippedObjects = creature.EquippedObjects.Values.OrderBy(i => (int)(i.ClothingPriority ?? 0)).ToList(); foreach (var equippedObject in equippedObjects) { if ((equippedObject.CurrentWieldedLocation & EquipMask.Selectable) != 0) { continue; } objDesc.Add(equippedObject.ClothingBase ?? 0, (PaletteTemplate)(equippedObject.PaletteTemplate ?? 0), (float)(equippedObject.Shade ?? 0.0)); } } wo.PhysicsObj.UpdateObjDesc(objDesc); var r_PhysicsObj = new R_PhysicsObj(wo.PhysicsObj); Buffer.AddInstance(r_PhysicsObj, objDesc); if (!LoadedOnce) { //Camera.Position = Vector3.Zero; //Camera.Dir = Vector3.Normalize(new Vector3(1, 1, 0)); Camera.Position = new Vector3(11.782367f, 12.763985f, 1.6514041f); Camera.Dir = new Vector3(0.30761153f, -0.94673103f, 0.093334414f); Camera.Up = Vector3.UnitZ; Camera.CreateLookAt(); Camera.Speed = Camera.Model_Speed; } Buffer.BuildTextureAtlases(Buffer.InstanceTextureAtlasChains); Buffer.BuildBuffer(Buffer.RB_Instances); Server.InstancesLoaded = true; Server.Initting = false; LoadedOnce = true; }