#-------------------------------------------------------------------------- # ½ÃÆ®¸£»êÀÇ ³ªÄ§¹Ý ½ºÅ©¸³Æ® V1.00 #-------------------------------------------------------------------------- # ±â´É : ¸Ê »ó¿¡¼­ À̺¥Æ®¸¦ ÁöÁ¤ÇÏ¸é ¹æÇâÀ» °¡¸®Å°´Â ½ºÅ©¸³Æ®ÀÔ´Ï´Ù. # ¼³¸í/ÁÖÀÇ»çÇ× : Graphics/system/ Æú´õ¿¡ ±×¸²ÆÄÀÏ # compass_needle.png ¿Í compass_body.png°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. #-------------------------------------------------------------------------- #============================================================================== # Ä¿½ºÅÒ ºÎºÐ. #============================================================================== class Window_Base < Window def custom_compass # °Å¸®ÀÇ ´ÜÀ§ µû¿ÈÇ¥ ¾È¿¡¼­ Á¶ÀýÇϼ¼¿ä. @dis_word = "m" end end #============================================================================== # ¡á Game_Map #------------------------------------------------------------------------------ # ¡¡¸ÊÀÇ ÀϺθ¦ ÀçÁ¤ÀÇ ÇßÀ¸¹Ç·Î, ÀÌ ½ºÅ©¸³Æ®´Â °¡Àå ¾Æ·¡¿¡ ³Ö¾îÁÖ±æ ¿øÇÔ. #============================================================================== class Scene_Map #-------------------------------------------------------------------------- # ¡Ü Ä¿½ºÅÒ ºÎºÐ #-------------------------------------------------------------------------- def custom @compass_x = 510 @compass_y = 30 # ÇØ´ç ½ºÀ§Ä¡°¡ ÄÑÁö¸é ³ªÄ§¹ÝÀÌ ºñÈ°¼ºÈ­ @switch_num = 50 end #-------------------------------------------------------------------------- # ¡Ü À̺¥Æ® »ó È£Ãâ ¿ë ¸Þ¼Òµå #-------------------------------------------------------------------------- def new_way if $game_player.get_way != nil #ÃʱâÈ­ @compass_way = [] #¹è¿­ ¹Þ¾Æ¿È for i in 0...$game_player.get_way.size #comapass_way ´Â ¿©±â¼­ »ç¿ëÇÒ »õ ¹è¿­. ±× ¹è¿­¾È¿¡ °ª ÀÏÀÏÈ÷ ´ëÀÔ @compass_way.push($game_player.get_way[i]) if @sprite_for_event[i].bitmap != nil if @sprite_for_event[i].character != $game_map.events[$game_player.get_way[i].id] @sprite_for_event[i].dispose @sprite_for_event[i] = Sprite_Character.new(@viewport1, $game_map.events[$game_player.get_way[i].id] ) end end if @sprite_for_event[i].bitmap == nil @sprite_for_event[i] = Sprite_Character.new(@viewport1, $game_map.events[$game_player.get_way[i].id] ) end end for i in 0...@sprite_for_event.size if @sprite_for_event[i].bitmap != nil ax = $game_player.x - @compass_way[i].x ay = @compass_way[i].y - $game_player.y root = Math.sqrt(ax*ax + ay*ay) if ax == 0 && root == 0 angle_rad2 = 1 else angle_rad2 = Math.acos( ax / root ) end angle = angle_rad2 / Math::PI * 180 #angle += 90 if ay < 0 angle = angle*-1 angle_rad2 *= -1 #angle += 180 end angle_rad2 -= 90 * Math::PI / 180 @sprite_for_event[i].x = 57 * Math.sin(angle_rad2) @sprite_for_event[i].y = 57 * Math.cos(angle_rad2) @sprite_for_event[i].ox = @compass_x - 1613 @sprite_for_event[i].oy = @compass_y -165 @sprite_for_event[i].zoom_x = 0.5 @sprite_for_event[i].zoom_y = 0.5 @sprite_for_event[i].z = 1510 if i == @now_index @sprite_for_event[i].x = 62 * Math.sin(angle_rad2) @sprite_for_event[i].y = 62 * Math.cos(angle_rad2) @sprite_for_event[i].ox = @compass_x -1240 @sprite_for_event[i].oy = @compass_y -110 @sprite_for_event[i].zoom_x = 0.75 @sprite_for_event[i].zoom_y = 0.75 end #@sprite_for_event[i].angle = angle end end end end #-------------------------------------------------------------------------- # ¡Ü ÇÁ·¹ÀÓ °»½Å #-------------------------------------------------------------------------- alias update_n01 update #-------------------------------------------------------------------------- def update if $game_switches[@switch_num] == true @sprite_body.visible = false @sprite_needle.visible = false @window_name.visible = false for i in 0...@sprite_for_event.size @sprite_for_event[i].visible = false end else new_way if @compass_way != nil for i in 0...@sprite_for_event.size @sprite_for_event[i].visible = true end @sprite_body.visible = true @sprite_needle.visible = true @window_name.visible = true ax = $game_player.x - @compass_way[@now_index].x ay = @compass_way[@now_index].y - $game_player.y root = Math.sqrt(ax*ax + ay*ay) if ax == 0 && ay == 0 angle_rad = 1 else angle_rad = Math.acos( ax / root ) end angle = angle_rad / Math::PI * 180 angle += 90 if ay < 0 angle = angle*-1 angle += 180 end @sprite_needle.angle = angle end if @compass_way != nil if Input.trigger?(Input::L) @now_index -= 1 if @now_index < 0 @now_index += @compass_way.size end end if Input.trigger?(Input::R) @now_index += 1 if @now_index >= @compass_way.size @now_index -= @compass_way.size end end end if @now_index != nil && @compass_way != nil if @compass_way[@now_index] != nil @window_name.get_name($game_map.events[@compass_way[@now_index].id].name) @window_name.get_distance(root) @window_name.refresh end end @sprite_needle.update end update_n01 end #-------------------------------------------------------------------------- # ¡Ü ¸ÞÀΠó¸® (º°¸í ÀçÁ¤ÀÇ) #-------------------------------------------------------------------------- alias main_n01 main #-------------------------------------------------------------------------- def main @compass_way = nil custom # ³ªÄ§¹Ý ¸öÅë Á¦ÀÛ @sprite_body = Sprite.new @sprite_body.bitmap = Bitmap.new("Graphics/system/compass_body") @sprite_body.x = @compass_x @sprite_body.y = @compass_y @sprite_body.z = 1501 @sprite_body.visible = false # ³ªÄ§¹Ý ¹Ù´Ã Á¦ÀÛ @sprite_needle = Sprite.new @sprite_needle.bitmap = Bitmap.new("Graphics/system/compass_needle") @sprite_needle.ox = 50 @sprite_needle.oy = 50 @sprite_needle.x = @compass_x + 50 @sprite_needle.y = @compass_y + 50 @sprite_needle.z = 1501 @sprite_needle.visible = false @sprite_for_event = [Sprite.new, Sprite.new, Sprite.new, Sprite.new, Sprite.new] for i in 0...@sprite_for_event.size @sprite_for_event[i].z = 1502 end @now_index = 0 @window_name = Window_Compass.new(nil) main_n01 # Àå¸éÀüȯ½Ã Çعæ @sprite_body.dispose @sprite_needle.dispose @window_name.dispose if @sprite_for_event != nil for i in 0...@sprite_for_event.size @sprite_for_event[i].dispose end end end alias transfer_player_n01 transfer_player #-------------------------------------------------------------------------- def transfer_player transfer_player_n01 @compass_way = nil $game_player.way_dispose @sprite_body.visible = false @sprite_needle.visible = false @window_name.visible = false for i in 0...@sprite_for_event.size @sprite_for_event[i].visible = false end end end #============================================================================== # ¡á Game_Player #------------------------------------------------------------------------------ # ¡¡À̺¥Æ®¿ÍÀÇ È£È¯À» À§ÇØ Ãß°¡ÇÑ ¸Þ¼Òµå #============================================================================== class Game_Player def new_way(i) if @compass_way == nil @compass_way = [] end if @compass_way.size == 5 @compass_way.shift end #¿©·¯ ¹è¿­À» ¸¸µé ¼ö ÀÖ´Ù. @compass_way.push($game_map.events[i]) end def get_way return @compass_way end def way_dispose @compass_way = nil end end #============================================================================== # ¡á Window_Compass #------------------------------------------------------------------------------ # ¡¡³ªÄ§¹Ý À̸§ Ç¥½Ã À©µµ¿ì #============================================================================== class Window_Compass < Window_Base #-------------------------------------------------------------------------- # ¡Ü ¿ÀºêÁ§Æ® ÃʱâÈ­ #-------------------------------------------------------------------------- def initialize(name) super(20, 0, 640, 480) self.back_opacity = 0 self.opacity = 0 self.contents = Bitmap.new(width - 32, height - 32) if name != nil @name = name end refresh end # À̸§ ¹Þ¾Æ¿À´Â ¸Þ¼Òµå def get_name(name) @name = name end # À̸§ ¹Þ¾Æ¿À´Â ¸Þ¼Òµå def get_distance(distance) @distance = distance end #¸®ÇÁ·¹½Ã def refresh self.contents.clear if @name == nil return end draw_event_name(460, 130, @name) if @distance == nil return end draw_event_distance (460, 152, @distance) end end #============================================================================== # ¡á Window_Base #------------------------------------------------------------------------------ # ¡¡°ÔÀÓÁßÀÇ ¸ðµç À©µµ¿ìÀÇ ½´ÆÛ Å¬·¡½ºÀÔ´Ï´Ù. #============================================================================== class Window_Base < Window def draw_event_name (x, y, name) self.contents.font.size = 15 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(x+2, y+2, 140, 20, "´ë»ó : " + name) self.contents.font.color = text_color(3) self.contents.draw_text(x, y, 140, 20, "´ë»ó : " + name) end def draw_event_distance (x, y, distance) custom_compass self.contents.font.size = 15 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(x+2, y+2, 120, 20, "°Å¸® : " + distance.to_i.to_s + @dis_word.to_s) self.contents.font.color = text_color(3) self.contents.draw_text(x, y, 120, 20, "°Å¸® : " + distance.to_i.to_s + @dis_word.to_s) end end #============================================================================== # ¡á Game_Event #------------------------------------------------------------------------------ # ¡¡À̺¥Æ®¸¦ Ãë±ÞÇϴ Ŭ·¡½ºÀÔ´Ï´Ù.Á¶°Ç ÆÇÁ¤¿¡ ÀÇÇÑ À̺¥Æ® ÆäÀÌÁö º¯È¯À̳ª, º´·Äó¸® # À̺¥Æ® ½ÇÇàµîÀÇ ±â´ÉÀ» °¡Áö°í ÀÖ¾î Game_Map Ŭ·¡½ºÀÇ ³»ºÎ¿¡¼­ »ç¿ëµË´Ï´Ù. #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ¡Ü °ø°³ ÀνºÅϽº º¯¼ö #-------------------------------------------------------------------------- attr_reader :trigger # Æ®¸®°Å attr_reader :list # ½ÇÇà ³»¿ë attr_reader :starting # ±âµ¿Áß Ç÷¡±× attr_reader :name # ³×ÀÓ Ãß°¡ #-------------------------------------------------------------------------- # ¡Ü ¿ÀºêÁ§Æ® ÃʱâÈ­ # map_id : ¸Ê ID # event : À̺¥Æ® (RPG::Event) #-------------------------------------------------------------------------- def initialize(map_id, event) super() @map_id = map_id @event = event @name = @event.name @id = @event.id @erased = false @starting = false @through = true # Ãʱâ À§Ä¡¿¡ À̵¿ moveto(@event.x, @event.y) refresh end end