1
This commit is contained in:
parent
3478d2ec58
commit
d5bd6e9966
@ -1392,35 +1392,7 @@ RoomObstacle* Creature::SummonObstacle(int id, const a8::Vec2& pos)
|
|||||||
RoomObstacle* obstacle = room->CreateObstacle(id, pos.x, pos.y);
|
RoomObstacle* obstacle = room->CreateObstacle(id, pos.x, pos.y);
|
||||||
if (obstacle) {
|
if (obstacle) {
|
||||||
obstacle->master.Attach(this);
|
obstacle->master.Attach(this);
|
||||||
if (obstacle->meta->i->thing_type() == kObstacleSelfExplosion) {
|
obstacle->Active();
|
||||||
obstacle->Active();
|
|
||||||
} else {
|
|
||||||
room->xtimer.AddRepeatTimerAndAttach
|
|
||||||
(
|
|
||||||
SERVER_FRAME_RATE,
|
|
||||||
a8::XParams()
|
|
||||||
.SetSender(obstacle),
|
|
||||||
[] (const a8::XParams& param)
|
|
||||||
{
|
|
||||||
RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData();
|
|
||||||
obstacle->ActiveTimerFunc();
|
|
||||||
},
|
|
||||||
&obstacle->xtimer_attacher.timer_list_
|
|
||||||
);
|
|
||||||
|
|
||||||
room->xtimer.AddRepeatTimerAndAttach
|
|
||||||
(
|
|
||||||
SERVER_FRAME_RATE,
|
|
||||||
a8::XParams()
|
|
||||||
.SetSender(obstacle),
|
|
||||||
[] (const a8::XParams& param)
|
|
||||||
{
|
|
||||||
RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData();
|
|
||||||
obstacle->UpdateTimerFunc();
|
|
||||||
},
|
|
||||||
&obstacle->xtimer_attacher.timer_list_
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
@ -325,32 +325,105 @@ void RoomObstacle::Active()
|
|||||||
switch (meta->i->thing_type()) {
|
switch (meta->i->thing_type()) {
|
||||||
case kObstacleSelfExplosion:
|
case kObstacleSelfExplosion:
|
||||||
{
|
{
|
||||||
room->xtimer.AddDeadLineTimerAndAttach
|
ActiveSelfExplosion();
|
||||||
(
|
}
|
||||||
meta->i->time() / FRAME_RATE_MS,
|
break;
|
||||||
a8::XParams()
|
case kObstacleMine:
|
||||||
.SetSender(this),
|
{
|
||||||
[] (const a8::XParams& param)
|
ActiveMine();
|
||||||
{
|
}
|
||||||
RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData();
|
break;
|
||||||
obstacle->room->xtimer.AddRepeatTimerAndAttach
|
case kObstacleTrap:
|
||||||
(
|
{
|
||||||
obstacle->meta->i->explosion_interval() / FRAME_RATE_MS,
|
ActiveTrap();
|
||||||
a8::XParams()
|
|
||||||
.SetSender(obstacle),
|
|
||||||
[] (const a8::XParams& param)
|
|
||||||
{
|
|
||||||
RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData();
|
|
||||||
obstacle->SpecExplosion();
|
|
||||||
},
|
|
||||||
&obstacle->xtimer_attacher.timer_list_
|
|
||||||
);
|
|
||||||
},
|
|
||||||
&xtimer_attacher.timer_list_
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RoomObstacle::ActiveSelfExplosion()
|
||||||
|
{
|
||||||
|
room->xtimer.AddDeadLineTimerAndAttach
|
||||||
|
(
|
||||||
|
meta->i->time() / FRAME_RATE_MS,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(this),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData();
|
||||||
|
obstacle->room->xtimer.AddRepeatTimerAndAttach
|
||||||
|
(
|
||||||
|
obstacle->meta->i->explosion_interval() / FRAME_RATE_MS,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(obstacle),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData();
|
||||||
|
obstacle->SpecExplosion();
|
||||||
|
},
|
||||||
|
&obstacle->xtimer_attacher.timer_list_
|
||||||
|
);
|
||||||
|
},
|
||||||
|
&xtimer_attacher.timer_list_
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RoomObstacle::ActiveMine()
|
||||||
|
{
|
||||||
|
room->xtimer.AddRepeatTimerAndAttach
|
||||||
|
(
|
||||||
|
SERVER_FRAME_RATE,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(this),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData();
|
||||||
|
obstacle->ActiveTimerFunc();
|
||||||
|
},
|
||||||
|
&xtimer_attacher.timer_list_
|
||||||
|
);
|
||||||
|
|
||||||
|
room->xtimer.AddRepeatTimerAndAttach
|
||||||
|
(
|
||||||
|
SERVER_FRAME_RATE,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(this),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData();
|
||||||
|
obstacle->UpdateTimerFunc();
|
||||||
|
},
|
||||||
|
&xtimer_attacher.timer_list_
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RoomObstacle::ActiveTrap()
|
||||||
|
{
|
||||||
|
room->xtimer.AddRepeatTimerAndAttach
|
||||||
|
(
|
||||||
|
SERVER_FRAME_RATE,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(this),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData();
|
||||||
|
obstacle->ActiveTimerFunc();
|
||||||
|
},
|
||||||
|
&xtimer_attacher.timer_list_
|
||||||
|
);
|
||||||
|
|
||||||
|
room->xtimer.AddRepeatTimerAndAttach
|
||||||
|
(
|
||||||
|
SERVER_FRAME_RATE,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(this),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData();
|
||||||
|
obstacle->UpdateTimerFunc();
|
||||||
|
},
|
||||||
|
&xtimer_attacher.timer_list_
|
||||||
|
);
|
||||||
|
}
|
||||||
|
@ -25,6 +25,9 @@ class RoomObstacle : public Obstacle
|
|||||||
private:
|
private:
|
||||||
void Explosion();
|
void Explosion();
|
||||||
void SpecExplosion();
|
void SpecExplosion();
|
||||||
|
void ActiveSelfExplosion();
|
||||||
|
void ActiveMine();
|
||||||
|
void ActiveTrap();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool temp_through_ = false;
|
bool temp_through_ = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user