Ejemplo n.º 1
0
static void test_group(CuTest * tc)
{
    unit *u;
    region *r;
    faction *f;
    group *g;

    test_cleanup();
    test_create_world();
    r = findregion(0, 0);
    f = test_create_faction(0);
    assert(r && f);
    u = test_create_unit(f, r);
    assert(u);
    CuAssertTrue(tc, join_group(u, "hodor"));
    CuAssertPtrNotNull(tc, (g = get_group(u)));
    CuAssertStrEquals(tc, "hodor", g->name);
    CuAssertIntEquals(tc, 1, g->members);
    set_group(u, 0);
    CuAssertIntEquals(tc, 0, g->members);
    CuAssertPtrEquals(tc, 0, get_group(u));
    set_group(u, g);
    CuAssertIntEquals(tc, 1, g->members);
    CuAssertPtrEquals(tc, g, get_group(u));
    test_cleanup();
}
Ejemplo n.º 2
0
void
BadGuy::set_state(State state_)
{
  if(this->state == state_)
    return;

  State laststate = this->state;
  this->state = state_;
  switch(state_) {
    case STATE_SQUISHED:
      state_timer.start(SQUISH_TIME);
      break;
    case STATE_ACTIVE:
      set_group(colgroup_active);
      //bbox.set_pos(start_position);
      break;
    case STATE_INACTIVE:
      // was the badguy dead anyway?
      if(laststate == STATE_SQUISHED || laststate == STATE_FALLING) {
        remove_me();
      }
      set_group(COLGROUP_DISABLED);
      break;
    case STATE_FALLING:
      set_group(COLGROUP_DISABLED);
      break;
    default:
      break;
  }
}
Ejemplo n.º 3
0
void
IceCrusher::set_state(IceCrusherState state_, bool force)
{
  if ((state == state_) && (!force)) return;
  switch (state_) {
    case IDLE:
      set_group(COLGROUP_STATIC);
      physic.enable_gravity (false);
      m_sprite->set_action("idle");
      break;
    case CRUSHING:
      set_group(COLGROUP_MOVING_STATIC);
      physic.reset ();
      physic.enable_gravity (true);
      m_sprite->set_action("crushing");
      break;
    case RECOVERING:
      set_group(COLGROUP_MOVING_STATIC);
      physic.enable_gravity (false);
      m_sprite->set_action("recovering");
      break;
    default:
      log_debug << "IceCrusher in invalid state" << std::endl;
      break;
  }
  state = state_;
}
Ejemplo n.º 4
0
ScriptedObject::ScriptedObject(const ReaderMapping& lisp) :
    MovingSprite(lisp, "images/objects/bonus_block/brick.sprite", LAYER_OBJECTS, COLGROUP_MOVING_STATIC),
    ExposedObject<ScriptedObject, scripting::ScriptedObject>(this),
    physic(),
    solid(),
    physic_enabled(),
    visible(),
    new_vel_set(false),
    new_vel(),
    new_size()
{
    if (!lisp.get("name", name)) name = "";
    if(name.empty()) {
        name = "unnamed" + std::to_string(graphicsRandom.rand());
        log_warning << "Scripted object must have a name specified, setting to: " << name << std::endl;
    }

    if (!lisp.get("solid", solid)) solid = true;
    if (!lisp.get("physic-enabled", physic_enabled)) physic_enabled = true;
    if (!lisp.get("visible", visible)) visible = true;
    layer = reader_get_layer (lisp, /* default = */ LAYER_OBJECTS);
    if( solid ) {
        set_group( COLGROUP_MOVING_STATIC );
    } else {
        set_group( COLGROUP_DISABLED );
    }
}
Ejemplo n.º 5
0
void
Player::set_visible(bool visible_)
{
  this->visible = visible_;
  if( visible_ )
    set_group(COLGROUP_MOVING);
  else
    set_group(COLGROUP_DISABLED);
}
Ejemplo n.º 6
0
void
ScriptedObject::set_solid(bool solid_)
{
  this->solid = solid_;
  if( solid ){
    set_group( COLGROUP_MOVING_STATIC );
  } else {
    set_group( COLGROUP_DISABLED );
  }
}
Ejemplo n.º 7
0
dvl::pid_table::pid_table()
{
	//register internal ids
	set_group(pid().set_group(GROUP_INTERNAL), L"INTERNAL");

	set_element(EMPTY, L"EMPTY");
	set_element(PARSER, L"PARSER");

	//register diagnostic routines
	set_group(pid().set_group(GROUP_DIAGNOSTIC), L"DIAGNOSTIC");

	set_element(ECHO, L"ECHO");
}
Ejemplo n.º 8
0
void recoder::init()
{
    guard g(m_lock);

    set_group("recoder");
    set_state(STATE_WAIT);
    init_timeout(FLAGS_recoder_timeout);

    /* reset counters */
    m_budget = 0;
    m_rec_pkt_count = 0;

    m_io->read_one_hops(_key.dst);
    helper_msg best_helper = m_io->get_best_one_hop(_key.dst);
    if (best_helper.tq_total == 0) {
        VLOG(LOG_GEN) << "Recoder " << m_coder << ": No best one hop";
        m_max_budget = this->symbols()*FLAGS_fixed_overshoot;
        return;
    }

    m_io->read_link(best_helper.addr);
    m_io->read_link(_key.dst);
    e1 = ONE - m_io->get_link(best_helper.addr);
    e2 = ONE - best_helper.tq_second_hop * 4.5;  // Scale to revert hop penalty
    e3 = ONE - m_io->get_link(_key.dst);

    if (e1 == ONE || e2 == ONE || e3 == ONE) {
        VLOG(LOG_GEN) << "Recoder " << m_coder << ": Missing link estimate";
        m_max_budget = this->symbols()*FLAGS_fixed_overshoot;
        return;
    }

    m_max_budget = recoder_budget(this->symbols(), e1, e2, e3);
    VLOG(LOG_GEN) << "Recoder " << m_coder << ": Initialized" << _key;
}
Ejemplo n.º 9
0
static void
hippo_block_group_revision_update (HippoBlock *block)
{
    HippoBlockGroupRevision *block_group_revision = HIPPO_BLOCK_GROUP_REVISION(block);
    DDMDataResource *group_resource;
    DDMDataResource *revision_resource;
    HippoGroup *group = NULL;

    HIPPO_BLOCK_CLASS(hippo_block_group_revision_parent_class)->update(block);

    ddm_data_resource_get(block->resource,
                          "group", DDM_DATA_RESOURCE, &group_resource,
                          "revision", DDM_DATA_RESOURCE, &revision_resource,
                          NULL);

    if (group_resource != NULL)
        group = hippo_group_get_for_resource(group_resource);
    
    set_group(block_group_revision, group);
    update_edit_link(block_group_revision);
    update_chat_id(block_group_revision);

    if (group != NULL)
        g_object_unref(group);
}
Ejemplo n.º 10
0
void
Fish::jump()
{
  physic.set_velocity_y(FISH_JUMP_POWER);
  physic.enable_gravity(true);
  set_group(COLGROUP_MOVING);
}
Ejemplo n.º 11
0
void
WeakBlock::update(float )
{
  switch (state) {

    case STATE_NORMAL:
      break;

    case STATE_BURNING:
      if (sprite->animation_done()) {
	state = STATE_DISINTEGRATING;
	sprite->set_action("disintegrating", 1);
	flags &= ~FLAG_SOLID;
        set_group(COLGROUP_DISABLED);
      }
      break;

    case STATE_DISINTEGRATING:
      if (sprite->animation_done()) {
	remove_me();
	return;
      }
      break;

  }
}
Ejemplo n.º 12
0
void
MrIceBlock::ungrab(MovingObject& , Direction dir)
{
  this->dir = dir;
  set_state(dir == UP ? ICESTATE_FLAT : ICESTATE_KICKED);
  set_group(COLGROUP_MOVING);
}
Ejemplo n.º 13
0
void
Player::set_ghost_mode(bool enable)
{
  if (ghost_mode == enable) return;
  if (enable) {
    ghost_mode = true;
    set_group(COLGROUP_DISABLED);
    physic.enable_gravity(false);
    log_debug << "You feel lightheaded. Use movement controls to float around, press ACTION to scare badguys." << std::endl;
  } else {
    ghost_mode = false;
    set_group(COLGROUP_MOVING);
    physic.enable_gravity(true);
    log_debug << "You feel solid again." << std::endl;
  }
}
Ejemplo n.º 14
0
void Yeti::take_hit(Player& )
{
  if(safe_timer.started())
    return;

  sound_manager->play("sounds/yeti_roar.wav");
  hit_points--;

  if(hit_points <= 0) {
    // We're dead
    physic.enable_gravity(true);
    physic.set_velocity_x(0);
    physic.set_velocity_y(0);

    state = SQUISHED;
    state_timer.start(SQUISH_TIME);
    set_group(COLGROUP_MOVING_ONLY_STATIC);
    sprite->set_action("dead");

    if (countMe) Sector::current()->get_level()->stats.badguys++;

    if(dead_script != "") {
      std::istringstream stream(dead_script);
      Sector::current()->run_script(stream, "Yeti - dead-script");
    }
  }
  else {
    safe_timer.start(SAFE_TIME);
  }
}
Ejemplo n.º 15
0
void item_palette::setup(const config& cfg)
{

	for (const config& group : cfg.child_range("item_group")) {

		groups_.push_back(item_group(group));

		for (const config& item : group.child_range("item")) {

			item_map_.insert(std::pair<std::string, overlay>(item["id"], overlay(item)));
			group_map_[group["id"]].push_back(item["id"]);
			if (!group["core"].to_bool(false))
				non_core_items_.insert(item["id"]);
		}
		nmax_items_ = std::max(nmax_items_, group_map_[group["id"]].size());
	}

	select_fg_item("anvil");
	select_bg_item("altar");

	// Set the default group
	set_group("items");

	if(active_group().empty()) {
		ERR_ED << "No items found." << std::endl;
	}
}
Ejemplo n.º 16
0
Block::Block(const ReaderMapping& lisp, const std::string& sprite_file) :
  sprite(),
  sprite_name(),
  default_sprite_name(),
  bouncing(false),
  breaking(false),
  bounce_dir(0),
  bounce_offset(0),
  original_y(-1)
{
  lisp.get("x", bbox.p1.x);
  lisp.get("y", bbox.p1.y);

  std::string sf;
  lisp.get("sprite", sf);
  if (sf.empty() || !PHYSFS_exists(sf.c_str())) {
    sf = sprite_file;
  }
  sprite = SpriteManager::current()->create(sf);
  sprite_name = sf;
  default_sprite_name = sprite_name;

  bbox.set_size(32, 32.1f);
  set_group(COLGROUP_STATIC);
  SoundManager::current()->preload("sounds/upgrade.wav");
  SoundManager::current()->preload("sounds/brick.wav");
}
Ejemplo n.º 17
0
Wind::Wind(const ReaderMapping& reader) :
  blowing(true),
  speed(),
  acceleration(100),
  elapsed_time(0)
{
  reader.get("name", name);
  reader.get("x", bbox.p1.x);
  reader.get("y", bbox.p1.y);
  float w = 32, h = 32;
  reader.get("width", w);
  reader.get("height", h);
  bbox.set_size(w, h);

  reader.get("blowing", blowing);

  float speed_x = 0, speed_y = 0;
  reader.get("speed-x", speed_x);
  reader.get("speed-y", speed_y);
  speed = Vector(speed_x, speed_y);

  reader.get("acceleration", acceleration);

  set_group(COLGROUP_TOUCHABLE);
}
Ejemplo n.º 18
0
void
UnstableTile::update(float elapsed_time)
{
  switch (state) {

    case STATE_NORMAL:
      break;

    case STATE_CRUMBLING:
      if (sprite->animation_done()) {
        state = STATE_DISINTEGRATING;
        sprite->set_action("disintegrating", 1);
        set_group(COLGROUP_DISABLED);
        physic.enable_gravity(true);
      }
      break;

    case STATE_DISINTEGRATING:
      movement = physic.get_movement(elapsed_time);
      if (sprite->animation_done()) {
	remove_me();
	return;
      }
      break;
  }
}
Ejemplo n.º 19
0
static Cmdret conf_syntax(List *args)
{
  log_msg("CONFIG", "conf_syntax");
  char *group = list_arg(args, 1, VAR_STRING);
  List *words = list_arg(args, 2, VAR_LIST);
  char *single = list_arg(args, 2, VAR_STRING);
  if (!group && (!words || !single))
    return NORET;

  fn_group *grp = get_group(group);
  if (!grp)
    grp = set_group(group);

  if (single) {
    fn_syn syn = {
      .key = strdup(single),
      .group = grp,
    };
    set_syn(&syn);
    return NORET;
  }

  log_msg("CONFIG", "# %d", utarray_len(words->items));
  for (int i = 0; i < utarray_len(words->items); i++) {
    fn_syn syn = {
      .key = strdup(list_arg(words, i, VAR_STRING)),
      .group = grp,
    };
    set_syn(&syn);
  }
  return NORET;
}
Ejemplo n.º 20
0
Flower::Flower(BonusType _type) :
  type(_type),
  sprite(),
  drawing_effect(NO_EFFECT),
  light(1.0f,1.0f,1.0f),
  lightsprite(SpriteManager::current()->create("images/objects/lightmap_light/lightmap_light-small.sprite"))
{
  bbox.set_size(32, 32);
  lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));

  if(type == FIRE_BONUS) {
    sprite = SpriteManager::current()->create("images/powerups/fireflower/fireflower.sprite");
    SoundManager::current()->preload("sounds/fire-flower.wav");
    lightsprite->set_color(Color(0.3f, 0.0f, 0.0f));
  }
  else if(type == ICE_BONUS) {
    sprite = SpriteManager::current()->create("images/powerups/iceflower/iceflower.sprite");
    SoundManager::current()->preload("sounds/fire-flower.wav");
    lightsprite->set_color(Color(0.0f, 0.1f, 0.2f));
  }
  else if(type == AIR_BONUS) {
    sprite = SpriteManager::current()->create("images/powerups/airflower/airflower.sprite");
    SoundManager::current()->preload("sounds/fire-flower.wav");
    lightsprite->set_color(Color(0.15f, 0.0f, 0.15f));
  }
  else if(type == EARTH_BONUS) {
    sprite = SpriteManager::current()->create("images/powerups/earthflower/earthflower.sprite");
    SoundManager::current()->preload("sounds/fire-flower.wav");
    lightsprite->set_color(Color(0.0f, 0.3f, 0.0f));
  } else {
    assert(false);
  }

  set_group(COLGROUP_TOUCHABLE);
}
Ejemplo n.º 21
0
void encoder::init()
{
    guard g(m_lock);

    set_group("encoder");
    set_state(STATE_WAIT);
    init_timeout(FLAGS_encoder_timeout);

    /* allocate memory for encoder */
    if (!m_symbol_storage)
        m_symbol_storage = new uint8_t[this->block_size()];

    /* reset counters */
    m_plain_pkt_count = 0;
    m_enc_pkt_count = 0;
    m_last_req_seq = 0;
    m_type = ENC_PACKET;

    m_io->read_link(_key.dst);
    m_io->read_one_hops(_key.dst);

    helper_msg best_helper = m_io->get_best_one_hop(_key.dst);
    m_io->read_link(best_helper.addr);

    /*
    e1 = ONE - m_io->get_link(best_helper.addr);
    e2 = ONE - best_helper.tq_second_hop * 4.5; // Scale to revert hop penalty
    e3 = ONE - m_io->get_link(_key.dst);
    */

    m_max_budget = source_budget(this->symbols(), m_e1, m_e2, m_e3);
    VLOG(LOG_GEN) << "Encoder " << m_coder << ": Initialized (B: "
                  << m_max_budget << ") " << _key;
}
Ejemplo n.º 22
0
void
Dispenser::freeze()
{
  set_group(COLGROUP_MOVING_STATIC);
  frozen = true;

    if(type == DT_ROCKETLAUNCHER && sprite->has_action("iced-left"))
    // Only swivel dispensers can use their left/right iced actions.
    sprite->set_action(dir == LEFT ? "iced-left" : "iced-right", 1);
    // when the sprite doesn't have separate actions for left and right or isn't a rocketlauncher,
    // it tries to use an universal one.
  else
  {
    if(type == DT_CANNON && sprite->has_action("iced"))
      sprite->set_action("iced", 1);
      // When is the dispenser a cannon, it uses the "iced" action.
    else
    {
      if(sprite->has_action("dropper-iced"))
        sprite->set_action("dropper-iced", 1);
        // When is the dispenser a dropper, it uses the "dropper-iced".
      else
      {
        sprite->set_color(Color(0.60, 0.72, 0.88f));
        sprite->stop_animation();
        // When is the dispenser something else (unprobable), or has no matching iced sprite, it shades to blue.
      }
    }
  }
  dispense_timer.stop();
}
Ejemplo n.º 23
0
	WinAbsSD::WinAbsSD(PSID owner, PSID group, PACL dacl, bool protect):
		m_owner(nullptr),
		m_group(nullptr),
		m_dacl(nullptr),
		m_sacl(nullptr)
	{
		m_sd = alloc(SECURITY_DESCRIPTOR_MIN_LENGTH);
		CheckApi(::InitializeSecurityDescriptor(m_sd, SECURITY_DESCRIPTOR_REVISION));

		try {
			m_owner = Sid::clone(owner);
			set_owner(m_sd, m_owner);
		} catch (exception::Abstract & e) {
			LogDebug(L"exception cought: %s, %s", e.what(), e.where());
		}

		try {
			m_group = Sid::clone(group);
			set_group(m_sd, m_group);
		} catch (exception::Abstract & e) {
			LogDebug(L"exception cought: %s, %s", e.what(), e.where());
		}

		try {
			WinDacl(dacl).detach(m_dacl);
			set_dacl(m_sd, m_dacl);
		} catch (exception::Abstract & e) {
			LogDebug(L"exception cought: %s, %s", e.what(), e.where());
		}

		CheckApi(::IsValidSecurityDescriptor(m_sd));
		set_protect(protect);
	}
