Location: PHPKode > projects > Skrupel KI > skrupelki/ki_basis/schiffe_basis/wurmloecher_basis.php
<?php
/**
 * Autor: Wasserleiche (hide@address.com)
 * 
 * Statische Klasse fuer das Verhalten mit Wurmloecher.
 */
class wurmloecher_basis {
	
	/**
	 * Ermittelt die Ziel-ID und die Ziel-Koordinaten des uebergebenen Wurmlochs.
	 * arguments: $wurmloch_id - Die Datenbank-ID des Wurmlochs, dessen Ziel-Daten bestimmt werden sollen.
	 * returns: Die ID sowie die X- und Y-Koordinaten des Ziel-Wurmlochs.
	 * 			null, falls das Wurmloch nicht bekannt ist.
	 */
	static function ermittleWurmlochZiel($wurmloch_id) {
		$wurmloch_ziel = @mysql_query("SELECT extra FROM skrupel_anomalien WHERE id='$wurmloch_id'");
		$wurmloch_ziel = @mysql_fetch_array($wurmloch_ziel);
		if($wurmloch_ziel == null || $wurmloch_ziel['extra'] == null) return null;
		$wurmloch_ziel = explode(':', $wurmloch_ziel['extra']);
		return array('id'=>$wurmloch_ziel[0], 'x'=>$wurmloch_ziel[1], 'y'=>$wurmloch_ziel[2]);
	}
	
