🤔 Para Refletir :
"Água mole em pedra dura tanto bate até que fura... Bem, exceto se você alterar as configurações de resistência elemental do seu projeto!"
- Moge

Put Some Random Tile

HermesPasser Masculino

Duque
Membro
Membro
Vícios e amores servem para preencher o vazio
Juntou-se
23 de Março de 2017
Postagens
836
Bravecoins
92
Introdução
Primeiramente fiz esse sistema para a "Gincana: Fábrica do Noel", ele basicamente adiciona um tile aleatório em um lugar aleatório do mapa. Ele não tem aplicação prática mais satisfaz os requisitos "Criar um script que clone ou adicione uma tile em qualquer lugar do mapa."

Demonstração
[youtube]https://www.youtube.com/watch?v=sUAdlFu8Uvg[/youtube]​

Código
aqui
 
[member=1330]HermesPasser[/member]

Gostei bastante do script, achei bem legal, simples e fácil.

Notei alguns pontos que podem ser melhorados em relação ao código.

Código:
Tilemap.prototype._readMapData = function(x, y, z) {
    if (this._mapData) {
      var width = this._mapWidth;
      var height = this._mapHeight;

      if (this.horizontalWrap) {
        x = x.mod(width);
      }
      if (this.verticalWrap) {
        y = y.mod(height);
      }
      if (x >= 0 && x < width && y >= 0 && y < height) {
        
        // This do the magic, baby...
        if (xToBeChanged >= 0 && xToBeChanged < width && yToBeChanged >= 0 && yToBeChanged < height)
          if (x == xToBeChanged && y == yToBeChanged)
            return tileId;
        
        return this._mapData[(z * height + y) * width + x] || 0;
      } else {
        return 0;
      }
    } else {
      return 0;
    }
  };

No código acima, você poderia retirar toda a lógica do "if (this._mapData)" deixando apenas o retorno (return 0) caso a condição seja falsa.

EX:

Código:
Tilemap.prototype._readMapData = function(x, y, z) {
  if (!this._mapData)
    return 0

  var width = this._mapWidth;
  var height = this._mapHeight;
  ...

--------------------

Você também poderia usar mais funções para partes do código que sejam responsáveis por lógicas de processamento.

Código:
if (x >= 0 && x < width && y >= 0 && y < height) {       
  // This do the magic, baby...
  if (xToBeChanged >= 0 && xToBeChanged < width && yToBeChanged >= 0 && yToBeChanged < height)
    if (x == xToBeChanged && y == yToBeChanged)
      return tileId;
  
  return this._mapData[(z * height + y) * width + x] || 0;
} else {
  return 0;
}

Você poderia alterar o código acima para:

Código:
  Tilemap.prototype._readMapData = function(x, y, z) {
    if (this._mapData) {
      var width = this._mapWidth;
      var height = this._mapHeight;

      if (this.horizontalWrap)
        x = x.mod(width);

      if (this.verticalWrap) {
        y = y.mod(height);
      
      cloneTile(x, y, width, height, z);
    } else {
      return 0;
    }
  };

Código:
function cloneTile(x, y, width, height, z){
  if (x >= 0 && x < width && y >= 0 && y < height) {
      
      // This do the magic, baby...
      if (xToBeChanged >= 0 && xToBeChanged < width && yToBeChanged >= 0 && yToBeChanged < height)
        if (x == xToBeChanged && y == yToBeChanged)
          return tileId;
      
      return this._mapData[(z * height + y) * width + x] || 0;
    } else {
      return 0;
    }
}
 
Voltar
Topo Inferior