/** Should only be called from Bomb.Blow() */ public void BlowBomb(Bomb bomb) { int cx = bomb.GetCx(); int cy = bomb.GetCy(); bomb.RemoveFromField(); SetFlame(bomb, cx, cy); bomb.player.OnBombBlown(bomb); bool up = true, down = true, left = true, right = true; int radius = bomb.GetRadius(); for (int i = 1; i <= radius && (up || down || left || right); ++i) { left = left && SetFlame(bomb, cx - i, cy); up = up && SetFlame(bomb, cx, cy - i); down = down && SetFlame(bomb, cx, cy + i); right = right && SetFlame(bomb, cx + i, cy); } }
private void ReadBombState(NetIncomingMessage msg, Player p, Bomb b) { bool active = msg.ReadBoolean(); if (active) { float remains = (float)(msg.ReadTime(false) - NetTime.Now); float px = msg.ReadFloat(); float py = msg.ReadFloat(); Direction dir = (Direction)msg.ReadByte(); float speed = msg.ReadFloat(); bool jelly = msg.ReadBoolean(); bool trigger = msg.ReadBoolean(); if (!b.isActive) { b.player = p; b.Activate(); game.Field.SetBomb(b); } b.timeRemains = remains; b.SetPos(px, py); b.SetSpeed(speed); b.SetJelly(jelly); b.SetTrigger(trigger); // TODO: jelly & trigger } else if (b.isActive) { b.Deactivate(); b.RemoveFromField(); } }