Example #1
0
        public void OnAsyncLoad(WmoRoot root)
        {
            var indices  = new List <ushort>();
            var vertices = new List <WmoVertex>();

            Data = root;

            var groups = root.Groups.Select(@group => new WmoGroupRender(@group, this)).ToList();

            Groups       = groups.AsReadOnly();
            mBoundingBox = Data.BoundingBox;

            foreach (var group in Groups)
            {
                group.BaseIndex  = indices.Count;
                group.BaseVertex = vertices.Count;
                indices.AddRange(group.Data.Indices);
                vertices.AddRange(group.Data.Vertices);
            }

            mVertices = vertices.ToArray();
            mIndices  = indices.Select(i => (uint)i).ToArray();

            mAsyncLoaded = true;
        }
Example #2
0
        public WmoInstance(int uuid, Vector3 position, Vector3 rotation, WmoRootRender model)
        {
            ReferenceCount = 1;
            Uuid           = uuid;
            BoundingBox    = model.BoundingBox;

            mPosition = position;
            mRotation = rotation;
            mModel    = model;

            mInstanceMatrix = Matrix.RotationYawPitchRoll(MathUtil.DegreesToRadians(rotation.Y),
                                                          MathUtil.DegreesToRadians(rotation.X), MathUtil.DegreesToRadians(rotation.Z)) * Matrix.Translation(position);

            mRenderer = new WeakReference <WmoRootRender>(model);

            InstanceCorners = model.BoundingBox.GetCorners();
            Vector3.TransformCoordinate(InstanceCorners, ref mInstanceMatrix, InstanceCorners);

            BoundingBox = BoundingBox.Transform(ref mInstanceMatrix);
            GroupBoxes  = new BoundingBox[model.Groups.Count];
            for (var i = 0; i < GroupBoxes.Length; ++i)
            {
                var group = model.Groups[i];
                GroupBoxes[i] = group.BoundingBox.Transform(ref mInstanceMatrix);
            }
            Matrix.Invert(ref mInstanceMatrix, out mInverseInstanceMatrix);

            mInstanceMatrix = Matrix.Transpose(mInstanceMatrix);
            ModelRoot       = model.Data;
        }
Example #3
0
        public void SetPosition(Vector3 position)
        {
            mPosition = position;

            mInstanceMatrix = Matrix.RotationYawPitchRoll(MathUtil.DegreesToRadians(mRotation.Y),
                                                          MathUtil.DegreesToRadians(mRotation.X), MathUtil.DegreesToRadians(mRotation.Z));

            mInstanceMatrix *= Matrix.Translation(mPosition);

            Matrix.Invert(ref mInstanceMatrix, out mInverseInstanceMatrix);

            BoundingBox = mModel.BoundingBox.Transform(ref mInstanceMatrix);

            GroupBoxes = new BoundingBox[mModel.Groups.Count];
            for (var i = 0; i < GroupBoxes.Length; ++i)
            {
                var group = mModel.Groups[i];
                GroupBoxes[i] = group.BoundingBox.Transform(ref mInstanceMatrix);
            }

            InstanceCorners = mModel.BoundingBox.GetCorners();
            Vector3.TransformCoordinate(InstanceCorners, ref mInstanceMatrix, InstanceCorners);
            mInstanceMatrix = Matrix.Transpose(mInstanceMatrix);
            ModelRoot       = mModel.Data;
            UpdateModelNameplate();
        }
Example #4
0
        public void UpdatePosition(Vector3 position)
        {
            mPosition += position;

            mInstanceMatrix = Matrix.RotationYawPitchRoll(MathUtil.DegreesToRadians(mRotation.Y),
                                                          MathUtil.DegreesToRadians(mRotation.X), MathUtil.DegreesToRadians(mRotation.Z));
            //mRenderer = new WeakReference<WmoRootRender>(mModel);

            mInstanceMatrix *= Matrix.Translation(mPosition);

            Matrix.Invert(ref mInstanceMatrix, out mInverseInstanceMatrix);

            BoundingBox = mModel.BoundingBox.Transform(ref mInstanceMatrix); //here is the problem, after this line the bBox is f****d up

            GroupBoxes = new BoundingBox[mModel.Groups.Count];
            for (var i = 0; i < GroupBoxes.Length; ++i)
            {
                var group = mModel.Groups[i];
                GroupBoxes[i] = group.BoundingBox.Transform(ref mInstanceMatrix);
            }

            InstanceCorners = mModel.BoundingBox.GetCorners();
            Vector3.TransformCoordinate(InstanceCorners, ref mInstanceMatrix, InstanceCorners);
            mInstanceMatrix = Matrix.Transpose(mInstanceMatrix);
            ModelRoot       = mModel.Data;
            UpdateModelNameplate();
        }
