View difference between Paste ID: JAgf9Zk8 and RvEE7QWc
SHOW: | | - or go back to the newest paste.
1
#==============================================================================
2-
# • Sensor Event
2+
# • Ultimate Sensor Event
3
#==============================================================================
4
# Autor: Dax
5
# Requerimento: Dax Core
6-
# Versão: 2.0
6+
# Versão: 2.5
7
# Site: www.dax-soft.weebly.com
8
#==============================================================================
9
# @tiagoms : Feedback que ajudou a incrementar mais.
10
#==============================================================================
11
# • Descrição:
12
#------------------------------------------------------------------------------
13
#  Um sistema de sensor, onde permite diferentes tipos de formas dos eventos
14
# "sentir" a presença do jogador.
15
#==============================================================================
16
# • Como usar: Utilze os comandos em condições.
17
#------------------------------------------------------------------------------
18
#  a : área em quadrados(tiles) em que o sensor será ativado. Por padrão é 1
19
#  b : ID do evento. Se definir nada, é o evento local. Por padrão é o evento local.
20
#------------------------------------------------------------------------------
21
# 1 * Primeiro tipo de sensor, e o sensor de área. O comando para calcular esse
22
# tipo de sensor é o : sarea?(a, b) :
23
# 2 * Sensor que verifica se está em baixo do evento..: sfront?(a, b)
24
# 3 * Sensor que verifica se está em cima do evento..: sago?(a, b)
25
# 4 * Sensor que verifica se está a esquerda do evento: sleft?(a, b)
26
# 5 * Sensor que verifica se está a direita do evento: sright?(a, b)
27
# 6 * Sensor que faz uma verificação em forma de cruz: scross?(a, b)
28-
# 9 * Sensor que verifica se está dentro da área de um círculo(formato de um
28+
29-
# círculo) : scircle?(a, b)
29+
30-
# 10 * Sensor que verifica se está somente atrás do evento. sbehind?(a, b)
30+
# 9 * Sensor que verifica se está somente atrás do evento. sbehind?(a, b)
31
# 10 * Sensor que verifica se está somente a esquerda do evento. vleft?(a, b)
32-
Dax.register(:sensor_event, "Dax", 2.0, "12/07/14")
32+
# 11 * Sensor que verifica se está somente a direita do evento. vright?(a, b)
33
#------------------------------------------------------------------------------
34
# * Atenção, o item 2 á 5 são estáticos, ou seja, 
35
# serão fixos independente da direção em que o evento esteja
36
# * Os itens 7, 9, 10, 11: Em uma linha reta
37
#------------------------------------------------------------------------------
38
#==============================================================================
39
Dax.register(:sensor_event, "Dax", 2.5, "12/07/14")
40
#==============================================================================
41
# • Game_Interpreter
42
#==============================================================================
43
class Game_Interpreter
44
  #----------------------------------------------------------------------------
45
  # • Pega as coordenadas do evento é do player.
46
  #----------------------------------------------------------------------------
47
  def block_sensor(b=nil)
48
    event = $game_map.events[b.nil? ? @event_id : Integer(b)]
49
    yield(event.x, event.y, $game_player.x, $game_player.y)
50
  end
51
  #----------------------------------------------------------------------------
52
  # • Sensor por área.
53
  #----------------------------------------------------------------------------
54
  def sarea?(a=1, b=nil)
55
     a = a < 0 || a.nil? ? 1 : Integer(a).abs
56
    distance = DMath.distance_sensor($game_player, $game_map.events[b.nil? ? @event_id : Integer(b)])
57
    return (distance <= a)
58
  end  
59
  #----------------------------------------------------------------------------
60
  # • Sensor na frente do evento.
61
  #----------------------------------------------------------------------------
62
  def sfront?(a=1, b=nil)
63
    a = a < 0 || a.nil? ? 1 : Integer(a).abs
64
    block_sensor(b) { |ex, ey, px, py|
65
      return unless px == ex
66
      (ey..(ey + a)).each { |y|
67
        break unless $game_map.passable?(ex, y, 2)
68
        return true if py == y
69
      }
70
    }
