def untag(self, grabable_ent): if grabable_ent in self._tags: joint_id = self._tags[grabable_ent] self.get_world_entity_manager().unjoin(joint_id) grabable_ent._taggable_attached = None play_sound('detach.wav') del self._tags[grabable_ent]
def jump(self): if self._avail_jumps == Player.MAX_JUMPS and not self._can_begin_jump: return if self._avail_jumps > 0: self._can_begin_jump = False self._avail_jumps -= 1 jump_factor = 1/(Player.MAX_JUMPS - self._avail_jumps) self.get_body().apply_impulse((0,3000 + 2000 * jump_factor), (0,0)) play_sound('jump.wav')
def hold(self, entity, wc_contact_pos): if not entity.is_grabable(): return self.drop() # lc_for_entity = entity.get_body().world_to_local(wc_contact_pos) # lc_for_player = self.get_body().world_to_local(wc_contact_pos) entity.get_body().position = self.get_body().position joint_id = self.pin_join(entity, (0,0), (0,0)) self._hold_joint = joint_id self._held_entity = entity play_sound('chain_up.wav')
def tag(self, grabable_ent, wc_taggable_pos): if not self.is_taggable() or not grabable_ent.is_grabable(): return grabable_body = grabable_ent.get_body() #move the body to the taggable pos grabable_body.position = wc_taggable_pos #convert world pin coordinates to local body coords lc_grabable_pos = grabable_body.world_to_local(wc_taggable_pos) lc_taggable_pos = self.get_body().world_to_local(wc_taggable_pos) #turn off collision checking between the combined items cgrp = self.get_world_entity_manager().alloc_collision_group() self.get_shape().group = cgrp grabable_ent.get_shape().group = cgrp #pin it to the taggable joint_id = grabable_ent.pin_join(self, lc_grabable_pos, lc_taggable_pos) grabable_ent.on_taggable_attach(self) self.on_tag(grabable_ent, joint_id) play_sound('attach.wav')
def on_collision(self, entity, contacts, normal_coef, data): if isinstance(entity, Deliverable): self._value += entity._worth play_sound('goal.wav') self.get_world_entity_manager().remove_entity(entity)