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(); }
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; } } }