public virtual bool AddBody(Body body, string name) { bool added = false; if (!Bodies.ContainsKey(name)) { Bodies.Add(name, body); //We can only ever have one primary body in an IPhysicsComponent. //Let's assume that if the new body coming in is Primary then the user //wants to replace the old primary body. if (primaryBody == null || ((FarseerUserData)body.UserData).Primary) { primaryBody = body; } added = true; } return(added); }
public override void Initialize() { Parent.OnMove += OnMove; physicsManager = GameServiceManager.GetService <IPhysicsManager>(); foreach (var body in Bodies.Values) { body.Position = ConvertUnits.ToSimUnits(Parent.Position + ((FarseerUserData)body.UserData).Offset) - ((FarseerUserData)body.UserData).TopLeftOffset; body.Enabled = true; } physicsManager.PhysicsWorld.Step(0.000001f); foreach (var joint in copyJoints) { var data = joint.Value.UserData as FarseerJointUserData; var bodyA = !string.IsNullOrWhiteSpace(data.BodyAName) && Bodies.ContainsKey(data.BodyAName) ? Bodies[data.BodyAName] : null; var bodyB = !string.IsNullOrWhiteSpace(data.BodyBName) && Bodies.ContainsKey(data.BodyBName) ? Bodies[data.BodyBName] : null; var newJoint = FarseerDeserialization.CopyJoint(joint.Value, bodyA, bodyB, physicsManager.PhysicsWorld); physicsManager.PhysicsWorld.AddJoint(newJoint); Joints.Add(joint.Key, newJoint); } copyJoints.Clear(); base.Initialize(); }
public virtual Body GetBody(string name) { return(Bodies.ContainsKey(name) ? Bodies[name] : null); }
void Update() { if (BodySourceManager == null) { return; } _bodyManager = BodySourceManager.GetComponent <BodySourceManager>(); if (_bodyManager == null) { return; } Kinect.Body[] data = _bodyManager.GetData(); if (data == null) { return; } List <ulong> trackedIds = new List <ulong>(); foreach (var body in data) { if (body == null) { continue; } if (body.IsTracked) { trackedIds.Add(body.TrackingId); break; } } List <ulong> knownIds = new List <ulong>(Bodies.Keys); // First delete untracked bodies foreach (ulong trackingId in knownIds) { if (!trackedIds.Contains(trackingId)) { Destroy(Bodies[trackingId]); Bodies.Remove(trackingId); } } foreach (var body in data) { if (body == null) { continue; } if (body.IsTracked) { if (!Bodies.ContainsKey(body.TrackingId)) { GameObject newBody = new GameObject(); KinectPlayer newPlayer = Instantiate(Resources.Load("BlockPlayer") as GameObject, new Vector3(0, 0, 0), Quaternion.identity).GetComponent <KinectPlayer>(); newPlayer.Kinect = this; if (players.Count == 0) { newPlayer.makeMainPlayer(true); } Bodies[body.TrackingId] = newPlayer.CreateBodyObject(body, newBody); newPlayer.WarpToLocation(new Vector3(0, 1.5f, 0)); players.Add(newPlayer); _bodyThread = new Thread(new ThreadStart(RefreshBody)); _bodyThread.Start(); } foreach (KinectPlayer player in players) { try { if (player.IsTracked()) { player.gameObject.SetActive(true); player.UpdateBodyObject(); player.AdjustBodyParts(); } else { player.gameObject.SetActive(false); } } catch (Exception e) { Debug.LogError("Error getting body"); Debug.LogError(e); } } break; } } }