diff --git a/data/imp3-functions.lua b/data/imp3-functions.lua index f527bfc..9b556f6 100644 --- a/data/imp3-functions.lua +++ b/data/imp3-functions.lua @@ -248,8 +248,10 @@ if DEBUG_FN_NAME then print_dbg("fight") end self:create_hot_points() self:load_pattern_paths() - self.pattern.manual_target = self.pattern.node[6] - self.pattern.manual_path = {target=6, actions={{action="right",event="target"}}} + local node = 6 + local path = {target=6, actions={{action="right",event="target"}}} + self.pattern:add_manual_target ( node, path ) + -- self.pattern.recovery = imp.pattern_recovery self.shot_target = abad @@ -452,6 +454,59 @@ if DEBUG_FN_NAME then print_dbg("pattern_movement") end -- print("Pattern") end +function imp:pattern_recovery() -- OK +-- print("Pattern recovery") + self:pattern_movement() -- Canviar a moviment per patró + + -- Situar-se en el mapa respecte als punts de recuperació (els tres punts del pis) + local x_after_4 = false + local x_after_5 = false + local x_after_6 = false + local y_upper_4 = false + local y_upper_5 = false + local y_upper_6 = false + + if self.pattern.node[4].xself.y+self.h then y_upper_4 = true end + if self.pattern.node[5].y>self.y+self.h then y_upper_5 = true end + if self.pattern.node[6].y>self.y+self.h then y_upper_6 = true end + + local node = 0 + local path = {} + -- Seleccionar les instruccions segons la posicio + if not y_upper_5 then + -- target 5 + node = 5 + if not x_after_5 then + -- right target + path = {target=5, actions={{action="right",event="target"}}} + else + -- left target + path = {target=5, actions={{action="left",event="target"}}} + end + else + if x_after_5 then + --target 4 + node = 4 + -- left target + path = {target=4, actions={{action="left",event="target"}}} + else + --target 6 + node = 6 + -- right target + path = {target=6, actions={{action="right",event="target"}}} + end + end + self.pattern:add_manual_target ( node, path ) + + -- Tornar l'acció a fer + -- return self.actions[self.path.actions[1].action] +end + + ------------------------------------------------------------------- -- // ACTION function imp:next_action() @@ -464,6 +519,10 @@ function imp:next_action() -- Resta d'accions if next_action==self.actions.no_action then + if self.timers.target<=0 then + self:pattern_recovery() + self:reset_timer("target") + end if self.move_type==self.move_types.free then -- FREE -- next_action = self:free_next_action() diff --git a/data/imp3.lua b/data/imp3.lua index f098021..c360386 100644 --- a/data/imp3.lua +++ b/data/imp3.lua @@ -34,7 +34,7 @@ function imp.new(_hab,_x,_y) step=0, moods={stop=0, chase=1, avoid=2, neutral=4}, mood=0, --anterior fight_mode - timers={mood=150,target=250, shot=100, super=200, flip_wait=50}, --anterior *_cooldown + timers={mood=150,target=100, shot=100, super=200, flip_wait=50}, --anterior *_cooldown move_types={free=0, pattern=1, super=2}, move_type=1, -- anterior movement_type actions={no_action=0, up=1, down=2, left=4, right=8, jump=16, shot=32, super=64, jumpfwd=128}, @@ -74,6 +74,7 @@ function imp.new(_hab,_x,_y) check_action_event = imp.check_action_event, add_action_event = imp.add_action_event, shot = imp.shot, + pattern_recovery = imp.pattern_recovery, -- debug _moure = imp._moure, _pause = false, @@ -172,6 +173,7 @@ function imp:update_normal() -- analisis self:analyze_env() self:update_action_events() + if self.analisis.target_reached then self:reset_timer("target") end -- print_analisis() -- decisio diff --git a/data/pattern.lua b/data/pattern.lua index 65b1134..deed79f 100644 --- a/data/pattern.lua +++ b/data/pattern.lua @@ -17,12 +17,24 @@ function pattern.new() action = pattern.action, event = pattern.event, actions = pattern.actions, - recovery = pattern.recovery, + -- recovery = pattern.noop, draw = pattern.draw, collision = pattern.collision, + add_manual_target = pattern.add_manual_target } end +function pattern:add_manual_target ( node, path ) + self.manual_target = self.node[node] + self.manual_path = path + self.target_idx = 1 + self.action_idx = 1 +end + +function pattern:noop() + print("NO OP") +end + function pattern:draw() local scr_x = 0 local scr_y = 0 @@ -179,10 +191,6 @@ function pattern:in_target( a ) return self:collision( a ) end -function pattern:recovery( point, target) -print_dbg("") -end - function pattern:collision( a ) local b = self:target_node() return (a.x+a.bb.x+a.bb.w >= b.x+b.bb.x)