	/**
	 * Ermittelt die Datenbank-IDs und Koordinaten aller gerade sichtbaren Wurmloecher und speichert diese in 
	 * eigenschaften::$gesehene_wurmloecher_daten und ubertraegt diese in die Tabelle skrupel_ki_objekte.
	 */
	static function ermittleSichtbareWurmloecher() {
		$sicht = "(sicht_".eigenschaften::$comp_id."=1)";
		$spiel_id = eigenschaften::$spiel_id;
		$gerade_sichtbare_wurmloecher = @mysql_query("SELECT x_pos, y_pos, id FROM skrupel_anomalien 
				WHERE (spiel='$spiel_id') AND $sicht AND (art=1)");
		while($wurmloch = @mysql_fetch_array($gerade_sichtbare_wurmloecher)) {
			$wurmloch_daten = array('x'=>$wurmloch['x_pos'], 'y'=>$wurmloch['y_pos'], 'id'=>$wurmloch['id']);
			if(in_array($wurmloch_daten, eigenschaften::$gesehene_wurmloecher_daten)) continue;
			self::updateGeseheneWurmloecher($wurmloch['id']);
			eigenschaften::$gesehene_wurmloecher_daten[] = $wurmloch_daten;
		}
	}
	
	/**
	 * Ermittelt die Datenbank-IDs und Koordinaten aller in der Tabelle skrupel_ki_objekte gesehenen Wurmloecher 
	 * und speichert diese in eigenschaften::$gesehene_wurmloecher_koords.
	 */
	static function ermittleGeseheneWurmloecher() {
		$spiel_id = eigenschaften::$spiel_id;
		$comp_id = eigenschaften::$comp_id;
		$wurmloch_koords = @mysql_query("SELECT a.x_pos, a.y_pos, a.id FROM skrupel_ki_objekte o, 
			skrupel_anomalien a WHERE (a.spiel='$spiel_id') AND (o.objekt_id=a.id) AND (o.comp_id='$comp_id') 
			AND (o.extra=0)");
		while($wurmloch = @mysql_fetch_array($wurmloch_koords)) {
			eigenschaften::$gesehene_wurmloecher_daten[] = array('x'=>$wurmloch['x_pos'], 'y'=>$wurmloch['y_pos'], 
																 'id'=>$wurmloch['id']);
		}
	}
	
	/**
	 * Aktualisiert die gesehenen Wurmloecher mit der uebergebenen Wurmloch-ID.
	 * arguments: $wurmloch_id - Die Datenbank-ID des Wurmlochs, das gesehen wurde und gespeichert werden soll.
	 */
	static function updateGeseheneWurmloecher($wurmloch_id) {
		$spiel_id = eigenschaften::$spiel_id;
		$comp_id = eigenschaften::$comp_id;
		$wurmloecher = @mysql_query("SELECT a.id FROM skrupel_ki_objekte o, skrupel_anomalien a 
				WHERE (a.spiel='$spiel_id') AND (o.objekt_id=a.id) AND (o.comp_id='$comp_id')");
		$wurmloch_ids = array();
		while($wurmloch = @mysql_fetch_array($wurmloecher)) {
			$wurmloch_ids[] = $wurmloch['id'];
		}
		if(in_array($wurmloch_id, $wurmloch_ids)) return;
		$id = ki_basis::ermittleNaechsteID("skrupel_ki_objekte");
		@mysql_query("INSERT INTO skrupel_ki_objekte (id, objekt_id, comp_id, extra) 
				VALUES('$id', '$wurmloch_id', '$comp_id', 0)");
		$wurmloch_koords = @mysql_query("SELECT x_pos, y_pos FROM skrupel_anomalien WHERE id='$wurmloch_id'");
		$koords = @mysql_fetch_array($wurmloch_koords);
		eigenschaften::$gesehene_wurmloecher_daten[] = array('x'=>$koords['x_pos'], 'y'=>$koords['y_pos'], 
															 'id'=>$wurmloch_id);
	}
	
	/**
	 * Ermittelt die Datenbank-IDs und Koordinaten aller bekannten instabilen Wurmloecher und schreibt diese 
	 * in eigenschaften::$bekannte_instabile_wurmloch_daten.
	 */
	static function ermittleInstabileWurmloecher() {
		$spiel_id = eigenschaften::$spiel_id;
		$comp_id = eigenschaften::$comp_id;
		$wurmloch_koords = @mysql_query("SELECT a.x_pos, a.y_pos, a.id FROM skrupel_ki_objekte o, 
			skrupel_anomalien a WHERE (a.spiel='$spiel_id') AND (o.objekt_id=a.id) AND (o.comp_id='$comp_id') 
			AND (o.extra=2)");
		while($wurmloch = @mysql_fetch_array($wurmloch_koords)) {
			eigenschaften::$bekannte_instabile_wurmloch_daten[] = array('x'=>$wurmloch['x_pos'], 
																  'y'=>$wurmloch['y_pos'], 'id'=>$wurmloch['id']);
		}
	}
	
	/**
	 * Aktualisiert die bekannten instabilen Wurmloecher mit der uebergebenen Wurmloch-ID.
	 * arguments: $wurmloch_id - Die Datenbank-ID des Wurmlochs, das instabil ist und gespeichert werden soll.
	 */
	static function updateInstabileWurmloecher($wurmloch_id) {
		self::ermittleInstabileWurmloecher();
		foreach(eigenschaften::$bekannte_instabile_wurmloch_daten as $instabiles_wurmloch) {
			if($wurmloch_id == $instabiles_wurmloch['id']) return;
		}
		self::ermittleSichtbareWurmloecher();
		$comp_id = eigenschaften::$comp_id;
		@mysql_query("UPDATE skrupel_ki_objekte SET extra=2 
			WHERE (objekt_id='$wurmloch_id') AND (comp_id='$comp_id')");
		$koords = @mysql_query("SELECT x_pos, y_pos FROM skrupel_anomalien WHERE id='$wurmloch_id'");
		$koords = @mysql_fetch_array($koords);
		$wurmloch_daten = array('x'=>$koords['x_pos'], 'y'=>$koords['y_pos'], 'id'=>$wurmloch_id);
		eigenschaften::$bekannte_instabile_wurmloch_daten[] = $wurmloch_daten;
	}
	
	/**
	 * Ermittelt die Datenbank-IDs und Koordinaten aller bekannten Wurmloecher und schreibt diese 
	 * in eigenschaften::$bekannte_wurmloch_daten.
	 */
	static function ermittleBekannteWurmloecher() {
		$spiel_id = eigenschaften::$spiel_id;
		$comp_id = eigenschaften::$comp_id;
		$wurmloch_koords = @mysql_query("SELECT a.x_pos, a.y_pos, a.id FROM skrupel_ki_objekte o, 
			skrupel_anomalien a WHERE (a.spiel='$spiel_id') AND (o.objekt_id=a.id) AND (o.comp_id='$comp_id') 
			AND (o.extra=1)");
		while($wurmloch = @mysql_fetch_array($wurmloch_koords)) {
			eigenschaften::$bekannte_wurmloch_daten[] = array('x'=>$wurmloch['x_pos'],'y'=>$wurmloch['y_pos'], 
															  'id'=>$wurmloch['id']);
		}
	}
	
	/**
	 * Aktualisiert die Tabelle skrupel_ki_objekte mit dem uebergebenen Wurmloch (und dessen Ziel-Wurmloch) 
	 * und fuegt dieses in self::bekannte_wurmloch_daten ein. Ist das Wurmloch schon bekannt, so wird 
	 * nichts  veraendert.
	 * arguments: $wurmloch_id - Die Datenbank-ID des Wurmlochs, das in die Datenbank soll.
	 */
	static function updateBekannteWurmloecher($wurmloch_id) {
		if($wurmloch_id == null || $wurmloch_id == 0) return;
		self::ermittleBekannteWurmloecher();
		foreach(eigenschaften::$bekannte_wurmloch_daten as $wurmloch) {
			if($wurmloch_id == $wurmloch['id']) return;
		}
		self::ermittleSichtbareWurmloecher();
		$austritt_wurmloch = self::ermittleWurmlochZiel($wurmloch_id);
		$austritts_id = $austritt_wurmloch['id'];
		$comp_id = eigenschaften::$comp_id;
		@mysql_query("UPDATE skrupel_ki_objekte SET extra=1 
			WHERE (objekt_id='$wurmloch_id') AND (comp_id='$comp_id')");
		@mysql_query("UPDATE skrupel_ki_objekte SET extra=1 
			WHERE (objekt_id='$austritts_id') AND (comp_id='$comp_id')");
		$wurmloch_daten = @mysql_query("SELECT x_pos, y_pos FROM skrupel_anomalien WHERE id='$wurmloch_id'");
		$wurmloch_daten = @mysql_fetch_array($wurmloch_daten);
		$wurmloch_daten = array('x'=>$wurmloch_daten['x_pos'], 'y'=>$wurmloch_daten['y_pos'], 'id'=>$wurmloch_id);
		eigenschaften::$bekannte_wurmloch_daten[] = $wurmloch_daten;
		eigenschaften::$bekannte_wurmloch_daten[] = $austritt_wurmloch;
	}
}
?>
Return current item: Skrupel KI