Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Side by Side Diff: nacltoons/data/res/touch_handler.lua

Issue 15070003: [nacltoons] Add compound shapes. (Closed) Base URL: https://nativeclient-sdk.googlecode.com/svn/trunk/src
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « nacltoons/data/res/sample_game/level3.def ('k') | nacltoons/data/res/util.lua » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 -- Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 -- Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 -- Use of this source code is governed by a BSD-style license that can be 2 -- Use of this source code is governed by a BSD-style license that can be
3 -- found in the LICENSE file. 3 -- found in the LICENSE file.
4 4
5 -- Touch handling code for game engine. 5 -- Touch handling code for game engine.
6 -- This module defines a singe global table touch_handler which contains 6 -- This module defines a singe global table touch_handler which contains
7 -- a single function called TouchHandler. This functions registered 7 -- a single function called TouchHandler. This functions registered
8 -- as the touch handler for CCLayer in which the gameplace takes place. 8 -- as the touch handler for CCLayer in which the gameplace takes place.
9 9
10 local util = require 'util' 10 local util = require 'util'
11 11
12 local touch_handler = {} 12 local touch_handler = {}
13 13
14 local touch_state = { 14 local touch_state = {
15 touchid = -1, 15 touchid = -1,
16 reciever = nil, 16 reciever = nil,
17 is_object = false, 17 is_object = false,
18 } 18 }
19 19
20 local function FindTaggedBodiesAt(x, y) 20 local function FindTaggedBodiesAt(x, y)
21 local b2pos = util.b2VecFromCocos(ccp(x, y)) 21 local b2pos = util.b2VecFromCocos(ccp(x, y))
22 local found_bodies = {} 22 local found_bodies = {}
23 local found_something = false
23 local function handler(body) 24 local function handler(body)
25 found_something = true
24 local tag = body:GetUserData() 26 local tag = body:GetUserData()
25 if tag ~= 0 then 27 if tag ~= 0 then
26 -- FindBodiesAt can report the same bodies more than 28 -- FindBodiesAt can report the same bodies more than
27 -- once since it reports the body for each fixture that 29 -- once since it reports the body for each fixture that
28 -- exists at a given point, so filter out duplicates here. 30 -- exists at a given point, so filter out duplicates here.
29 if not found_bodies[tag] then 31 if not found_bodies[tag] then
30 util.Log("got body.. " .. tag) 32 util.Log("found body.. " .. tag)
31 assert(level_obj.object_map[tag]) 33 assert(level_obj.object_map[tag])
32 found_bodies[tag] = level_obj.object_map[tag] 34 found_bodies[tag] = level_obj.object_map[tag]
33 end 35 end
34 end 36 end
35 end 37 end
36 38
37 level_obj.layer:FindBodiesAt(b2pos, handler) 39 level_obj.layer:FindBodiesAt(b2pos, handler)
40 if found_something and #found_bodies == 0 then
41 util.Log("Found untagged bodies")
42 end
38 return found_bodies 43 return found_bodies
39 end 44 end
40 45
41 local lasttap_time = 0 46 local lasttap_time = 0
42 local lasttap_count = 1 47 local lasttap_count = 1
43 local lasttap_location = nil 48 local lasttap_location = nil
44 49
45 touch_handler.DOUBLE_CLICK_INTERVAL = 0.250 50 touch_handler.DOUBLE_CLICK_INTERVAL = 0.250
46 touch_handler.DOUBLE_CLICK_TOLERANCE = 5 51 touch_handler.DOUBLE_CLICK_TOLERANCE = 5
47 52
48 local function OnTouchBegan(x, y, touchid) 53 local function OnTouchBegan(x, y, touchid)
49 -- Do double tap detection based on taps that occur within 54 -- Do double tap detection based on taps that occur within
50 -- DOUBLE_CLICK_INTERVAL of each other and with a certain 55 -- DOUBLE_CLICK_INTERVAL of each other and with a certain
51 -- distance of each other. 56 -- distance of each other.
52 local now = CCTime:getTime() 57 local now = CCTime:getTime()
53 local distance = 0 58 local distance = 0
54 if lasttap_location then 59 if lasttap_location then
55 distance = ccpDistance(ccp(x, y), ccp(lasttap_location[1], lasttap_locat ion[2])) 60 distance = ccpDistance(ccp(x, y), ccp(lasttap_location[1], lasttap_locat ion[2]))
56 end 61 end
57 if (now - lasttap_time > touch_handler.DOUBLE_CLICK_INTERVAL 62 if (now - lasttap_time > touch_handler.DOUBLE_CLICK_INTERVAL
58 or distance > touch_handler.DOUBLE_CLICK_TOLERANCE) then 63 or distance > touch_handler.DOUBLE_CLICK_TOLERANCE) then
59 lasttap_count = 1 64 lasttap_count = 1
60 else 65 else
61 lasttap_count = lasttap_count + 1 66 lasttap_count = lasttap_count + 1
62 end 67 end
63 lasttap_time = now 68 lasttap_time = now
64 lasttap_location = { x, y } 69 lasttap_location = { x, y }
65 70
66 tapcount = lasttap_count 71 tapcount = lasttap_count
67 util.Log('tap ' .. tapcount) 72 util.Log('tapcount ' .. tapcount)
68 73
69 local objects = FindTaggedBodiesAt(x, y, 0x1) 74 local objects = FindTaggedBodiesAt(x, y, 0x1)
70 75
71 for _, obj_def in pairs(objects) do 76 for _, obj_def in pairs(objects) do
72 if obj_def.script and obj_def.script.OnTouchBegan then 77 if obj_def.script and obj_def.script.OnTouchBegan then
73 if obj_def.script.OnTouchBegan(obj_def, x, y, tapcount) then 78 if obj_def.script.OnTouchBegan(obj_def, x, y, tapcount) then
74 touch_state.touchid = touchid 79 touch_state.touchid = touchid
75 touch_state.receiver = obj_def 80 touch_state.receiver = obj_def
76 touch_state.is_object = true 81 touch_state.is_object = true
77 return true 82 return true
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 if touch_type == 'began' then 142 if touch_type == 'began' then
138 return OnTouchBegan(x, y, touchid) 143 return OnTouchBegan(x, y, touchid)
139 elseif touch_type == 'moved' then 144 elseif touch_type == 'moved' then
140 return OnTouchMoved(x, y, touchid) 145 return OnTouchMoved(x, y, touchid)
141 elseif touch_type == 'ended' then 146 elseif touch_type == 'ended' then
142 return OnTouchEnded(x, y, touchid) 147 return OnTouchEnded(x, y, touchid)
143 end 148 end
144 end 149 end
145 150
146 return touch_handler 151 return touch_handler
OLDNEW
« no previous file with comments | « nacltoons/data/res/sample_game/level3.def ('k') | nacltoons/data/res/util.lua » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698