1 | var _ = require('underscore');
|
2 | var Nodulator = require('../');
|
3 | var request = require('superagent');
|
4 | var async = require('async');
|
5 |
|
6 | var weaponConfig = {
|
7 | schema: {
|
8 | hitPoints: 'int'
|
9 | }
|
10 | };
|
11 |
|
12 | var Weapons = Nodulator.Resource('weapon', Nodulator.Route.MultiRoute, weaponConfig);
|
13 |
|
14 | var unitConfig = {
|
15 | abstract: true,
|
16 | schema: {
|
17 | level: 'int',
|
18 | life: 'int',
|
19 | weapon: {
|
20 | type: Weapons,
|
21 | localKey: 'weaponId',
|
22 | optional: true
|
23 | },
|
24 | weaponId: {
|
25 | type: 'int',
|
26 | optional: true
|
27 | }
|
28 | }
|
29 | };
|
30 |
|
31 | var Units = Nodulator.Resource('unit', unitConfig);
|
32 |
|
33 | Units.prototype.Attack = Units._WrapPromise(function (target, done) {
|
34 | target.life -= this.weapon.hitPoints;
|
35 | target.Save(done);
|
36 | });
|
37 |
|
38 | Units.prototype.LevelUp = Units._WrapPromise(function (done) {
|
39 | this.level++;
|
40 | this.Save(done);
|
41 | });
|
42 |
|
43 | Units.Init();
|
44 |
|
45 | var UnitRoute = Nodulator.Route.MultiRoute.Extend();
|
46 |
|
47 | UnitRoute.prototype.Config = function () {
|
48 | Nodulator.Route.MultiRoute.prototype.Config.apply(this);
|
49 |
|
50 | this.Put('/:id/levelUp', function (Req) {
|
51 | Req.instance.LevelUp();
|
52 | });
|
53 |
|
54 | this.Put('/:id/attack/:targetId', function (Req) {
|
55 |
|
56 | var TargetResource;
|
57 | if (this.name === 'players')
|
58 | TargetResource = Monsters;
|
59 | else if (this.name === 'monsters')
|
60 | TargetResource = Players;
|
61 |
|
62 | var watcher = Nodulator.Watch(function () {
|
63 | if (TargetResource.error() !== undefined)
|
64 | Req.Send(TargetResource.error());
|
65 | });
|
66 |
|
67 | TargetResource.Fetch(parseInt(Req.params.targetId), function (err, target) {
|
68 | Req.instance.Attack(target, function (err) {
|
69 | Req.Send(target);
|
70 | watcher.Stop();
|
71 | });
|
72 | });
|
73 | });
|
74 | };
|
75 |
|
76 | var Players = Units.Extend('player', UnitRoute);
|
77 | var Monsters = Units.Extend('monster', UnitRoute);
|
78 |
|
79 |
|
80 |
|
81 |
|
82 |
|
83 |
|
84 | weaponId = [];
|
85 |
|
86 | async.series({
|
87 | addWeapon: function (done) {
|
88 | Nodulator.client.Post('/api/1/weapons', {hitPoints: 2}, function (err, res) {
|
89 | weaponId.push(res.body.id);
|
90 | done(err, res.body);
|
91 | });
|
92 | },
|
93 |
|
94 | addWeapon2: function (done) {
|
95 | Nodulator.client.Post('/api/1/weapons', {hitPoints: 1}, function (err, res) {
|
96 | weaponId.push(res.body.id);
|
97 | done(err, res.body);
|
98 | });
|
99 | },
|
100 |
|
101 | addPlayer: function (done) {
|
102 | Nodulator.client.Post('/api/1/players', {level: 1, life: 100, weaponId: weaponId[0]}, function (err, res) { done(err, res.body); });
|
103 | },
|
104 |
|
105 | testGet: function (done) {
|
106 | Nodulator.client.Get('/api/1/players', function (err, res) { done(err, res.body); });
|
107 | },
|
108 |
|
109 | levelUp: function (done) {
|
110 | Nodulator.client.Put('/api/1/players/1/levelUp', {}, function (err, res) { done(err, res.body); });
|
111 | },
|
112 |
|
113 | levelUp2: function (done) {
|
114 | Nodulator.client.Put('/api/1/players/1/levelUp', {}, function (err, res) { done(err, res.body); });
|
115 | },
|
116 |
|
117 | addMonster: function (done) {
|
118 | Nodulator.client.Post('/api/1/monsters', {level: 1, life: 20, weaponId: weaponId[1]}, function (err, res) { done(err, res.body); });
|
119 | },
|
120 |
|
121 | testGetMonster: function (done) {
|
122 | Nodulator.client.Get('/api/1/monsters', function (err, res) { done(err, res.body); });
|
123 | },
|
124 |
|
125 | levelUpMonster: function (done) {
|
126 | Nodulator.client.Put('/api/1/monsters/1/levelUp', {}, function (err, res) { done(err, res.body); });
|
127 | },
|
128 |
|
129 | levelUpMonster2: function (done) {
|
130 | Nodulator.client.Put('/api/1/monsters/1/levelUp', {}, function (err, res) { done(err, res.body); });
|
131 | },
|
132 |
|
133 | playerAttack: function (done) {
|
134 | Nodulator.client.Put('/api/1/players/1/attack/1', {}, function (err, res) { done(err, res.body); });
|
135 | },
|
136 |
|
137 | monsterAttack: function (done) {
|
138 | Nodulator.client.Put('/api/1/monsters/1/attack/1', {}, function (err, res) { done(err, res.body); });
|
139 | },
|
140 |
|
141 | monsterAttack1: function (done) {
|
142 | Nodulator.client.Put('/api/1/monsters/1/attack/1', {}, function (err, res) { done(err, res.body); });
|
143 | },
|
144 |
|
145 | monsterAttack2: function (done) {
|
146 | Nodulator.client.Put('/api/1/monsters/1/attack/1', {}, function (err, res) { done(err, res.body); });
|
147 | },
|
148 |
|
149 | monsterAttack3: function (done) {
|
150 | Nodulator.client.Put('/api/1/monsters/1/attack/1', {}, function (err, res) { done(err, res.body); });
|
151 | },
|
152 |
|
153 | monsterAttack4: function (done) {
|
154 | Nodulator.client.Put('/api/1/monsters/1/attack/1', {}, function (err, res) { done(err, res.body); });
|
155 | }
|
156 | }, function (err, results) {
|
157 | util = require('util');
|
158 | util.debug(util.inspect(err, {depth: null}));
|
159 | util.debug(util.inspect(results, {depth: null}));
|
160 | });
|