// Grab a rope public void grabRope(int entityId, RopeComponent ropeComponent, Body ropeBody) { RopeGrabExclusionComponent ropeGrabExclusionComponent = EntityManager.getRopeGrabExclusionComponent(entityId); if (ropeGrabExclusionComponent == null || !ropeGrabExclusionComponent.excludedRopeComponents.Contains(ropeComponent)) { GroupComponent groupComponent = SystemManager.groupSystem.getGroupComponentContaining(entityId); CharacterComponent characterComponent = EntityManager.getCharacterComponent(entityId); int index = ropeComponent.bodies.IndexOf(ropeBody); RevoluteJoint joint = JointFactory.CreateRevoluteJoint(SystemManager.physicsSystem.world, ropeBody, characterComponent.body, Vector2.Zero, Vector2.Zero); RopeGrabComponent ropeGrabComponent = new RopeGrabComponent(entityId, ropeComponent, joint, (float)index); EntityManager.addComponent(entityId, ropeGrabComponent); if (groupComponent != null) { Formation activeFormation = groupComponent.activeFormation; float maxPosition = ropeComponent.anchorBody.Position.X + 2f * groupComponent.entities.Count; LimitedRangeFormation newFormation = new LimitedRangeFormation(groupComponent.entities, activeFormation.position, activeFormation.speed, float.MinValue, maxPosition); ropeGrabComponent.formationToRemove = newFormation; activeFormation.position = (ropeComponent.anchorBody.Position.X + maxPosition) * 0.5f; groupComponent.addFormation(newFormation); } } }
public RopeGrabComponent(int entityId, RopeComponent ropeComponent, RevoluteJoint joint, float progress) { _entityId = entityId; _ropeComponent = ropeComponent; _joint = joint; _progress = progress; }