// This is called after collision checks are passed. Now we deal damage and stun the target public void interactWith(GameObject target, double numSeconds) { Stun newStun = new Stun(this.templateStun); // calculate stun duration double stunDuration = Math.Min(this.duration, numSeconds) + this.templateStun.getDuration(); newStun.setDuration(stunDuration); // calculate stun acceleration double dx = target.getCenter()[0] - this.getCenter()[0]; double dy = target.getCenter()[1] - this.getCenter()[1]; double distance = Math.Sqrt(dx * dx + dy * dy); // prevent division by zero if (distance <= 0) { distance = 1; } double[] accel = new double[2]; double accelScale = this.getKnockbackAccel() / distance; accel[0] = dx * accelScale; accel[1] = dy * accelScale; // error checking newStun.setAccel(accel); // apply the stun target.applyStun(newStun); Character myOwner = this.getOwner(); if (myOwner != null) { myOwner.reinforce(1); } if (target.isACharacter()) { ((Character)target).reinforce(-1); } }