private void collideFireballAndPlayer(Fireball f, Player p, int delta) {
		double ballWidth,ballCenterX,shieldWidth,shieldCenterX;
		
		if(p.getCurrentFacing() == FACING.UP || p.getCurrentFacing() == FACING.DOWN) {
			// get fireball colbox width
			ballWidth = f.getCollisionRect().getWidth();
			// get the center of the fireball (use collision rect for this location cause image rotates)
			ballCenterX = f.getCollisionRect().getX() + ballWidth/2;
			// do the same for the player
			shieldWidth = Player.SIZE;
			shieldCenterX = p.getX() + shieldWidth/2;
		} else {
			// fireball hitting shield when facing left/right, so collision is perpendicular to a vertical plane,
			// so change the calculations
			ballWidth = f.getCollisionRect().getHeight();
			ballCenterX = f.getCollisionRect().getY() + ballWidth/2;
			shieldWidth = Player.SIZE;
			shieldCenterX = p.getY() + shieldWidth/2;
		}
		
		// fireball X and Y speeds
		double speedX;
		double speedY;
		if(p.getCurrentFacing() == FACING.UP || p.getCurrentFacing() == FACING.DOWN) {
			speedX = f.getVelVectorX();
			speedY = f.getVelVectorY();
		} else {
			speedX = f.getVelVectorY();
			speedY = f.getVelVectorX();
		}
		
		// pythagorean theorem to calculate overall fireball speed so this 
		// does not change. always positive too.
		double speedXY = Math.sqrt(speedX*speedX + speedY*speedY);
		
		// calculate the position of the fireball relative to the shield.
		// expressed as values between -1 and 1
		double posX = (ballCenterX - shieldCenterX) / (shieldWidth/2);
		
		// constant value for controlling the amount of influence the posX has
		// on the X speed. Should be between 0 and 1;
		final double influenceX = 0.5;
		
		// indicate vars
		System.out.println("SYSTEM: Collision detected. ||||||||||||||||||||||||||||||||||||||");
		System.out.println("SYSTEM: Current Fireball Coords: ("+f.getCollisionRect().getX()+","+f.getCollisionRect().getY()+")");
		System.out.println("SYSTEM: Current Shield Coords: ("+p.getX()+","+p.getY()+")");
		System.out.println("SYSTEM:     ]Fireball X-Speed: "+speedX);
		System.out.println("SYSTEM:     ]Fireball Y-Speed: "+speedY);
		System.out.println("SYSTEM:     ]FSpeed Magnitude: "+speedXY);
		System.out.println("SYSTEM:     ]        X-Offset: "+posX);
		System.out.println("SYSTEM: Recalculating Fireball Movement Vector...");
		
		// set the new X speed (x component of the velocity FVector)
		// based on the original speed/posx/influence, and the new X speed calculation
		speedX = speedXY*posX*influenceX;
		if(p.getCurrentFacing() == FACING.UP || p.getCurrentFacing() == FACING.DOWN)
			f.setVelVectorX(speedX);
		else
			f.setVelVectorY(speedX);
		
		// based on new X vector component, set the new Y vector component for speed,
		// making sure the overall speed (magnitude) does not change,
		// but also bouncing the fireball by changing this y vector component
		speedY = Math.sqrt(speedXY*speedXY - speedX*speedX) * (speedY>0? -1 : 1);
		if(p.getCurrentFacing() == FACING.UP || p.getCurrentFacing() == FACING.DOWN)
			f.setVelVectorY(speedY);
		else
			f.setVelVectorX(speedY);
		
		System.out.println("SYSTEM:     ]New Movement Vector--");
		System.out.println("SYSTEM:     ]Fireball X-Speed: "+speedX);
		System.out.println("SYSTEM:     ]Fireball Y-Speed: "+speedY);
		System.out.println("SYSTEM:     ]FSpeed Magnitude: "+speedXY);
		System.out.println("SYSTEM: End Collision Calculation. |||||||||||||||||||||||||||||||");
		
		fireball.update(delta);
		System.out.println("SYSTEM: Ending collision method with Fireball Rotation Angle: "+f.getImageRotationValue());
	}