/* * Catroid: An on-device visual programming system for Android devices * Copyright (C) 2010-2016 The Catrobat Team * (<http://developer.catrobat.org/credits>) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * An additional term exception under section 7 of the GNU Affero * General Public License, version 3, is available at * http://developer.catrobat.org/license_additional_term * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.catrobat.catroid.content; import org.catrobat.catroid.content.bricks.ScriptBrick; import org.catrobat.catroid.physics.PhysicsCollision; import org.catrobat.catroid.physics.content.bricks.CollisionReceiverBrick; public class CollisionScript extends BroadcastScript { private static final long serialVersionUID = 1L; public CollisionScript(String broadcastMessage) { super(broadcastMessage); } public CollisionObjectIdentifier splitBroadcastMessage() { String broadcastMessage = getBroadcastMessage(); if (broadcastMessage == null) { return new CollisionObjectIdentifier("", ""); } String[] collisionObjectIdentifierArray = broadcastMessage.split(PhysicsCollision.COLLISION_MESSAGE_CONNECTOR); if (collisionObjectIdentifierArray.length != 2) { return new CollisionObjectIdentifier("", ""); } return new CollisionObjectIdentifier(collisionObjectIdentifierArray[0], collisionObjectIdentifierArray[1]); } @Override public ScriptBrick getScriptBrick() { if (brick == null) { brick = new CollisionReceiverBrick(this); } return brick; } @Override public Script copyScriptForSprite(Sprite copySprite) { CollisionScript cloneScript = new CollisionScript(receivedMessage); doCopy(copySprite, cloneScript); return cloneScript; } public void updateBroadcastMessage(String oldCollisionObjectIdentifier, String newCollisionObjectIdentifier) { CollisionObjectIdentifier collisionObjectIdentifier = splitBroadcastMessage(); if (collisionObjectIdentifier.getCollisionObjectOneIdentifier().equals(oldCollisionObjectIdentifier)) { // update first object identifier String collisionObjectTwoIdentifier = collisionObjectIdentifier.getCollisionObjectTwoIdentifier(); setAndReturnBroadcastMessage(newCollisionObjectIdentifier, collisionObjectTwoIdentifier); } else if (collisionObjectIdentifier.getCollisionObjectTwoIdentifier().equals(oldCollisionObjectIdentifier)) { // update second object identifier String collisionObjectOneIdentifier = collisionObjectIdentifier.getCollisionObjectOneIdentifier(); setAndReturnBroadcastMessage(collisionObjectOneIdentifier, newCollisionObjectIdentifier); } } public String setAndReturnBroadcastMessage(String collisionObjectOneIdentifier, String collisionObjectTwoIdentifier) { String collisionBroadcastMessage = PhysicsCollision.generateBroadcastMessage(collisionObjectOneIdentifier, collisionObjectTwoIdentifier); setBroadcastMessage(collisionBroadcastMessage); return collisionBroadcastMessage; } public class CollisionObjectIdentifier { private String collisionObjectOneIdentifier; private String collisionObjectTwoIdentifier; public CollisionObjectIdentifier(String collisionObjectOneIdentifier, String collisionObjectTwoIdentifier) { this.collisionObjectOneIdentifier = collisionObjectOneIdentifier; this.collisionObjectTwoIdentifier = collisionObjectTwoIdentifier; } public String getCollisionObjectTwoIdentifier() { return collisionObjectTwoIdentifier; } public String getCollisionObjectOneIdentifier() { return collisionObjectOneIdentifier; } } }