Exemple #1
0
        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);
        }
Exemple #2
0
        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();
        }
Exemple #3
0
 public virtual Body GetBody(string name)
 {
     return(Bodies.ContainsKey(name) ? Bodies[name] : null);
 }
Exemple #4
0
    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;
            }
        }
    }