当前位置: 首页>>代码示例>>C#>>正文


C# MapObject.UpdatePositionAndRotationByPhysics方法代码示例

本文整理汇总了C#中MapObject.UpdatePositionAndRotationByPhysics方法的典型用法代码示例。如果您正苦于以下问题:C# MapObject.UpdatePositionAndRotationByPhysics方法的具体用法?C# MapObject.UpdatePositionAndRotationByPhysics怎么用?C# MapObject.UpdatePositionAndRotationByPhysics使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在MapObject的用法示例。


在下文中一共展示了MapObject.UpdatePositionAndRotationByPhysics方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: ReceiveObject

        public void ReceiveObject(MapObject obj, Teleporter source)
        {
            if (!string.IsNullOrEmpty(Type.ReceiveParticleName))
                Map.Instance.CreateAutoDeleteParticleSystem(Type.ReceiveParticleName, Position);

            if (source == null)
            {
                float offset = obj.Position.Z - obj.PhysicsModel.GetGlobalBounds().Minimum.Z;
                obj.Position = Position + new Vec3(0, 0, offset);
                obj.Rotation = Rotation;
                obj.SetOldTransform(obj.Position, obj.Rotation, obj.Scale);
            }
            else
            {
                Quat destRotation = Rotation * Mat3.FromRotateByZ(new Degree(180).InRadians()).ToQuat();

                foreach (Body body in obj.PhysicsModel.Bodies)
                {
                    body.Rotation = body.Rotation * source.Rotation.GetInverse() * destRotation;
                    Vec3 localPosOffset = (body.Position - source.Position) * source.Rotation.GetInverse();
                    body.Position = Position + localPosOffset * destRotation;
                    body.OldPosition = body.Position;
                    body.OldRotation = body.Rotation;

                    body.LinearVelocity = body.LinearVelocity * source.Rotation.GetInverse() * destRotation;
                    body.AngularVelocity = body.AngularVelocity * source.Rotation.GetInverse() * destRotation;
                }

                obj.UpdatePositionAndRotationByPhysics(true);
                obj.SetOldTransform(obj.Position, obj.Rotation, obj.Scale);

                Unit unit = obj as Unit;
                if (unit != null)
                {
                    PlayerIntellect playerIntellect = unit.Intellect as PlayerIntellect;
                    if (playerIntellect != null)
                    {
                        Vec3 vec = playerIntellect.LookDirection.GetVector();
                        Vec3 v = vec * source.Rotation.GetInverse() * destRotation;
                        playerIntellect.LookDirection = SphereDir.FromVector(v);
                    }
                }
            }

            //add object to the list of processed objects. object can't activate teleportation.
            processedObjectsInActiveArea.AddWithCheckAlreadyContained(obj);

            //skip ticks to wait for update physics body of transfered object after teleportation.
            skipTicks += 2;
        }
开发者ID:AKNightHawk,项目名称:AssaultKnights2,代码行数:50,代码来源:Teleporter.cs


注:本文中的MapObject.UpdatePositionAndRotationByPhysics方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。