71
    return false
72
  end
73
  #----------------------------------------------------------------------------
74
  # • Sensor atrás do evento.
75
  #----------------------------------------------------------------------------
76
  def sago?(a=1, b=nil)
77
    a = a < 0 || a.nil? ? 1 : Integer(a).abs
78
    block_sensor(b) { |ex, ey, px, py|
79
      return unless px == ex
80
      ey.downto(ey - a).each { |y|
81
        break unless $game_map.passable?(ex, y, 8)
82
        return true if py == y
83
      }
84
    }
85
    return false
86
  end
87
  #----------------------------------------------------------------------------
88
  # • Sensor quando estiver sobre o evento.
89
  #----------------------------------------------------------------------------
90
  def sabout?(b=nil)
91
    block_sensor(b) { |ex, ey, px, py| return true if px == ex && py == ey }
92
    return false
93
  end
94
  #----------------------------------------------------------------------------
95
  # • Sensor quando estiver a direita do evento.
96
  #----------------------------------------------------------------------------
97
  def sright?(a=1, b=nil)
98
    a = a < 0 || a.nil? ? 1 : Integer(a).abs
99
    block_sensor(b) {|ex, ey, px, py|
100
      return unless py == ey
101
      (ex..(ex + a)).each { |x|
102
        break unless $game_map.passable?(x, ey, 6)
103
        return true if px == x
104
      }
105
    }
106
    return false
107
  end
108
  #----------------------------------------------------------------------------
109
  # • Sensor quando estiver a esquerda do evento.
110
  #----------------------------------------------------------------------------
111
  def sleft?(a=1, b=nil)
112
    a = a < 0 || a.nil? ? 1 : Integer(a).abs
113
    block_sensor(b) {|ex, ey, px, py|
114
      return unless py == ey
115
      ex.downto(ex - a).each { |x|
116
        break unless $game_map.passable?(x, ey, 4)
117
        return true if px == x
118
      }
119
    }
120
    return false
121
  end
122
  #----------------------------------------------------------------------------
123
  # • Sensor em forma de cruz.
124
  #----------------------------------------------------------------------------
125
  def scross?(a=1, b=nil)
126
    sfront?(a, b) || sago?(a, b) || sright?(a, b) || sleft?(a, b)
127
  end
128
  #----------------------------------------------------------------------------
129
  # • Sensor que verifica somente a visão do evento.
130
  #----------------------------------------------------------------------------
131
  def svision?(a=1, b=nil)
132
    case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
133-
  # • Sensor que verifica em forma de círculo.
133+
134
    when 4 then sleft?(a, b)
135-
  def scircle?(a=1, b=nil)
135+
136
    when 8 then sago?(a, b)
137
    end
138-
      sr = [ (px - ex).abs, (py - ey).abs ]
138+
139-
      return true if sr[0] + sr[1] <= a
139+
140
  # • Sensor que verifica se está somente atrás do evento.
141
  #----------------------------------------------------------------------------
142
  def sbehind?(a=1, b=nil)
143
    case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
144
    when 2 then sago?(a, b)
145
    when 4 then sright?(a, b)
146
    when 6 then sleft?(a, b)
147
    when 8 then sfront?(a, b)
148
    end
149
  end
150
  #----------------------------------------------------------------------------
151
  # • Sensor que verifica se está somente a esquerda do evento.
152
  #----------------------------------------------------------------------------
153
  def vleft?(a=1, b=nil)
154
    case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
155
    when 2 then sright?(a, b)
156
    when 4 then sfront?(a, b)
157
    when 6 then sago?(a, b)
158
    when 8 then sleft?(a, b)
159
    end
160
  end
161
  #----------------------------------------------------------------------------
162
  # • Sensor que verifica se está somente a direita do evento.
163
  #----------------------------------------------------------------------------
164
  def vright?(a=1, b=nil)
165
    case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
166
    when 2 then sleft?(a, b)
167
    when 4 then sfront?(a, b)
168
    when 6 then sago?(a, b)
169
    when 8 then sright?(a, b)
170
    end
171
  end
172
end