<?php
/*
 * Created on 07.03.2009
 *
 * @copyright (c) 2009 animegame.eu
 * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public Licence
 *
 */

if (!function_exists('getVariableName')) {
	function getVariableName($attribute, $pos) {
		switch($attribute) {
			case 's_hp_cur':
			case 'e_hp_cur':
				return 'k_hp';
			case 's_hp_max':
				if($pos == 1) {
					return 'k_hp1';
				} else {
					return 'k_hp2';
				}
			case 'e_hp_max':
				if($pos == 1) {
					return 'k_hp2';
				} else {
					return 'k_hp1';
				}
			case 's_mp_cur':
			case 'e_mp_cur':
				return 'k_mp';
			case 's_mp_max':
				if($pos == 1) {
					return 'k_mp1';
				} else {
					return 'k_mp2';
				}
			case 'mp_max':
				if($pos == 1) {
					return 'k_mp2';
				} else {
					return 'k_mp1';
				}
			case 's_str':
			case 'e_str':
				return 'k_starke';
			case 's_def':
			case 'e_def':
				return 'k_ver';
			case 's_spd':
			case 'e_spd':
				return 'k_speed';
			case 'e_heal':
			case 's_heal':
				return 'tmp_hp';
			default:
				return '';
		}
	}
}

if (!function_exists('getCharVariable')) {
	function getCharVariable($attribute, $pos) {
		switch ($attribute) {
			case 's_hp_max':
			case 'e_hp_max':
			case 's_mp_max':
			case 'e_mp_max':
				return 1;
			default:
				if($attribute[0] == 's') {
					return $pos - 1;
				} else {
					return 2 - $pos;
				}
		}
	}
}

if (!function_exists('getCalculatedValue')) {
	function getCalculatedValue($schaden, $wert, $attWert) {
		if($schaden == '%') {
			return ($attWert * $wert) / 100;
		} else {
			return $wert;
		}
	}
}

if (!function_exists('processStatChanges')) {
	function processStatChanges(&$statChanges, $charPos) {
		foreach ($statChanges as $statKey => &$attacke) {
			//echo '<br>attackenstats: '.count($attacke).'<br>';
			$statsCounter = 0;
			foreach ($attacke as $attKey => &$stat) {
				if(is_array($stat)) {
					echo '<br>'.print_r($stat);
					//echo '<br>dauer: '.$stat['dauer'].'/'.$stat['maxdauer'];
					//echo '<br>wert: '.$stat['dauer'];
					//echo '<br>operator: ';
					//echo '<br>wert: '.$stat['wert'];
					//echo '<br>variabel-index: '.getCharVariable($stat['attribut'], $charPos);
					//echo '<br>attribut: '.getVariableName($stat['attribut'], $charPos).' ('.$stat['attribut'].')';
					//echo '<br>value: '.$GLOBALS['kampf'][getVariableName($stat['attribut'], $charPos)][getCharVariable($stat['attribut'], $charPos)];
					//echo '<br>zAttribut: '.getVariableName($stat['zattribut'], $charPos).' ('.$stat['zattribut'].')';
					//echo '<br>value: '.$GLOBALS['kampf'][getVariableName($stat['zattribut'], $charPos)][getCharVariable($stat['zattribut'], $charPos)];
					$statsCounter++;
					$attributWert = &$GLOBALS['kampf'][getVariableName($stat['attribut'], $charPos)][getCharVariable($stat['attribut'], $charPos)];
					if($stat['attribut'] != $stat['zattribut']) {
						$zAttributWert = &$GLOBALS['kampf'][getVariableName($stat['zattribut'], $charPos)][getCharVariable($stat['zattribut'], $charPos)];
					} else {
						$zAttributWert = &$attributWert;
					}
					echo '<br>operator: "'.$stat['operator'].'"';
					if(($stat['wirkung'] == 'always' || $stat['dauer'] == $stat['maxdauer']) && ($stat['unblockbar'] || !$GLOBALS['kampf']['aussetzen'])) {
						switch ($stat['operator']) {
							case '+':
								$stat['akk_schaden'] += getCalculatedValue($stat['formel'], $stat['wert'], $attributWert);
								$zAttributWert += getCalculatedValue($stat['formel'], $stat['wert'], $attributWert);
								break;
							case '-':
								$stat['akk_schaden'] -= getCalculatedValue($stat['formel'], $stat['wert'], $attributWert);
								$zAttributWert -= getCalculatedValue($stat['formel'], $stat['wert'], $attributWert);
								break;
							case '*':
								//vorherigen wert merken um später gegen rechnen zu können
								$tmp_wert = $attributWert;
								//echo 'tmp_wert: '.$tmp_wert.'<br>';
								$zAttributWert *= getCalculatedValue($stat['formel'], $stat['wert'], $attributWert);
								$stat['akk_schaden'] += $attributWert - $tmp_wert;
								break;
							case '/':
								//vorherigen wert merken um später gegen rechnen zu können
								$tmp_wert = $attributWert;
								//echo 'tmp_wert: '.$tmp_wert.'<br>';
								$zAttributWert /= getCalculatedValue($stat['formel'], $stat['wert'], $attributWert);
								$stat['akk_schaden'] += $attributWert - $tmp_wert;
								break;
							default:
								echo '<br>kein operator gefunden!';
						}
					}
					//echo '<br>ber. value: '.$zAttributWert;
					//echo '<br>akk_schaden: '.$stat['akk_schaden'].'<br>';
					//echo 'Varname: '.getVariableName($stat['attribut'], $charPos).'<br>';
					//echo 'Schaden: '.getCalculatedValue($stat['schaden'], $stat['wert'], $attributWert).'<br>';
					//echo '<br>zattribut: '.$stat['zattribut'];

					if(getVariableName($stat['zattribut'], $charPos) == 'tmp_hp') {
						//hier extra den weiteren parameter für healkonter setzen
						$index = 3;
						if($charPos == 1) {
							if($stat['zattribut'][0] == 's') {
								$index = 3;
							} else {
								$index = 2;
							}
						} else {
							if($stat['zattribut'][0] == 's') {
								$index = 2;
							} else {
								$index = 3;
							}
						}
						$GLOBALS['kampf'][getVariableName($stat['zattribut'], $charPos)][$index] = true;
					}


					$stat['dauer']--;
					if($stat['dauer'] < 1) {
						if($stat['wiederherstellbar'] == true) {
							//echo 'resette stat '.$zAttributWert.' um den wert '.$stat['akk_schaden'].'<br>';
							$zAttributWert -= $stat['akk_schaden'];
						}
						$statsCounter--;
						if($charPos == 1) {
							$GLOBALS['kampf']['schaden1'] = $attacke['text'];
						} else {
							$GLOBALS['kampf']['schaden2'] = $attacke['text'];
						}
						unset($attacke[$attKey]);
					}
				}
			}
			//echo 'Statscounter: '.$statsCounter.'<br>';
			//echo 'attackenstats: '.count($attacke).'<br>';
			if($statsCounter == 0) {
				unset($statChanges[$statKey]);
			}
		}
	}
}

################### Spieler 1
//char auf der linken Seite
processStatChanges($statChange_Char1, 1);

################### Spieler 2
//char auf der rechten Seite
processStatChanges($statChange_Char2, 2);
?>