Вам нужно будет добавить ключ bankAccountState.verifier в команду.
В вашей команде изменения потока инициатора с:
val command = Command(BankAccountContract.Add(), listOf(ourIdentity.owningKey))
на:
val command = Command(BankAccountContract.Add(), listOf(ourIdentity.owningKey,bankAccountState.verifier.owningKey))
if(body2.Tag is Dog)
на самом деле компилируется как
Dog Temp = body2.Tag as Dog;
if (temp != null)
В Вашем коде Вы затем делаете бросок снова. Лучше был бы:
Dog dog = body2.Tag as Dog;
if (dog != null)
{
dog.Bark();
}
Я просто сделал бы абстрактный метод для объекта Тела под названием, Столкнулся:
abstract class Body
{
abstract void Collision(Body other);
}
class Dog : Body
{
public override void Collision(Body other) {
this.Bark();
}
public void Bark() { ... }
}
Затем в Вашей функции коллизии просто называют Коллизию на включенных телах.
public bool OnCollision(Body body1, Body body2)
{
body2.Collision(body2);
}
Таким образом, любой тип тела может сделать то, в чем это нуждается, когда коллизия происходит, Вы могли даже оптимизировать это для отслеживания, которых тела были уведомлены относительно коллизий друг с другом и сокращают количество вызовов функции, которые необходимо выполнить:
public bool OnCollision(Body body1, Body body2)
{
// Record that these two objects have been notified of a collision
// then when these same objects are the only two operands in subsequent calls
// you can just short circuit the calls.
if(!AlreadyNotifiedOfCollision(body1, body2))
{
body1.Collision(body2);
body2.Collision(body1);
NotifiedOfCollision(body1, body2);
}
}
Конечно, эмпирическое тестирование должно было бы быть сделано для проверки той этой проверки, быстрее, чем на самом деле просто выполнение вызова дважды...
Подход хотел бы это быть выполнимым или полезным?
public interface ICollidable
{
void OnCollision();
}
public abstract class Body : ICollidable
{
public abstract void OnCollision();
}
public class Dog : Body
{
public override void OnCollision();
{
Bark();
}
}
public Boolean OnCollision(ICollidable a, ICollidable b)
{
b.OnCollision();
}
How about a generic collision method? Then there is no need for inheritance. Just an interface.
public bool OnCollision<TA,TB>(TA a, TB b)
where TA : ICollidable
where TB : ICollidable {
a.Collision(b);
}