MFP adding Swimming, help!

General support.
Post Reply
User avatar
fieldofbattle
Member
Member
Posts: 63
Joined: Fri Sep 25, 2015 8:47 pm

Hi, I'm trying to add swimming, added code and tested but I can't move when in water..
No console message about error.
Here's the code that I've added.

Code: Select all

	// WATER
	public bool underWater = false;
	public bool swimming = false;
	private float swimAccel;
	private float underWaterTimer = 0.0f;
	private float waterLevel;
	private float underwaterLevel;
	public AudioSource aSource;
	public AudioSource waterSource;
	public AudioClip enterPool;
	public AudioClip enterPoolSplash;
	public AudioClip inhale;


	public GameObject waterSplash;
	public ParticleEmitter waterFoam;
	private ParticleEmitter emiter;
Added this code on void Update

Code: Select all

		if (swimming)
		{
			this.m_HPoint = myTransform.position.y;
			run = false;
			fallDistance = 0.0f;
			this.grounded = false;
		}
        else
        {
            float inputX = ControlFreak2.CF2Input.GetAxis("Horizontal");
            float inputY = ControlFreak2.CF2Input.GetAxis("Vertical");

            float inputModifyFactor = (inputX != 0.0f && inputY != 0.0f) ? .7071f : 1.0f;

			if (swimming)
			{
				if (swimAccel > 0.0f)
					swimAccel -= Time.deltaTime * 4.0f;

				if (Input.GetKey(RunKey))
				{
					Vector3 swimDir = cameraHolder.transform.TransformDirection(Vector3.forward);

					if (transform.position.y >= waterLevel && swimDir.y > 0.0f)
						swimDir.y = 0.0f;

					if (swimAccel <= 1.0f)
					{
						swimAccel = 6.0f;
					}

					if (swimAccel > 1.0f)
						moveDirection = swimDir * swimAccel;

				}
				else
				{
					moveDirection.x = inputX * 2.0f;
					moveDirection.z = inputY * 2.0f;
					moveDirection = myTransform.TransformDirection(moveDirection);
				}

				if (underWater)
				{
					underWaterTimer += Time.deltaTime;

					if (underWaterTimer > 15.0f)
					{
						//bl_PlayerDamageManager.(10);
						underWaterTimer = 12.0f;
					}
				}
			}
And added this code in void lateupdate

Code: Select all

		if (swimming)
		{
			moveDirection.y = 0.5f + (underwaterLevel - transform.position.y);

			//if(transform.position.y > waterLevel && !grounded)
			//	transform.position.y = waterLevel;

			if (emiter)
				emiter.emit = !underWater;


			if (transform.position.y > underwaterLevel)
			{

				if (underWaterTimer > 5.0f)
				{
					GetComponent<AudioSource>().clip = inhale;
					GetComponent<AudioSource>().Play();
				}
				underWater = false;
				underWaterTimer = 0.0f;
				aSource.Stop();
			}

			if (transform.position.y > waterLevel && grounded)
			{
				swimming = false;
				if (emiter)
				{
					emiter.emit = false;
					emiter.transform.parent = null;
				}
				state = 0;
			}
		}
And this code

Code: Select all

	void PlayerInWater(float s)
	{
		waterLevel = s + 0.9f;
		underwaterLevel = s + 0.4f;

		if (GetComponent<AudioSource>().isPlaying)
			GetComponent<AudioSource>().Stop();

		if (!aSource.isPlaying)
			aSource.Play();


		if (!swimming)
		{

			if (grounded)
			{
				Instantiate(waterSplash, transform.position + new Vector3(0, -0.5f, 0), transform.rotation);
				waterSource.PlayOneShot(enterPool, 1.0f);
			}
			else
			{
				Instantiate(waterSplash, transform.position + new Vector3(0, 0.5f, 0.2f), transform.rotation);
				Instantiate(waterSplash, transform.position, transform.rotation);
				Instantiate(waterSplash, transform.position + new Vector3(0, -0.5f, 0.5f), transform.rotation);
				waterSource.PlayOneShot(enterPoolSplash, 1.0f);
			}

			emiter = Instantiate(waterFoam, transform.position + new Vector3(0, -0.7f, 0), transform.rotation) as ParticleEmitter;
			emiter.transform.parent = this.transform;
		}

		underWater = true;
		swimming = true;
	}
Please help me!
Post Reply