/// <summary> /// Add a newly created object to the scene. /// </summary> /// /// This method does not send updates to the client - callers need to handle this themselves. /// <param name="sceneObject"></param> /// <param name="attachToBackup"></param> /// <param name="pos">Position of the object</param> /// <param name="rot">Rotation of the object</param> /// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param> /// <returns></returns> public bool AddNewSceneObject( SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) { AddNewSceneObject(sceneObject, true, false); // we set it's position in world. sceneObject.AbsolutePosition = pos; if (sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim) { sceneObject.ClearPartAttachmentData(); } sceneObject.UpdateGroupRotationR(rot); //group.ApplyPhysics(m_physicalPrim); if (sceneObject.RootPart.PhysActor != null && sceneObject.RootPart.PhysActor.IsPhysical && vel != Vector3.Zero) { sceneObject.RootPart.ApplyImpulse((vel * sceneObject.GetMass()), false); sceneObject.Velocity = vel; } return true; }
/// <summary> /// Add a newly created object to the scene. /// </summary> /// /// This method does not send updates to the client - callers need to handle this themselves. /// Caller should also trigger EventManager.TriggerObjectAddedToScene /// <param name="sceneObject"></param> /// <param name="attachToBackup"></param> /// <param name="pos">Position of the object. If null then the position stored in the object is used.</param> /// <param name="rot">Rotation of the object. If null then the rotation stored in the object is used.</param> /// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param> /// <returns></returns> public bool AddNewSceneObject( SceneObjectGroup sceneObject, bool attachToBackup, Vector3? pos, Quaternion? rot, Vector3 vel) { AddNewSceneObject(sceneObject, attachToBackup, false); if (pos != null) sceneObject.AbsolutePosition = (Vector3)pos; if (sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim) { sceneObject.ClearPartAttachmentData(); } if (rot != null) sceneObject.UpdateGroupRotationR((Quaternion)rot); PhysicsActor pa = sceneObject.RootPart.PhysActor; if (pa != null && pa.IsPhysical && vel != Vector3.Zero) { sceneObject.RootPart.ApplyImpulse((vel * sceneObject.GetMass()), false); sceneObject.Velocity = vel; } return true; }
void DoCoverview(Scene scene) { // We're going to place objects in world displayed = slideCount - 1; current = slideCount - 1; for (int x=0;x<=(2*displayed);x++) { if (x< displayed) { position[x] = x; updatedPosition[x] = x; offset[x] = (x - (displayed + 10f)) * spacing; } if (x == displayed) { position[x] = x; updatedPosition[x] = x; offset[x] = 0.0f; } if (x > displayed) { offset[x] = (x - (displayed - 10f)) * spacing; } } //Place prims in the region for (int x=0; x<=displayed; x++) { Vector3 pos = new Vector3(rootPosition + offset[position[x]], yPosition, zPosition); SceneObjectGroup sog = new SceneObjectGroup(UUID.Zero, pos, PrimitiveBaseShape.CreateBox()); if (x==displayed) { sog.UpdateGroupRotationR(new Quaternion(0,0,1,1)); } sog.RootPart.Scale = size; prims.Add(sog); } // Now make them visible foreach (SceneObjectGroup sogr in prims) { scene.AddNewSceneObject(sogr, false); } }