Beispiel #1
0
        public void createGameEntities()
        {
            ulong              id        = ComponentManager.GetNewId();
            ChopperComponent   chopper   = new ChopperComponent();
            TransformComponent transform = new TransformComponent(new Vector3(200.0f, 300.0f, 100.0f), 0f, 10f);

            Model           model  = Content.Load <Model>(@"Models/Chopper");
            CameraComponent camera = new CameraComponent(graphics.GraphicsDevice, cameraPosition, Vector3.Zero, Vector3.Up, id);

            ComponentManager.StoreComponent(id, camera);
            ComponentManager.StoreComponent(id, new ModelComponent(model, CHOPPER_SCALE, CHOPPER_TRANSLATION,
                                                                   0f, 0f, MathHelper.PiOver2, true)
            {
                world = Matrix.Identity
            });
            ComponentManager.StoreComponent(id, transform);
            ComponentManager.StoreComponent(id, chopper);
        }
Beispiel #2
0
        public void Update()
        {
            List <ulong> models = ComponentManager.GetAllEntitiesWithComp <ModelComponent>();

            foreach (ulong mC in models)
            {
                if (!ComponentManager.HasComponent <ChopperComponent>(mC))
                {
                    continue;
                }
                ModelComponent   m       = ComponentManager.GetComponent <ModelComponent>(mC);
                ChopperComponent chopper = ComponentManager.GetComponent <ChopperComponent>(mC);

                Quaternion qX, qY;
                //qy = Quaternion.CreateFromRotationMatrix(Matrix.CreateRotationY(chopper.rotorAngle));
                //qx = Quaternion.CreateFromRotationMatrix(Matrix.CreateRotationX(chopper.rotorAngle));

                qY = m.model.Meshes[0].ParentBone.Transform.Rotation * Quaternion.CreateFromRotationMatrix(Matrix.CreateRotationY(chopper.rotorAngle));
                qX = m.model.Meshes[2].ParentBone.Transform.Rotation * Quaternion.CreateFromRotationMatrix(Matrix.CreateRotationX(chopper.rotorAngle));

                qY.Normalize();
                qX.Normalize();

                m.modelMeshWorldMatrices[0] = Matrix.CreateTranslation(m.modelMeshWorldMatrices[0].Translation)
                                              //* Matrix.CreateRotationY(chopper.rotorAngle)
                                              * Matrix.CreateFromQuaternion(qY)
                                              * Matrix.CreateTranslation(-m.modelMeshWorldMatrices[0].Translation);

                m.modelMeshWorldMatrices[1] = Matrix.CreateTranslation(Vector3.Zero);

                m.modelMeshWorldMatrices[2] = Matrix.CreateTranslation(m.modelMeshWorldMatrices[2].Translation)
                                              //* Matrix.CreateRotationX(chopper.rotorAngle)
                                              * Matrix.CreateFromQuaternion(qX)
                                              * Matrix.CreateTranslation(-m.modelMeshWorldMatrices[2].Translation);
                chopper.rotorAngle += .003f;
            }
        }