314 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			314 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace FML\Stylesheet;
 | |
| 
 | |
| 	// Warning: The mood class isn't fully supported yet!
 | |
| 	// Missing attributes: LDir1..
 | |
| 
 | |
| /**
 | |
|  * Class representing a Stylesheets Mood
 | |
|  *
 | |
|  * @author    steeffeen <mail@steeffeen.com>
 | |
|  * @copyright FancyManiaLinks Copyright © 2014 Steffen Schröder
 | |
|  * @license   http://www.gnu.org/licenses/ GNU General Public License, Version 3
 | |
|  */
 | |
| class Mood {
 | |
| 	/*
 | |
| 	 * Protected Properties
 | |
| 	 */
 | |
| 	protected $tagName = 'mood';
 | |
| 	protected $lAmbient_LinearRgb = '';
 | |
| 	protected $cloudsRgbMinLinear = '';
 | |
| 	protected $cloudsRgbMaxLinear = '';
 | |
| 	protected $lDir0_LinearRgb = '';
 | |
| 	protected $lDir0_Intens = 1.;
 | |
| 	protected $lDir0_DirPhi = 0.;
 | |
| 	protected $lDir0_DirTheta = 0.;
 | |
| 	protected $lBall_LinearRgb = '';
 | |
| 	protected $lBall_Intensity = 1.;
 | |
| 	protected $lBall_Radius = 0.;
 | |
| 	protected $fogColorSrgb = '';
 | |
| 	protected $selfIllumColor = '';
 | |
| 	protected $skyGradientV_Scale = 1.;
 | |
| 	protected $skyGradientKeys = array();
 | |
| 
 | |
| 	/**
 | |
| 	 * Create a new Mood Object
 | |
| 	 *
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public static function create() {
 | |
| 		$mood = new Mood();
 | |
| 		return $mood;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Construct a new Mood Object
 | |
| 	 */
 | |
| 	public function __construct() {
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Ambient Color in which the Elements reflect the Light
 | |
| 	 *
 | |
| 	 * @param float $red   Red Color Value
 | |
| 	 * @param float $green Green Color Value
 | |
| 	 * @param float $blue  Blue Color Value
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setLightAmbientColor($red, $green, $blue) {
 | |
| 		$red                      = (float)$red;
 | |
| 		$green                    = (float)$green;
 | |
| 		$blue                     = (float)$blue;
 | |
| 		$this->lAmbient_LinearRgb = "{$red} {$green} {$blue}";
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Minimum Value for the Background Color Range
 | |
| 	 *
 | |
| 	 * @param float $red   Red Color Value
 | |
| 	 * @param float $green Green Color Value
 | |
| 	 * @param float $blue  Blue Color Value
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setCloudsColorMin($red, $green, $blue) {
 | |
| 		$red                      = (float)$red;
 | |
| 		$green                    = (float)$green;
 | |
| 		$blue                     = (float)$blue;
 | |
| 		$this->cloudsRgbMinLinear = "{$red} {$green} {$blue}";
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Maximum Value for the Background Color Range
 | |
| 	 *
 | |
| 	 * @param float $red   Red Color Value
 | |
| 	 * @param float $green Green Color Value
 | |
| 	 * @param float $blue  Blue Color Value
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setCloudsColorMax($red, $green, $blue) {
 | |
| 		$red                      = (float)$red;
 | |
| 		$green                    = (float)$green;
 | |
| 		$blue                     = (float)$blue;
 | |
| 		$this->cloudsRgbMaxLinear = "{$red} {$green} {$blue}";
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set RGB Color of Light Source 0
 | |
| 	 *
 | |
| 	 * @param float $red   Red Color Value
 | |
| 	 * @param float $green Green Color Value
 | |
| 	 * @param float $blue  Blue Color Value
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setLight0Color($red, $green, $blue) {
 | |
| 		$red                   = (float)$red;
 | |
| 		$green                 = (float)$green;
 | |
| 		$blue                  = (float)$blue;
 | |
| 		$this->lDir0_LinearRgb = "{$red} {$green} {$blue}";
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Intensity of Light Source 0
 | |
| 	 *
 | |
| 	 * @param float $intensity Light Intensity
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setLight0Intensity($intensity) {
 | |
| 		$this->lDir0_Intens = (float)$intensity;
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Phi-Angle of Light Source 0
 | |
| 	 *
 | |
| 	 * @param float $phiAngle Phi-Angle
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setLight0PhiAngle($phiAngle) {
 | |
| 		$this->lDir0_DirPhi = (float)$phiAngle;
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Theta-Angle of Light Source 0
 | |
| 	 *
 | |
| 	 * @param float $thetaAngle Theta-Angle
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setLight0ThetaAngle($thetaAngle) {
 | |
| 		$this->lDir0_DirTheta = (float)$thetaAngle;
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Light Ball Color
 | |
| 	 *
 | |
| 	 * @param float $red   Red Color Value
 | |
| 	 * @param float $green Green Color Value
 | |
| 	 * @param float $blue  Blue Color Value
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setLightBallColor($red, $green, $blue) {
 | |
| 		$red                   = (float)$red;
 | |
| 		$green                 = (float)$green;
 | |
| 		$blue                  = (float)$blue;
 | |
| 		$this->lBall_LinearRgb = "{$red} {$green} {$blue}";
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Light Ball Intensity
 | |
| 	 *
 | |
| 	 * @param float $intensity Light Ball Intensity
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setLightBallIntensity($intensity) {
 | |
| 		$this->lBall_Intensity = (float)$intensity;
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Light Ball Radius
 | |
| 	 *
 | |
| 	 * @param float $radius Light Ball Radius
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setLightBallRadius($radius) {
 | |
| 		$this->lBall_Radius = (float)$radius;
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Fog Color
 | |
| 	 *
 | |
| 	 * @param float $red   Red Color Value
 | |
| 	 * @param float $green Green Color Value
 | |
| 	 * @param float $blue  Blue Color Value
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setFogColor($red, $green, $blue) {
 | |
| 		$red                = (float)$red;
 | |
| 		$green              = (float)$green;
 | |
| 		$blue               = (float)$blue;
 | |
| 		$this->fogColorSrgb = "{$red} {$green} {$blue}";
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Self Illumination Color
 | |
| 	 *
 | |
| 	 * @param float $red   Red Color Value
 | |
| 	 * @param float $green Green Color Value
 | |
| 	 * @param float $blue  Blue Color Value
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setSelfIllumColor($red, $green, $blue) {
 | |
| 		$red                  = (float)$red;
 | |
| 		$green                = (float)$green;
 | |
| 		$blue                 = (float)$blue;
 | |
| 		$this->selfIllumColor = "{$red} {$green} {$blue}";
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set Sky Gradient Scale
 | |
| 	 *
 | |
| 	 * @param float $scale Gradient Scale
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function setSkyGradientScale($scale) {
 | |
| 		$this->skyGradientV_Scale = (float)$scale;
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Add a Key for the SkyGradient
 | |
| 	 *
 | |
| 	 * @param float  $x     Scale Value
 | |
| 	 * @param string $color Gradient Color
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function addSkyGradientKey($x, $color) {
 | |
| 		$x           = (float)$x;
 | |
| 		$color       = (string)$color;
 | |
| 		$gradientKey = array('x' => $x, 'color' => $color);
 | |
| 		array_push($this->skyGradientKeys, $gradientKey);
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Remove all SkyGradient Keys
 | |
| 	 *
 | |
| 	 * @return \FML\Stylesheet\Mood
 | |
| 	 */
 | |
| 	public function removeSkyGradientKeys() {
 | |
| 		$this->skyGradientKeys = array();
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Render the Mood XML Element
 | |
| 	 *
 | |
| 	 * @param \DOMDocument $domDocument DomDocument for which the Mood XML Element should be rendered
 | |
| 	 * @return \DOMElement
 | |
| 	 */
 | |
| 	public function render(\DOMDocument $domDocument) {
 | |
| 		$moodXml = $domDocument->createElement($this->tagName);
 | |
| 		if ($this->lAmbient_LinearRgb) {
 | |
| 			$moodXml->setAttribute('LAmbient_LinearRgb', $this->lAmbient_LinearRgb);
 | |
| 		}
 | |
| 		if ($this->cloudsRgbMinLinear) {
 | |
| 			$moodXml->setAttribute('CloudsRgbMinLinear', $this->cloudsRgbMinLinear);
 | |
| 		}
 | |
| 		if ($this->cloudsRgbMaxLinear) {
 | |
| 			$moodXml->setAttribute('CloudsRgbMaxLinear', $this->cloudsRgbMaxLinear);
 | |
| 		}
 | |
| 		if ($this->lDir0_LinearRgb) {
 | |
| 			$moodXml->setAttribute('LDir0_LinearRgb', $this->lDir0_LinearRgb);
 | |
| 		}
 | |
| 		if ($this->lDir0_Intens) {
 | |
| 			$moodXml->setAttribute('LDir0_Intens', $this->lDir0_Intens);
 | |
| 		}
 | |
| 		if ($this->lDir0_DirPhi) {
 | |
| 			$moodXml->setAttribute('LDir0_DirPhi', $this->lDir0_DirPhi);
 | |
| 		}
 | |
| 		if ($this->lDir0_DirTheta) {
 | |
| 			$moodXml->setAttribute('LDir0_DirTheta', $this->lDir0_DirTheta);
 | |
| 		}
 | |
| 		if ($this->lBall_LinearRgb) {
 | |
| 			$moodXml->setAttribute('LBall_LinearRgb', $this->lBall_LinearRgb);
 | |
| 		}
 | |
| 		if ($this->lBall_Intensity) {
 | |
| 			$moodXml->setAttribute('LBall_Intens', $this->lBall_Intensity);
 | |
| 		}
 | |
| 		if ($this->lBall_Radius) {
 | |
| 			$moodXml->setAttribute('LBall_Radius', $this->lBall_Radius);
 | |
| 		}
 | |
| 		if ($this->fogColorSrgb) {
 | |
| 			$moodXml->setAttribute('FogColorSrgb', $this->fogColorSrgb);
 | |
| 		}
 | |
| 		if ($this->selfIllumColor) {
 | |
| 			$moodXml->setAttribute('SelfIllumColor', $this->selfIllumColor);
 | |
| 		}
 | |
| 		if ($this->skyGradientV_Scale) {
 | |
| 			$moodXml->setAttribute('SkyGradientV_Scale', $this->skyGradientV_Scale);
 | |
| 		}
 | |
| 		if ($this->skyGradientKeys) {
 | |
| 			$skyGradientXml = $domDocument->createElement('skygradient');
 | |
| 			$moodXml->appendChild($skyGradientXml);
 | |
| 			foreach ($this->skyGradientKeys as $gradientKey) {
 | |
| 				$keyXml = $domDocument->createElement('key');
 | |
| 				$skyGradientXml->appendChild($keyXml);
 | |
| 				$keyXml->setAttribute('x', $gradientKey['x']);
 | |
| 				$keyXml->setAttribute('color', $gradientKey['color']);
 | |
| 			}
 | |
| 		}
 | |
| 		return $moodXml;
 | |
| 	}
 | |
| }
 |