#pragma once
#ifndef SELECTION
#define SELECTION 1
#include "Area.h"
#include "MadMap.h"
//=======================Selection====================================
//area su cui è possibile applicare funzioni di modifica sulla mappa
//====================================================================
class Selection : public Area
{
public:
//===================applied========================================
//true se una funzione è stata applicata consecutivamente più di una
//volta; false altrimenti
//==================================================================
bool applied;
public:
//===================Costruttore====================
//non seleziona nessuna area all'interno della mappa
//==================================================
Selection(void);
//===================Costruttore====================
//seleziona un'area di ampiezza 1x1 <br>
// <br>
//Parametri: <br>
//x. coordinata x della area selezionata <br>
//z. coordinata z della area selezionata <br>
//==================================================
Selection(int x, int z);
/**Distruttore*/
~Selection(void);
//===================flat======================================
//appiattisce tutta la zona selezionata nella map a al valore h
//=============================================================
void flat(MadMap *map, double h);
//===================incline===================================
//crea un piano inclinato nella map con pendenza k nell'area
//della selection
//=============================================================
void incline(MadMap *map, double h);
//===================level=====================================
//livella ogni tile all'altezza del valore del campo C
//incrementato di k
//=============================================================
void level(MadMap *map, double k);
//===================slide=====================================
//alza senza dislivelli la selezione nella map di k
//=============================================================
void slide(MadMap *map, double k);
//===================set========================================
//permette selezionare un'area per la selection <br>
// <br>
//Parametri <br>
//returnfirstPick: un intero dove il modulo 100 è
//la coordinata X del primo elemento dell'area selezionata
//mentre la divisione intera per 100 è la coordinata Z del
//primo elemento dell'area selezionata <br>
//
//returnsecondPick: un intero dove il modulo 100 è l
//a coordinata X dell'ultimo elemento dell'area selezionata
//mentre la divisione intera per 100 è la coordinata Z
//dell'ultimo elemento dell'area selezionata
//==============================================================
void set(int rfp, int rlp);
//===================up=========================================
//alza tutta la zona selezionata nella map di un valore k
//==============================================================
void up(MadMap *map, double k);
//===================zero=======================================
//pone tutta la zona selezionata nella map all'altezza di k
//==============================================================
void zero(MadMap *map,double k);
//===================pyramid====================================
//crea una piramide nell'area selezionata di altezza k
//==============================================================
void pyramid(MadMap *map,double k);
//===================function===================================
//seleziona la funzione per modificare la mappa da applicare<br>
// <br>
//Parametri <br>
//map: puntatore alla MadMap da modificare <br>
//undomap: puntatore alla MadMap usata per l'undo <br>
//type: tipo del metodo della Selection da
//applicare(LEVEL,SLIDE,INCLINE,FLAT,UP,ZERO,PYRAMID <br>
//val: valore da passare al funzione di modifica della mappa<br>
//==============================================================
void function(MadMap *map, MadMap *undomap, int type, double val );
};
#endif