Example #1
0
void InputMap::action_add_event(const StringName& p_action,const InputEvent& p_event) {

	ERR_FAIL_COND(p_event.type==InputEvent::ACTION);
	ERR_FAIL_COND( !input_map.has(p_action) );
	if (_find_event(input_map[p_action].inputs,p_event))
		return; //already gots

	input_map[p_action].inputs.push_back(p_event);

}
Example #2
0
void InputMap::action_erase_event(const StringName& p_action,const InputEvent& p_event) {

	ERR_FAIL_COND( !input_map.has(p_action) );

	List<InputEvent>::Element *E=_find_event(input_map[p_action].inputs,p_event);
	if (E)
		return; //already gots

	input_map[p_action].inputs.erase(E);

}
Example #3
0
//finds an event from a class
static AWE_CLASS_EVENT *_find_event(const char *name, AWE_CLASS *pclass)
{
    AWE_CLASS_EVENT *event;

    if (pclass->events) {
        for(event = pclass->events; event->name; event++) {
            if (strcmp(event->name, name) == 0) return event;
        }
    }
    return pclass->super ? _find_event(name, pclass->super) : 0;
}
Example #4
0
bool InputMap::event_is_action(const InputEvent& p_event, const StringName& p_action) const {


	Map<StringName,Action >::Element *E=input_map.find(p_action);
	if(!E) {
		ERR_EXPLAIN("Request for nonexistent InputMap action: "+String(p_action));
		ERR_FAIL_COND_V(!E,false);
	}

	if (p_event.type==InputEvent::ACTION) {

		return p_event.action.action==E->get().id;
	}

	return _find_event(E->get().inputs,p_event)!=NULL;
}
Example #5
0
//registers an event with an object
int awe_add_object_event(AWE_OBJECT *src, const char *name, AWE_OBJECT *dst, void *proc)
{
    AWE_CLASS_EVENT *event;
    _AWE_SIGNAL *signal;
    _AWE_SLOT *slot;

    //find signal
    signal = _awe_find_signal(src, name);

    //if found, check if the slot already exists; if it exists, do nothing
    if (signal) {
        slot = _find_slot(signal, dst, proc);
        if (slot) return 1;
    }

    //if not found, install a new signal in the object (if the event exists)
    if (!signal) {
        event = _find_event(name, src->pclass);
        if (!event) return 0;
        signal = (_AWE_SIGNAL *)calloc(1, sizeof(_AWE_SIGNAL));
        signal->name = event->name;
        awe_list_insert(&src->signals, &signal->node, 0);
    }

    //install a new slot in the src signal and in the dst object
    slot = (_AWE_SLOT *)calloc(1, sizeof(_AWE_SLOT));
    slot->signal_node.data = slot;
    slot->slot_node.data = slot;
    slot->signal_list = &signal->slots;
    if (dst) slot->slot_list = &dst->slots;
    slot->object = dst;
    slot->proc = proc;
    awe_list_insert(&signal->slots, &slot->signal_node.node, 0);
    if (dst) awe_list_insert(&dst->slots, &slot->slot_node.node, 0);

    return 1;
}
Example #6
0
bool InputMap::action_has_event(const StringName& p_action,const InputEvent& p_event) {

	ERR_FAIL_COND_V( !input_map.has(p_action), false );
	return (_find_event(input_map[p_action].inputs,p_event)!=NULL);

}