eloipuertas / ES2014B

Universitat de Barcelona Software Engineering Class B VideoGame Project
7 stars 1 forks source link

Escena dificultat #225

Closed Folch closed 9 years ago

Folch commented 9 years ago

A l'escena on s'escull el personatge es podrà escollir la dificultat, segons la dificultat que s'esculli (easy,normal,hard) sonarà un audio o un altre, el personatge tindrà més o menys vida (o se li recuperarà més a poc a poc) i els enemics seran pitjors o millors.

1 hora estimada

Condició de finalització:

xaviml commented 9 years ago

Crearàs una nova escena, o faràs un dialeg que surti quan cliquis al play del jugador? @Folch

Folch commented 9 years ago

A mi més igual, però crec que al final l'artista @xavierfebrer volia que creés una nova escena

xaviml commented 9 years ago

Que n'opines @xavierfebrer?

aniskhoury commented 9 years ago

@Folch @xaviml us sembla bé que us prepari tres mètodes associats al PjPrincipal (per exemple modeEasy(), modeMedium(), modeHard()) o preferiu un mètode i que li passis Easy,Medium,Hard on el seu valor és 0,1,2 respectivament? (allà posaré els sets corresponent a vidamaxima, regeneracio per segon, ...)? Quina forma et seria més còmode @Folch ?

Folch commented 9 years ago

modeEasy(),modeMedium() i modeHard() m'agrada més perque em sembla menys marrano @aniskhoury

Mithrandir0x commented 9 years ago

A on guardareu el paràmetre global de la dificultat seleccionada pel jugador?

Per que això afecta alhora d'establir els atributs dels NPCs en funció de la dificultat.

Folch commented 9 years ago

En realitat podriem nomes canviar la vida del personatge principal i deixar igual les aranyes o fer mes fortes les aranyes i deixar igual el personatge principal, no caldria fer les 2 coses i si fem la primera amb les funcions de l' @aniskhoury n'hi ha prou. @Mithrandir0x

aniskhoury commented 9 years ago

Acabo de fer les funcions que em demanaves @Folch , però lo que diu en @Mithrandir0x cal tenir-ho en consideració, en el meu cas és fàcil perque n'hi ha prou en canviar els atributs perque crides els mètodes des del Pj Principal (i internament, tinc una variable, que és la dificultat, però sens dubte seria millor llegir tots del mateix lloc el nivell de dificultat). A mode d'exemple:

    public void modeEasy(){
        this.setMAXHP (2000);
        this.setMAXMP (2000);
        this.setHP (2000);
        this.setMP (2000);
        this.setFOR (0);
        this.setDMG (200);
        this.setRegenHP (10);
        this.setRegenMP (20);
        nivellDif = 1;
    }

    public void modeMedium(){
        this.setMAXHP (1500);
        this.setMAXMP (1500);
        this.setHP (1500);
        this.setMP (1500);
        this.setFOR (0);
        this.setDMG (150);
        this.setRegenHP (5);
        this.setRegenMP (10);
        nivellDif = 2;
    }

El nivell de dificultat és útil doncs l'uso en altres llocs (mira la issue #222 ), de totes maneres ara ja l'agafo quan em crides el mètode, però si el @Mithrandir0x la necessita, ho canviaria, així ho agafem tots del mateix lloc i no repliquem informació.

Folch commented 9 years ago

Com vulgueu @Mithrandir0x i @aniskhoury , en tot cas si voleu que modifiqui una variable global per a que tothom hi pugui accedir on la poso?

aniskhoury commented 9 years ago

Mmm, poder seria interessant posar-ho al GameFlow, @Folch , després de garantir que s'hagi creat el PjPrincipal i les coses necessàries que en faran us del nivell de dificultat

Folch commented 9 years ago

Algo així us va bé?:

public class Gameflow : MonoBehaviour {
        ...
    private const int EASY = 0;
    private const int MEDIUM = 1;
    private const int HARD = 2;
    private int difficulty;

    public void setDifficulty(int diff){
        this.difficulty = diff;
    }
        ...
}

Així jo només cridare al setDifficulty(0),setDifficulty(1) o setDifficulty(2). @aniskhoury

aniskhoury commented 9 years ago

@Folch així està bé! Que et sembla si li posem un tag que sigui GameFlow i nosaltres fem un getDifficulty()?

xaviml commented 9 years ago

No creieu que hauriem d'unificar tots els canvis que respecten a la dificultat en un fitxer? @Folch, @Mithrandir0x, @aniskhoury

Mithrandir0x commented 9 years ago

Teniu en compte l'ordre d'execució dels scripts: http://docs.unity3d.com/Manual/ExecutionOrder.html

És preferible que aquest paràmetre s'hagi definit prèviament per PlayerPrefs, donat que és un objecte estàtic dedicat a declarar configuracions globals de l'estat del joc, en comptes de fer-ho dins un objecte que no sabem quan començarà a viure.

Per evitar possibles race conditions per que el valor no s'ha declarat encara, el que podem fer és declarar l'accés a la dificultat com a static:

public static const int EASY = 0;
public static const int MEDIUM = 1;
public static const int HARD = 2;

public static int GetDifficulty() {
    String difficulty = PlayerPrefs.GetString("difficulty");
    difficulty = difficulty != null && difficulty.Length == 1 ? difficulty : MEDIUM;
    return System.Int32.parse(difficulty);
}

public static void SetDifficulty(int mode) {
    mode = mode < EASY ? EASY : mode;
    mode = mode > HARD ? HARD : mode:
    PlayerPrefs.SetString("difficulty", "" + mode);
}

public static bool IsDifficulty(int mode) {
    mode = mode < EASY ? EASY : mode;
    mode = mode > HARD ? HARD : mode:
    return GetDifficulty() == mode;
}

I prèviament, en una altra escena s'haurà seleccionat la dificultat, i es configura la dificultat fent això en alguna part del codi:

Gameflow.SetDifficulty(Gameflow.HARD);
Folch commented 9 years ago

@Mithrandir0x així ho faig doncs. @aniskhoury tu fes servir el get aquest del Gameflow i ja està. I el mateix pels NPC's @JordiRQ

xaviml commented 9 years ago

Perfecte @Folch. Quan integrem, ajustarem els valors per ajustar-ho tot a unes dificultats coherents. Tanco issue.