Fix small issues, and model re-generation.

This commit is contained in:
Relintai 2019-11-04 21:43:32 +01:00
parent e57b8ec27a
commit 6c1c5eca46
5 changed files with 75 additions and 4 deletions

View File

@ -1357,6 +1357,12 @@ void Entity::cequip_success(ItemEnums::EquipSlots equip_slot, int bag_slot) {
_c_bag->add_item_at(bag_slot, old_equipped_item);
setc_equip_slot(equip_slot, old_bag_item);
if (old_equipped_item.is_valid())
cdeapply_item(old_equipped_item);
if (old_bag_item.is_valid())
capply_item(old_bag_item);
con_equip_success(equip_slot, old_bag_item, old_equipped_item, bag_slot);
}
void Entity::cequip_fail(ItemEnums::EquipSlots equip_slot, int bag_slot) {
@ -1395,7 +1401,9 @@ bool Entity::can_equip_item(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance>
return call("_can_equip_item", equip_slot, item);
}
bool Entity::_can_equip_item(ItemEnums::EquipSlots equip_slot, Ref<ItemInstance> item) {
ERR_FAIL_COND_V(!item.is_valid(), false);
//deequip
if (!item.is_valid())
return true;
Ref<ItemTemplate> it = item->get_item_template();
@ -1414,6 +1422,10 @@ void Entity::sdeapply_item(Ref<ItemInstance> item) {
void Entity::_sapply_item(Ref<ItemInstance> item) {
ERR_FAIL_COND(!item.is_valid());
Ref<ItemTemplate> it = item->get_item_template();
ERR_FAIL_COND(!it.is_valid());
for (int i = 0; i < item->get_item_stat_modifier_count(); ++i) {
Ref<ItemStatModifier> mod = item->get_item_stat_modifier(i);
@ -1436,6 +1448,10 @@ void Entity::_sapply_item(Ref<ItemInstance> item) {
void Entity::_sdeapply_item(Ref<ItemInstance> item) {
ERR_FAIL_COND(!item.is_valid());
Ref<ItemTemplate> it = item->get_item_template();
ERR_FAIL_COND(!it.is_valid());
for (int i = 0; i < item->get_item_stat_modifier_count(); ++i) {
Ref<ItemStatModifier> mod = item->get_item_stat_modifier(i);
@ -1456,6 +1472,36 @@ void Entity::_sdeapply_item(Ref<ItemInstance> item) {
}
}
void Entity::capply_item(Ref<ItemInstance> item) {
call("_capply_item", item);
}
void Entity::cdeapply_item(Ref<ItemInstance> item) {
call("_cdeapply_item", item);
}
void Entity::_capply_item(Ref<ItemInstance> item) {
ERR_FAIL_COND(!item.is_valid());
Ref<ItemTemplate> it = item->get_item_template();
ERR_FAIL_COND(!it.is_valid());
if (it->get_item_visual().is_valid() && ObjectDB::instance_validate(_character_skeleton)) {
_character_skeleton->add_item_visual(it->get_item_visual());
}
}
void Entity::_cdeapply_item(Ref<ItemInstance> item) {
ERR_FAIL_COND(!item.is_valid());
Ref<ItemTemplate> it = item->get_item_template();
ERR_FAIL_COND(!it.is_valid());
if (it->get_item_visual().is_valid() && ObjectDB::instance_validate(_character_skeleton)) {
_character_skeleton->remove_item_visual(it->get_item_visual());
}
}
//// Resources ////
Ref<EntityResource> Entity::gets_resource(int index) {
@ -5695,6 +5741,15 @@ void Entity::_bind_methods() {
ClassDB::bind_method(D_METHOD("_sapply_item", "item"), &Entity::_sapply_item);
ClassDB::bind_method(D_METHOD("_sdeapply_item", "item"), &Entity::_sdeapply_item);
BIND_VMETHOD(MethodInfo("_capply_item", PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance")));
BIND_VMETHOD(MethodInfo("_cdeapply_item", PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance")));
ClassDB::bind_method(D_METHOD("csapply_item", "item"), &Entity::capply_item);
ClassDB::bind_method(D_METHOD("cdeapply_item", "item"), &Entity::cdeapply_item);
ClassDB::bind_method(D_METHOD("_capply_item", "item"), &Entity::_capply_item);
ClassDB::bind_method(D_METHOD("_cdeapply_item", "item"), &Entity::_cdeapply_item);
//Resources
ClassDB::bind_method(D_METHOD("gets_resource", "index"), &Entity::gets_resource);
ClassDB::bind_method(D_METHOD("gets_resource_type", "type"), &Entity::gets_resource_type);

View File

@ -333,6 +333,12 @@ public:
void _sapply_item(Ref<ItemInstance> item);
void _sdeapply_item(Ref<ItemInstance> item);
void capply_item(Ref<ItemInstance> item);
void cdeapply_item(Ref<ItemInstance> item);
void _capply_item(Ref<ItemInstance> item);
void _cdeapply_item(Ref<ItemInstance> item);
//// Resources ////
Ref<EntityResource> gets_resource(int index);

View File

@ -76,8 +76,6 @@ bool Bag::add_item(Ref<ItemInstance> item) {
}
void Bag::add_item_at(int index, Ref<ItemInstance> item, bool signal) {
ERR_FAIL_COND(!item.is_valid());
if (has_method("_add_item_at")) {
call("_add_item_at", index, item, signal);
return;

View File

@ -86,6 +86,9 @@ void CharacterSkeleton3D::add_item_visual(Ref<ItemVisual> vis) {
}
_item_visuals.push_back(vis);
set_process(true);
_model_dirty = true;
}
void CharacterSkeleton3D::remove_item_visual(Ref<ItemVisual> vis) {
ERR_FAIL_COND(!vis.is_valid());
@ -103,15 +106,24 @@ void CharacterSkeleton3D::remove_item_visual(Ref<ItemVisual> vis) {
}
_item_visuals.remove(index);
set_process(true);
_model_dirty = true;
}
void CharacterSkeleton3D::remove_item_visual_index(int index) {
ERR_FAIL_INDEX(index, _item_visuals.size());
set_process(true);
_model_dirty = true;
_item_visuals.remove(index);
}
Ref<ItemVisual> CharacterSkeleton3D::get_item_visual(int index) {
ERR_FAIL_INDEX_V(index, _item_visuals.size(), Ref<ItemVisual>());
set_process(true);
_model_dirty = true;
return _item_visuals.get(index);
}
int CharacterSkeleton3D::get_item_visual_count() {

View File

@ -74,7 +74,7 @@ protected:
return false;
}
return (a->get_priority() < b->get_priority());
return (a->get_priority() > b->get_priority());
}
};