Example #5
0
        public void Rotate(float x, float y, float z)
        {
            mRotation.X += x;
            mRotation.Y += y;
            mRotation.Z += z;

            mInstanceMatrix = Matrix.RotationYawPitchRoll(MathUtil.DegreesToRadians(mRotation.Y),
                                                          MathUtil.DegreesToRadians(mRotation.X), MathUtil.DegreesToRadians(mRotation.Z));

            mInstanceMatrix *= Matrix.Translation(mPosition);

            //mRenderer = new WeakReference<WmoRootRender>(mModel);


            Matrix.Invert(ref mInstanceMatrix, out mInverseInstanceMatrix);

            BoundingBox = mModel.BoundingBox.Transform(ref mInstanceMatrix);
            GroupBoxes  = new BoundingBox[mModel.Groups.Count];
            for (var i = 0; i < GroupBoxes.Length; ++i)
            {
                var group = mModel.Groups[i];
                GroupBoxes[i] = group.BoundingBox.Transform(ref mInstanceMatrix);
            }

            InstanceCorners = mModel.BoundingBox.GetCorners();
            Vector3.TransformCoordinate(InstanceCorners, ref mInstanceMatrix, InstanceCorners);
            mInstanceMatrix = Matrix.Transpose(mInstanceMatrix);
            ModelRoot       = mModel.Data;
            UpdateModelNameplate();
        }
Example #6
0
        private void Dispose(bool disposing)
        {
            DestroyModelNameplate();

            ModelRoot = null;
            mRenderer = null;
        }
Example #7
0
 public WmoMaterial(WmoRoot root, int shader, int texture1, int texture2, int texture3, int blendMode, uint flags, uint materialFlags)
 {
     Textures = new Graphics.Texture[0];
     MaterialFlags = materialFlags;
     mTexture1 = texture1;
     mTexture2 = texture2;
     mTexture3 = texture3;
     ShaderType = shader;
     BlendMode = blendMode;
     Flags1 = flags;
     LoadTextures(root);
 }
Example #8
0
 public WmoMaterial(WmoRoot root, int shader, int texture1, int texture2, int texture3, int blendMode, uint flags, uint materialFlags)
 {
     Textures      = new Graphics.Texture[0];
     MaterialFlags = materialFlags;
     mTexture1     = texture1;
     mTexture2     = texture2;
     mTexture3     = texture3;
     ShaderType    = shader;
     BlendMode     = blendMode;
     Flags1        = flags;
     LoadTextures(root);
 }
Example #9
0
        private void LoadTextures(WmoRoot root)
        {
            switch (ShaderType)
            {
                case 11:
                case 12:
                case 7:
                    Textures = new[]
                    {
                        root.GetTexture(mTexture1),
                        root.GetTexture(mTexture2),
                        root.GetTexture(mTexture3)
                    };
                    break;

                case 5:
                case 6:
                case 8:
                case 9:
                case 13:
                case 15:
                case 3:
                    Textures = new[]
                    {
                        root.GetTexture(mTexture1),
                        root.GetTexture(mTexture2),
                    };
                    break;

                default:
                    Textures = new[]
                    {
                        root.GetTexture(mTexture1),
                    };
                    break;
            }
        }
Example #10
0
        private void LoadTextures(WmoRoot root)
        {
            switch (ShaderType)
            {
            case 11:
            case 12:
            case 7:
                Textures = new[]
                {
                    root.GetTexture(mTexture1),
                    root.GetTexture(mTexture2),
                    root.GetTexture(mTexture3)
                };
                break;

            case 5:
            case 6:
            case 8:
            case 9:
            case 13:
            case 15:
            case 3:
                Textures = new[]
                {
                    root.GetTexture(mTexture1),
                    root.GetTexture(mTexture2),
                };
                break;

            default:
                Textures = new[]
                {
                    root.GetTexture(mTexture1),
                };
                break;
            }
        }