Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
manager/EATouchManager.cpp@1:f04bcaea1d60, 2010-03-04 (annotated)
- Committer:
- richardparker
- Date:
- Thu Mar 04 10:54:06 2010 +0000
- Revision:
- 1:f04bcaea1d60
- Child:
- 4:f8f7f4f9c58d
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| richardparker | 1:f04bcaea1d60 | 1 | #include "mbed.h" |
| richardparker | 1:f04bcaea1d60 | 2 | #include "EATouchManager.h" |
| richardparker | 1:f04bcaea1d60 | 3 | |
| richardparker | 1:f04bcaea1d60 | 4 | #include "../screen/EATouch.h" |
| richardparker | 1:f04bcaea1d60 | 5 | #include "EAHitBox.h" |
| richardparker | 1:f04bcaea1d60 | 6 | |
| richardparker | 1:f04bcaea1d60 | 7 | EATouchManager::EATouchManager(EATouch& touch) |
| richardparker | 1:f04bcaea1d60 | 8 | : _touch(touch), |
| richardparker | 1:f04bcaea1d60 | 9 | _head(NULL) |
| richardparker | 1:f04bcaea1d60 | 10 | { |
| richardparker | 1:f04bcaea1d60 | 11 | } |
| richardparker | 1:f04bcaea1d60 | 12 | |
| richardparker | 1:f04bcaea1d60 | 13 | EATouchManager::~EATouchManager() |
| richardparker | 1:f04bcaea1d60 | 14 | { |
| richardparker | 1:f04bcaea1d60 | 15 | // Free any memory associated with the list. |
| richardparker | 1:f04bcaea1d60 | 16 | clearHitBoxes(); |
| richardparker | 1:f04bcaea1d60 | 17 | } |
| richardparker | 1:f04bcaea1d60 | 18 | |
| richardparker | 1:f04bcaea1d60 | 19 | void EATouchManager::tick() |
| richardparker | 1:f04bcaea1d60 | 20 | { |
| richardparker | 1:f04bcaea1d60 | 21 | short x = 0; |
| richardparker | 1:f04bcaea1d60 | 22 | short y = 0; |
| richardparker | 1:f04bcaea1d60 | 23 | bool p = false; |
| richardparker | 1:f04bcaea1d60 | 24 | |
| richardparker | 1:f04bcaea1d60 | 25 | // Get the touch. |
| richardparker | 1:f04bcaea1d60 | 26 | _touch.touch(x, y, p); |
| richardparker | 1:f04bcaea1d60 | 27 | |
| richardparker | 1:f04bcaea1d60 | 28 | // Check if hit target. |
| richardparker | 1:f04bcaea1d60 | 29 | if (p == true) |
| richardparker | 1:f04bcaea1d60 | 30 | { |
| richardparker | 1:f04bcaea1d60 | 31 | _doHits(x, y); |
| richardparker | 1:f04bcaea1d60 | 32 | } |
| richardparker | 1:f04bcaea1d60 | 33 | } |
| richardparker | 1:f04bcaea1d60 | 34 | |
| richardparker | 1:f04bcaea1d60 | 35 | void EATouchManager::_doHits(short x, short y) |
| richardparker | 1:f04bcaea1d60 | 36 | { |
| richardparker | 1:f04bcaea1d60 | 37 | EAHitBox* current = _head; |
| richardparker | 1:f04bcaea1d60 | 38 | |
| richardparker | 1:f04bcaea1d60 | 39 | while (current != NULL) |
| richardparker | 1:f04bcaea1d60 | 40 | { |
| richardparker | 1:f04bcaea1d60 | 41 | // Do the check this will fire the pointer function if it does. |
| richardparker | 1:f04bcaea1d60 | 42 | current->checkContains(x, y); |
| richardparker | 1:f04bcaea1d60 | 43 | |
| richardparker | 1:f04bcaea1d60 | 44 | // Get the next item in the linked list. |
| richardparker | 1:f04bcaea1d60 | 45 | current = current->next(); |
| richardparker | 1:f04bcaea1d60 | 46 | } |
| richardparker | 1:f04bcaea1d60 | 47 | } |
| richardparker | 1:f04bcaea1d60 | 48 | |
| richardparker | 1:f04bcaea1d60 | 49 | void EATouchManager::deleteHitBox(EAHitBox* box) |
| richardparker | 1:f04bcaea1d60 | 50 | { |
| richardparker | 1:f04bcaea1d60 | 51 | EAHitBox* current = _head; |
| richardparker | 1:f04bcaea1d60 | 52 | EAHitBox* last = NULL; |
| richardparker | 1:f04bcaea1d60 | 53 | EAHitBox* next = NULL; |
| richardparker | 1:f04bcaea1d60 | 54 | |
| richardparker | 1:f04bcaea1d60 | 55 | // If not valid then just return. |
| richardparker | 1:f04bcaea1d60 | 56 | if (box == NULL) |
| richardparker | 1:f04bcaea1d60 | 57 | { |
| richardparker | 1:f04bcaea1d60 | 58 | return; |
| richardparker | 1:f04bcaea1d60 | 59 | } |
| richardparker | 1:f04bcaea1d60 | 60 | |
| richardparker | 1:f04bcaea1d60 | 61 | while (current != NULL) |
| richardparker | 1:f04bcaea1d60 | 62 | { |
| richardparker | 1:f04bcaea1d60 | 63 | // Get the next item in the linked list. |
| richardparker | 1:f04bcaea1d60 | 64 | next = current->next(); |
| richardparker | 1:f04bcaea1d60 | 65 | |
| richardparker | 1:f04bcaea1d60 | 66 | // If the pointer matches the one that want to delete then first |
| richardparker | 1:f04bcaea1d60 | 67 | // remove from the list, put the link in from previous to next |
| richardparker | 1:f04bcaea1d60 | 68 | // and actually delet the data. |
| richardparker | 1:f04bcaea1d60 | 69 | if (box == current) |
| richardparker | 1:f04bcaea1d60 | 70 | { |
| richardparker | 1:f04bcaea1d60 | 71 | if ((next != NULL) && (last == NULL)) |
| richardparker | 1:f04bcaea1d60 | 72 | { |
| richardparker | 1:f04bcaea1d60 | 73 | // If there is an item after but none before then the next |
| richardparker | 1:f04bcaea1d60 | 74 | // becomes the root item. |
| richardparker | 1:f04bcaea1d60 | 75 | _head = next; |
| richardparker | 1:f04bcaea1d60 | 76 | } |
| richardparker | 1:f04bcaea1d60 | 77 | else if ((next != NULL) && (last != NULL)) |
| richardparker | 1:f04bcaea1d60 | 78 | { |
| richardparker | 1:f04bcaea1d60 | 79 | // There was a last and there is a next so need to stitch |
| richardparker | 1:f04bcaea1d60 | 80 | // list together removing the current. |
| richardparker | 1:f04bcaea1d60 | 81 | last->setNext(next); |
| richardparker | 1:f04bcaea1d60 | 82 | } |
| richardparker | 1:f04bcaea1d60 | 83 | else if ((next == NULL) && (last == NULL)) |
| richardparker | 1:f04bcaea1d60 | 84 | { |
| richardparker | 1:f04bcaea1d60 | 85 | // If there is no item after this one then nothing else to do. |
| richardparker | 1:f04bcaea1d60 | 86 | _head = NULL; |
| richardparker | 1:f04bcaea1d60 | 87 | } |
| richardparker | 1:f04bcaea1d60 | 88 | else if ((next == NULL) && (last != NULL)) |
| richardparker | 1:f04bcaea1d60 | 89 | { |
| richardparker | 1:f04bcaea1d60 | 90 | // Last is now the end of the list. |
| richardparker | 1:f04bcaea1d60 | 91 | last->setNext(NULL); |
| richardparker | 1:f04bcaea1d60 | 92 | } |
| richardparker | 1:f04bcaea1d60 | 93 | |
| richardparker | 1:f04bcaea1d60 | 94 | // Actually get rid of memory. |
| richardparker | 1:f04bcaea1d60 | 95 | delete current; |
| richardparker | 1:f04bcaea1d60 | 96 | current = NULL; |
| richardparker | 1:f04bcaea1d60 | 97 | break; |
| richardparker | 1:f04bcaea1d60 | 98 | } |
| richardparker | 1:f04bcaea1d60 | 99 | |
| richardparker | 1:f04bcaea1d60 | 100 | // Swap pointers over. |
| richardparker | 1:f04bcaea1d60 | 101 | last = current; |
| richardparker | 1:f04bcaea1d60 | 102 | current = next; |
| richardparker | 1:f04bcaea1d60 | 103 | } |
| richardparker | 1:f04bcaea1d60 | 104 | } |
| richardparker | 1:f04bcaea1d60 | 105 | |
| richardparker | 1:f04bcaea1d60 | 106 | EAHitBox* EATouchManager::createHitBox() |
| richardparker | 1:f04bcaea1d60 | 107 | { |
| richardparker | 1:f04bcaea1d60 | 108 | EAHitBox* box = new EAHitBox(); |
| richardparker | 1:f04bcaea1d60 | 109 | |
| richardparker | 1:f04bcaea1d60 | 110 | // If able to create then add the pointer to the list and return. |
| richardparker | 1:f04bcaea1d60 | 111 | if (box != NULL) |
| richardparker | 1:f04bcaea1d60 | 112 | { |
| richardparker | 1:f04bcaea1d60 | 113 | box->setNext(_head); |
| richardparker | 1:f04bcaea1d60 | 114 | _head = box; |
| richardparker | 1:f04bcaea1d60 | 115 | } |
| richardparker | 1:f04bcaea1d60 | 116 | |
| richardparker | 1:f04bcaea1d60 | 117 | return box; |
| richardparker | 1:f04bcaea1d60 | 118 | } |
| richardparker | 1:f04bcaea1d60 | 119 | |
| richardparker | 1:f04bcaea1d60 | 120 | void EATouchManager::clearHitBoxes() |
| richardparker | 1:f04bcaea1d60 | 121 | { |
| richardparker | 1:f04bcaea1d60 | 122 | EAHitBox* current = _head; |
| richardparker | 1:f04bcaea1d60 | 123 | EAHitBox* next = NULL; |
| richardparker | 1:f04bcaea1d60 | 124 | |
| richardparker | 1:f04bcaea1d60 | 125 | // Delete each hit box in turn. |
| richardparker | 1:f04bcaea1d60 | 126 | while (current != NULL) |
| richardparker | 1:f04bcaea1d60 | 127 | { |
| richardparker | 1:f04bcaea1d60 | 128 | next = current->next(); |
| richardparker | 1:f04bcaea1d60 | 129 | |
| richardparker | 1:f04bcaea1d60 | 130 | delete current; |
| richardparker | 1:f04bcaea1d60 | 131 | current = NULL; |
| richardparker | 1:f04bcaea1d60 | 132 | |
| richardparker | 1:f04bcaea1d60 | 133 | current = next; |
| richardparker | 1:f04bcaea1d60 | 134 | } |
| richardparker | 1:f04bcaea1d60 | 135 | |
| richardparker | 1:f04bcaea1d60 | 136 | // Reset the root. |
| richardparker | 1:f04bcaea1d60 | 137 | _head = NULL; |
| richardparker | 1:f04bcaea1d60 | 138 | |
| richardparker | 1:f04bcaea1d60 | 139 | } |
| richardparker | 1:f04bcaea1d60 | 140 | |
| richardparker | 1:f04bcaea1d60 | 141 |