public void AddInteractors(IInteracter interact)
 {
     if (typeof(Shot).IsAssignableFrom(interact.GetCollider().BaseType))
         this.shotInteractors.Add(interact);
     else
         this.interactors.Add(interact);
 }
Example #2
0
 public Messenger(IConnecter <IDialog> connecter, IMessageStream <IMessage> messageStream,
                  IUsersManager usersManager, IInteracter interacter)
 {
     this.connecter     = connecter;
     this.messageStream = messageStream;
     this.usersManager  = usersManager;
     this.interacter    = interacter;
 }
Example #3
0
    public void Interact(IInteracter interacter)
    {
        open = !open;

        if (open)
        {
            angle = Mathf.Sign(Vector3.Dot(transform.forward, transform.position - interacter.Position)) *
                    Mathf.Abs(angle);
        }
    }
Example #4
0
 public VkConnecter(string applicationClientId,
                    IInteracter interacter,
                    IVkUsersManager usersManager,
                    IVkApiRequests apiRequests,
                    string ver = "5.78")
 {
     this.usersManager        = usersManager;
     this.apiRequests         = apiRequests;
     this.interacter          = interacter;
     this.applicationClientId = applicationClientId;
     this.ver = ver;
     InitTimer();
 }
        public static bool IsInteractCircleCircle(IInteracter obj1, IInteracter obj2)
        {
            //円と円のあたり判定

            int x0 = obj2.GetPosition().PosX;
            int x1 = obj1.GetPosition().PosX;

            int y0 = obj2.GetPosition().PosY;
            int y1 = obj1.GetPosition().PosY;

            int d = ((CircleCollider)obj1.GetCollider()).Radius + ((CircleCollider)obj2.GetCollider()).Radius;

            return (x0 - x1) * (x0 - x1) + (y0 - y1) * (y0 - y1) < d * d;
        }
        /// <summary>
        /// 円形あたり判定と長方形あたり判定を持つオブジェクトどうしのあたり判定を行う
        /// </summary>
        /// <param name="circle"></param>
        /// <param name="square"></param>
        /// <returns></returns>
        public static bool IsInteractCircleSquare(IInteracter circle, IInteracter square)
        {
            //円の中に長方形の4点のうちどれかがあるかどうか判定
            for (int i = 0; i < 4; i++)
            {
                if (PointCircleInteractHelper(((SquareCollider)(square.GetCollider())).SquarePosition.SquarePosition[i], circle.GetPosition(), ((CircleCollider)(circle.GetCollider())).Radius))
                {
                    return true;
                }
            }

            //ここまで

            //長方形の中に物体が入り込んでいるかどうかを判定判定
            double theta = GetThetaHelper(((SquareCollider)(square.GetCollider())).SquarePosition.SquarePosition[0], ((SquareCollider)(square.GetCollider())).SquarePosition.SquarePosition[1], circle.GetPosition());//3点の成す角1
            double theta2 = GetThetaHelper(((SquareCollider)(square.GetCollider())).SquarePosition.SquarePosition[2], ((SquareCollider)(square.GetCollider())).SquarePosition.SquarePosition[3], circle.GetPosition());//3点の成す角2

            if (0 <= theta && theta <= Math.PI / 2 && 0 <= theta2 && theta2 <= Math.PI / 2)
                return true;

            //ここまで

            //線分と点との距離を求める

            for (int i = 0; i < 4; i++)
            {
                double d = GetDistanceHelper(
                    circle.GetPosition().PosX,
                    circle.GetPosition().PosY,
                    ((SquareCollider)(square.GetCollider())).SquarePosition.SquarePosition[i].PosX,
                    ((SquareCollider)(square.GetCollider())).SquarePosition.SquarePosition[i].PosY,
                    ((SquareCollider)(square.GetCollider())).SquarePosition.SquarePosition[(i + 1) % 4].PosX,
                    ((SquareCollider)(square.GetCollider())).SquarePosition.SquarePosition[(i + 1) % 4].PosY);

                if (d < ((CircleCollider)(circle.GetCollider())).Radius)
                {
                    return true;
                }
            }

            return false;
        }
        private bool IsCollition(IInteracter obj1, IInteracter obj2)
        {
            if (obj1.GetCollider().BaseType == obj2.GetCollider().BaseType)
                return false;

            if (obj1.GetCollider().NoCollitionTypes != null)
            {
                foreach (var noCollitionObject in obj1.GetCollider().NoCollitionTypes)
                {
                    if (noCollitionObject.IsAssignableFrom(obj2.GetCollider().BaseType))
                        return false;
                }
            }

            if (obj2.GetCollider().NoCollitionTypes != null)
            {
                foreach (var noCollitionObject in obj2.GetCollider().NoCollitionTypes)
                {
                    if (noCollitionObject.IsAssignableFrom(obj1.GetCollider().BaseType))
                        return false;
                }
            }

            if (obj1.GetCollider().GetSharpType() == ColliderBase.SharpType.Circle)
            {

                if (obj2.GetCollider().GetSharpType() == ColliderBase.SharpType.Circle)
                {
                    return CollitionCalculator.IsInteractCircleCircle(obj1, obj2);
                }
                else
                {
                    return CollitionCalculator.IsInteractCircleSquare(obj1, obj2);
                }
            }
            else
            {
                if (obj2.GetCollider().GetSharpType() == ColliderBase.SharpType.Circle)
                {
                    return CollitionCalculator.IsInteractCircleSquare(obj2, obj1);
                }
                else
                {
                    return CollitionCalculator.IsInteractSquareSquare(obj1, obj2);
                }
            }
        }
Example #8
0
 public void DropTarget()
 {
     curTarget       = null;
     isBeingTargeted = false;
 }
Example #9
0
 public virtual void Interact(IInteracter t)
 {
     curTarget       = t;
     isBeingTargeted = true;
 }
        /// <summary>
        /// 短形Cと傾いた短形Bについて傾きのない近似短形D及びAをつくり衝突判定を行う
        /// </summary>
        /// <param name="obj1"></param>
        /// <param name="obj2"></param>
        /// <returns></returns>
        public static bool IsInteractSquareSquare(IInteracter obj1, IInteracter obj2)
        {
            /*

            //短形Cの幅
            int w2 = Math.Abs(obj1.GetSquarePosition().SquarePosition[obj1.GetSquarePosition().LeftTop].PosX - obj1.GetSquarePosition().SquarePosition[obj1.GetSquarePosition().RightTop].PosX);

            //短形Cの高さ
            int h2 = Math.Abs(obj1.GetSquarePosition().SquarePosition[obj1.GetSquarePosition().LeftTop].PosY - obj1.GetSquarePosition().SquarePosition[obj1.GetSquarePosition().LeftBottom].PosY);

            //短形Cの中心座標X
            int cx2 = obj1.GetSquarePosition().SquarePosition[obj1.GetSquarePosition().LeftTop].PosX + (w2 / 2);

            //短形Cの中心座標Y
            int cy2 = obj1.GetSquarePosition().SquarePosition[obj1.GetSquarePosition().LeftTop].PosY + (h2 / 2);

            */

            throw new NotImplementedException();

            //TODO:回転短形同士のあたり判定は実装していません
        }