コード例 #1
0
        private void SpawnProjectile()
        {
            Byt3.Engine.Physics.BEPUutilities.Vector3 v = Vector3.Zero;
            if (Grounded || !CameraRaycaster.ObjectUnderMouse(GameEngine.Instance.CurrentScene.Camera.LocalPosition,
                                                              out KeyValuePair <Collider, RayHit> hit))
            {
                Byt3.Engine.Physics.BEPUutilities.Vector3 vel =
                    new Vector3(-Vector4.UnitZ * nozzle.GetWorldTransform()) * BulletLaunchForce;
                v = vel;
            }
            else
            {
                Vector3 pos = hit.Value.Location;
                //pos.Y = looker.LocalPosition.Y;
                nozzle.LookAt(pos);
                Byt3.Engine.Physics.BEPUutilities.Vector3 vel =
                    new Vector3(-Vector4.UnitZ * nozzle.GetWorldTransform()) * BulletLaunchForce;
                v = vel;
            }

            Vector3    v1  = v;
            GameObject obj =
                new GameObject(nozzle.LocalPosition + (Byt3.Engine.Physics.BEPUutilities.Vector3)v1.Normalized(),
                               "BulletPlayer");

            obj.Rotation = nozzle.Rotation;
            obj.AddComponent(new LitMeshRendererComponent(bulletShader, bulletModel, bulletTexture, 1, false));
            obj.AddComponent(new DestroyTimer(5));
            obj.Scale = new Vector3(0.3f, 0.3f, 1);

            Collider coll = new Collider(new Box(Vector3.Zero, 0.3f, 0.3f, 1, BulletMass), bulletLayer);

            coll.PhysicsCollider.PositionUpdateMode = PositionUpdateMode.Continuous;
            if (!physicalBullets)
            {
                coll.IsTrigger = true;
            }

            obj.AddComponent(coll);
            coll.PhysicsCollider.ApplyLinearImpulse(ref v);
            Owner.Scene.Add(obj);
            //AudioSource.Clip = ShootSound;
            //AudioSource.Play();
            AudioSource.Clip = BulletsPerSecond < 20 ? ShootSound : ShootSound2;
            AudioSource.Play();
        }
コード例 #2
0
        protected override void Update(float deltaTime)
        {
            GameLogic();
            Vector3 vel = inputDir();

            if (vel != Vector3.Zero)
            {
                if (vel != Vector3.Zero)
                {
                    vel.Normalize();
                }

                if (UseGlobalForward)
                {
                    vel = new Vector3(new Vector4(vel, 0) * Owner.GetWorldTransform());
                }

                Vector3 vec = new Vector3(vel.X * deltaTime * MoveSpeed, vel.Y * deltaTime * JumpForce,
                                          vel.Z * deltaTime * MoveSpeed);


                Byt3.Engine.Physics.BEPUutilities.Vector3 v = new Byt3.Engine.Physics.BEPUutilities.Vector3(vec.X, vec.Y, vec.Z);
                Collider.PhysicsCollider.ApplyLinearImpulse(ref v);
            }

            if (Grounded)
            {
                CurrentGravity = 0;
            }
            else
            {
                CurrentGravity += GravityIncUngrounded * deltaTime;
            }


            Byt3.Engine.Physics.BEPUutilities.Vector3 grav = new Vector3(0, -CurrentGravity, 0);
            Collider.PhysicsCollider.ApplyLinearImpulse(ref grav);

            if (jump && Grounded)
            {
                Byt3.Engine.Physics.BEPUutilities.Vector3 jumpAcc = computeJumpAcc();
                Collider.PhysicsCollider.ApplyLinearImpulse(ref jumpAcc);

                AudioSource.Clip = JumpSound;
                AudioSource.Play();
            }

            if (Mouse.GetCursorState().LeftButton == ButtonState.Pressed)
            {
                time += deltaTime;
                if (time >= BulletThreshold)
                {
                    time = 0;
                    SpawnProjectile();
                }
            }
            else
            {
                {
                    time = 0;
                }
            }
        }