Ejemplo n.º 24
0
Block::Block(Sprite* newsprite)
  : sprite(newsprite), bouncing(false), bounce_dir(0), bounce_offset(0)
{
  bbox.set_size(32, 32.1);
  set_group(COLGROUP_STATIC);
  sound_manager->preload("sounds/upgrade.wav");
  sound_manager->preload("sounds/brick.wav");
}
Ejemplo n.º 25
0
void
GhostTree::activate()
{
  willowisp_timer.start(1.0f, true);
  colorchange_timer.start(13, true);
  root_timer.start(5, true);
  set_group(COLGROUP_TOUCHABLE);
}
Ejemplo n.º 26
0
LicenseItem::LicenseItem (struct rdf_license_t const* license, EntityEntry* entity, Registry &wr)
    : Gtk::RadioButton(_(license->name)), _lic(license), _eep(entity), _wr(wr)
{
    static Gtk::RadioButtonGroup group = get_group();
    static bool first = true;
    if (first) first = false;
    else       set_group (group);
}
Ejemplo n.º 27
0
void
Fish::start_waiting()
{
  waiting.start(FISH_WAIT_TIME);
  set_group(COLGROUP_DISABLED);
  physic.enable_gravity(false);
  physic.set_velocity_y(0);
}
Ejemplo n.º 28
0
HeavyCoin::HeavyCoin(const Reader& reader)
  : Coin(reader),
  physic()
{
  physic.enable_gravity(true);
  SoundManager::current()->preload("sounds/coin2.ogg");
  set_group(COLGROUP_MOVING);
}
Ejemplo n.º 29
0
MovingSprite::MovingSprite(const Vector& pos, const std::string& sprite_name, int layer, CollisionGroup collision_group)
	: sprite_name(sprite_name), layer(layer)
{
  bbox.set_pos(pos);
  sprite = sprite_manager->create(sprite_name);
  bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height());
  set_group(collision_group);
}
Ejemplo n.º 30
0
/* The following defines a coin subject to gravity */
HeavyCoin::HeavyCoin(const Vector& pos, const Vector& init_velocity)
  : Coin(pos),
  physic()
{
  physic.enable_gravity(true);
  SoundManager::current()->preload("sounds/coin2.ogg");
  set_group(COLGROUP_MOVING);
  physic.set_velocity(init_velocity);
}