<commit_before>/// <reference path = "../escenas/Errores.ts" />
/// <reference path = "../../dependencias/pilasweb.d.ts"/>
/// <reference path = "ComportamientoAnimado.ts" />
/// <reference path = "../escenas/EstadosDeEscena.ts" />
/*
Es un comportamiento genérico con la idea de ser extendido
Sus características son

Si se está colisionando con un objeto de etiqueta A:
	Realizar acciones dependientes de ese objeto
Caso Contrario:
	El personaje principal ejecuta un mensaje de error.

La escena que lo utiliza debe tener definido
automata

*/


class ComportamientoColision extends ComportamientoAnimado {
	/*nombreAnimacion(){
		// redefinir por subclase
		return "parado";
	}*/
	alIniciar(){
		if(pilas.escena_actual().estado == undefined){
			pilas.escena_actual().estado = new SinEstado();
		}
	}

	alTerminarAnimacion(){
			pilas.escena_actual().estado.realizarTransicion(this.argumentos['idComportamiento'],this)
	}

	ejecutarse(){
		this.verificarCondicionesDeEjecucion();
		this.metodo(this.objetoTocado());
	}
	
	// Si se redefine, debe redefinirse también el método debeEjecutarse. 
	// Esto es para que pueda ofrecerse mayor granularidad al mostrar errores.
	verificarCondicionesDeEjecucion(){
		if (!this.colisiona()) throw new NoColisionaError(this.argumentos['mensajeError'], this.argumentos['etiqueta']);
	}
	// Si se redefine, debe redefinirse también el método verificarCondicionesDeEjecucion. 
	// Esto es para que pueda ofrecerse mayor granularidad al mostrar errores.
	debeEjecutarse() {
		return this.colisiona();
	}

	colisiona() {
		return pilas.obtener_actores_con_etiqueta(this.argumentos['etiqueta'])
			.some(objeto => objeto.colisiona_con(this.receptor));
	}

	objetoTocado(){
		return pilas.obtener_actores_con_etiqueta(this.argumentos['etiqueta']).filter(objeto => objeto.colisiona_con(this.receptor))[0];
	}

	metodo(objetoColision){
						//redefinir por subclase
	}
}

class NoColisionaError extends ActividadError{
	constructor(mensajeError :string, etiqueta :string) {
		var descripcion = etiqueta.toLowerCase().split("animada")[0].split("animado")[0];
		super(mensajeError || "¡Acá no hay " + descripcion + "!");
	}
}

class DesencadenarAnimacionDobleSiColiciona extends ComportamientoColision{
		metodo(objetoColision){
			this.receptor.cargarAnimacion(this.argumentos['idAnimacionReceptor']);
			objetoColision.cargarAnimacion(this.argumentos['idAnimacion']);
		}
}


class DesencadenarAnimacionSiColiciona extends ComportamientoColision{
	metodo(objetoColision){
		objetoColision.cargarAnimacion(this.argumentos['idAnimacion']);
	}
}

class DesencadenarHabilidadSiColiciona extends ComportamientoColision{
	metodo(objetoColision){
		objetoColision.aprender(this.argumentos['Habilidad'],this.argumentos['argumentosHabilidad'])
	}
}

class EncenderPorEtiqueta extends ComportamientoColision{
	nombreAnimacion(){
		return "recoger";
	}
	metodo(objetoColision){
		objetoColision.cargarAnimacion(this.nombreProximaAnimacion());
	}
	nombreProximaAnimacion(){<commit_msg>Elimino animacion doble, no es necesaria, sólo hay que usar desencadenar animacion y no ponerle animación al comportamiento original<commit_after>/// <reference path = "../escenas/Errores.ts" />
/// <reference path = "../../dependencias/pilasweb.d.ts"/>
/// <reference path = "ComportamientoAnimado.ts" />
/// <reference path = "../escenas/EstadosDeEscena.ts" />
/*
Es un comportamiento genérico con la idea de ser extendido
Sus características son

Si se está colisionando con un objeto de etiqueta A:
	Realizar acciones dependientes de ese objeto
Caso Contrario:
	El personaje principal ejecuta un mensaje de error.

La escena que lo utiliza debe tener definido
automata

*/


class ComportamientoColision extends ComportamientoAnimado {
	/*nombreAnimacion(){
		// redefinir por subclase
		return "parado";
	}*/
	alIniciar(){
		if(pilas.escena_actual().estado == undefined){
			pilas.escena_actual().estado = new SinEstado();
		}
	}

	alTerminarAnimacion(){
			pilas.escena_actual().estado.realizarTransicion(this.argumentos['idComportamiento'],this)
	}

	ejecutarse(){
		this.verificarCondicionesDeEjecucion();
		this.metodo(this.objetoTocado());
	}
	
	// Si se redefine, debe redefinirse también el método debeEjecutarse. 
	// Esto es para que pueda ofrecerse mayor granularidad al mostrar errores.
	verificarCondicionesDeEjecucion(){
		if (!this.colisiona()) throw new NoColisionaError(this.argumentos['mensajeError'], this.argumentos['etiqueta']);
	}
	// Si se redefine, debe redefinirse también el método verificarCondicionesDeEjecucion. 
	// Esto es para que pueda ofrecerse mayor granularidad al mostrar errores.
	debeEjecutarse() {
		return this.colisiona();
	}

	colisiona() {
		return pilas.obtener_actores_con_etiqueta(this.argumentos['etiqueta'])
			.some(objeto => objeto.colisiona_con(this.receptor));
	}

	objetoTocado(){
		return pilas.obtener_actores_con_etiqueta(this.argumentos['etiqueta']).filter(objeto => objeto.colisiona_con(this.receptor))[0];
	}

	metodo(objetoColision){
						//redefinir por subclase
	}
}

class NoColisionaError extends ActividadError{
	constructor(mensajeError :string, etiqueta :string) {
		var descripcion = etiqueta.toLowerCase().split("animada")[0].split("animado")[0];
		super(mensajeError || "¡Acá no hay " + descripcion + "!");
	}
}

class DesencadenarAnimacionSiColisiona extends ComportamientoColision{
	metodo(objetoColision){
		objetoColision.cargarAnimacion(this.argumentos['animacionColisionado']);
	}
}

class DesencadenarHabilidadSiColiciona extends ComportamientoColision{
	metodo(objetoColision){
		objetoColision.aprender(this.argumentos['Habilidad'],this.argumentos['argumentosHabilidad'])
	}
}

class EncenderPorEtiqueta extends ComportamientoColision{
	nombreAnimacion(){
		return "recoger";
	}
	metodo(objetoColision){
		objetoColision.cargarAnimacion(this.nombreProximaAnimacion());
	}
	nombreProximaAnimacion(){
{'fraction_non_alphanumeric': 0.11699779249448124, 'fraction_numerical': 0.0010188487009679063, 'mean_word_length': 5.595744680851064, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1790570', 'n_tokens_mistral': 2165, 'n_tokens_neox': 2073, 'n_words': 390}