OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dartcombatlib; | 5 part of dartcombatlib; |
6 | 6 |
7 /** A local player (API known to the main isolate when creating players). */ | 7 /** A local player (API known to the main isolate when creating players). */ |
8 class Player { | 8 class Player { |
9 | 9 |
10 factory Player() => new PlayerImpl(); | 10 factory Player() => new PlayerImpl(); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 * which contains the actual enemy state. | 68 * which contains the actual enemy state. |
69 */ | 69 */ |
70 class EnemyImpl implements Enemy { | 70 class EnemyImpl implements Enemy { |
71 SendPort portToEnemy; | 71 SendPort portToEnemy; |
72 | 72 |
73 EnemyImpl(this.portToEnemy) {} | 73 EnemyImpl(this.portToEnemy) {} |
74 | 74 |
75 Future<int> ready() { | 75 Future<int> ready() { |
76 Completer<int> res = new Completer<int>(); | 76 Completer<int> res = new Completer<int>(); |
77 return portToEnemy.call({ "action" : MessageIds.ENEMY_IS_READY }) | 77 return portToEnemy.call({ "action" : MessageIds.ENEMY_IS_READY }) |
78 .transform((message) { | 78 .then((message) { |
79 if (!message[0]) throw message[1]; | 79 if (!message[0]) throw message[1]; |
80 return 0; | 80 return 0; |
81 }); | 81 }); |
82 } | 82 } |
83 | 83 |
84 Future<int> shoot(int x, int y) { | 84 Future<int> shoot(int x, int y) { |
85 Completer<int> res = new Completer<int>(); | 85 Completer<int> res = new Completer<int>(); |
86 return portToEnemy.call({ "action" : MessageIds.SHOOT, "args" : [x, y] }) | 86 return portToEnemy.call({ "action" : MessageIds.SHOOT, "args" : [x, y] }) |
87 .transform((message) { | 87 .then((message) { |
88 if (!message[0]) throw message[1]; | 88 if (!message[0]) throw message[1]; |
89 return message[1][0]; | 89 return message[1][0]; |
90 }); | 90 }); |
91 } | 91 } |
92 } | 92 } |
93 | 93 |
94 /** Collection of message IDs used to communicate with player isolates. */ | 94 /** Collection of message IDs used to communicate with player isolates. */ |
95 class MessageIds { | 95 class MessageIds { |
96 /** message to set up a new player. */ | 96 /** message to set up a new player. */ |
97 static const SETUP = 1; | 97 static const SETUP = 1; |
98 | 98 |
99 /** message to initialize the enemy of a player. */ | 99 /** message to initialize the enemy of a player. */ |
100 static const SET_ENEMY = 2; | 100 static const SET_ENEMY = 2; |
101 | 101 |
102 /** message indicating that the enemy is ready to play. */ | 102 /** message indicating that the enemy is ready to play. */ |
103 static const ENEMY_IS_READY = 3; | 103 static const ENEMY_IS_READY = 3; |
104 | 104 |
105 /** message describing a shoot action. */ | 105 /** message describing a shoot action. */ |
106 static const SHOOT = 4; | 106 static const SHOOT = 4; |
107 | 107 |
108 /** message to set up a test port, used to make tests non-flaky. */ | 108 /** message to set up a test port, used to make tests non-flaky. */ |
109 static const SET_PORT_FOR_TEST = 5; | 109 static const SET_PORT_FOR_TEST = 5; |
110 } | 110 } |
OLD | NEW |