コード例 #1
0
ファイル: MagnetControl.cs プロジェクト: Feetsalot/MagnetOpus
 private void ObjectStick()
 {
     if (!isObjectAttached && pull && attachedObject == null)
     {
         ContactFilter2D lFilter = new ContactFilter2D();
         lFilter.layerMask       = catchMask;
         lFilter.useTriggers     = true;
         lFilter.useOutsideDepth = true;
         Collider2D[] contactResults = new Collider2D[10];
         int          lNumCol        = Physics2D.OverlapBox((Vector2)this.transform.position, catchBox, 0f, lFilter, contactResults);
         if (lNumCol == 0)
         {
             return;
         }
         foreach (Collider2D coll in contactResults)
         {
             if (coll == null)
             {
                 continue;
             }
             MagneticObject lmagObj = coll.GetComponent <MagneticObject>();
             if (lmagObj == null)
             {
                 continue;
             }
             if (lmagObj.weight == MagneticObject.MagneticWeight.light && lmagObj == target)
             {
                 attachedObject   = lmagObj;
                 isObjectAttached = true;
                 lmagObj.attachToPlayer(player);
                 break;
             }
         }
     }
 }
コード例 #2
0
ファイル: MagnetControl.cs プロジェクト: Feetsalot/MagnetOpus
 private void releaseAttachedObject()
 {
     attachedObject.releaseFromPlayer();
     attachedObject   = null;
     isObjectAttached = false;
     player.SetHolding(false);
 }
コード例 #3
0
ファイル: Hero.cs プロジェクト: Matt343/jolly-polarity-game
    void Start()
    {
        this.HeroController = this.GetComponent <HeroController> ();
        this.forceGenerator = this.GetComponentInChildren <ForceGenerator> ();
        this.magneticObject = this.GetComponent <MagneticObject> ();
        this.anim           = this.GetComponent <Animator> ();

        JollyDebug.Watch(this, "FacingRight", delegate() {
            return(this.FacingRight);
        });
    }
コード例 #4
0
ファイル: MagnetControl.cs プロジェクト: Feetsalot/MagnetOpus
    private void SurfaceStick()
    {
        MagneticObject  magObj  = null;
        ContactFilter2D lFilter = new ContactFilter2D();

        lFilter.layerMask       = 1 << LayerMask.NameToLayer("Ground");
        lFilter.useTriggers     = true;
        lFilter.useOutsideDepth = true;
        Collider2D[] contactResults = new Collider2D[10];
        int          lNumCol        = Physics2D.OverlapBox((Vector2)this.transform.position, catchBox, 0f, lFilter, contactResults);

        if (lNumCol == 0)
        {
            return;
        }

        foreach (Collider2D coll in contactResults)
        {
            if (coll == null)
            {
                continue;
            }
            MagneticObject lmagObj = coll.GetComponent <MagneticObject>();
            if (lmagObj == null)
            {
                continue;
            }
            if (lmagObj.weight == MagneticObject.MagneticWeight.heavy)
            {
                magObj = lmagObj;
                break;
            }
        }

        if (magObj == null || (!player.onCeiling && !player.onGround && !player.onWall))
        {
            player.stuckToSurface = false;
            player.surfaceStuckTo = null;
            return;
        }

        if (magObj.weight == MagneticObject.MagneticWeight.heavy)
        {
            if (!player.stuckToSurface)
            {
                player.stuckToSurface = true;
                player.surfaceStuckTo = magObj.gameObject;
                player.realseExternalForce();
                player.SetFalling(false);
            }
        }
    }
コード例 #5
0
ファイル: MagnetControl.cs プロジェクト: Feetsalot/MagnetOpus
    private void resetTarget()
    {
        switch (target.weight)
        {
        case MagneticObject.MagneticWeight.heavy:
            player.realseExternalForce();
            break;

        case MagneticObject.MagneticWeight.light:
            target.releaseExternalForce();
            player.stopChannel();
            break;

        case MagneticObject.MagneticWeight.stop:
            target.releaseExternalForce();
            player.stopChannel();
            break;
        }
        target = null;
    }
コード例 #6
0
    void Update_Idle()
    {
        if (Input.GetKeyDown(KeyCode.E))
        {
            RaycastHit hitInfo;

            if (Physics.Raycast(this.FPSCamera.transform.position, this.FPSCamera.transform.forward, out hitInfo))
            {
                GameObject hitGO = hitInfo.collider.gameObject;

                if ((this.physicsObjectsMask & (1 << hitGO.layer)) != 0)
                {
                    this.carrying              = hitGO;
                    this.carryingMO            = hitGO.GetComponent <MagneticObject>();
                    this.carryingMO.magnetised = false;
                    this.carryingRb            = hitGO.GetComponent <Rigidbody>();
                    this.state = InteractionState.Carrying;
                }
                // Else, did it hit a button etc.?
            }
        }
    }
コード例 #7
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(code))
        {
            leftClick = true;
        }
        if (Input.GetKeyUp(code))
        {
            leftClick = false;
        }

        if (currentMagnet != null)
        {
            Vector3 heading = currentMagnet.transform.position - transform.position;
            GetComponentInParent <Rigidbody>().AddForce(heading * 5);
        }

        if (leftClick || rightClick)
        {
            Ray ray = new Ray(transform.position, transform.forward);

            RaycastHit[] hits = Physics.RaycastAll(ray);
            foreach (var hit in hits)
            {
                MagneticObject magObj = hit.collider.GetComponent <MagneticObject>();
                if (magObj != null)
                {
                    if (magObj.type == type && magObj != currentMagnet)
                    {
                        //Vector3 heading = magObj.transform.position - transform.position;
                        //GetComponentInParent<Rigidbody>().AddForce(heading * 5);
                        currentMagnet = magObj;
                        return;
                    }
                }
            }
        }
    }
コード例 #8
0
 public void clearMagnet()
 {
     currentMagnet = null;
 }
コード例 #9
0
ファイル: MagnetControl.cs プロジェクト: Feetsalot/MagnetOpus
    // Update is called once per frame
    void Update()
    {
        if (GameManager.instance.CurrentGameState == GameManager.GameState.paused)
        {
            return;
        }

        if (isObjectAttached && attachedObject == null)
        {
            isObjectAttached = false;
            player.SetHolding(false);
            player.SetAimNothing();
        }

        if (isObjectAttached && attachedObject != null)
        {
            if (!attachedObject.isAttachedPlayer)
            {
                releaseAttachedObject();
                player.SetAimNothing();
            }
            else
            {
                attachedObject.transform.parent.position = player.CatchPos.position;
                player.SetHolding(true);
                player.SetAimForward(true);
            }
        }

        SurfaceStick();

        if (Input.GetKeyDown(KeyCode.LeftShift) || Input.GetKeyDown(KeyCode.RightShift))
        {
            FindObjectOfType <AudioHandler>().Play("Magnet Switch");
            pull = !pull;
            magnetAnim.SetBool("isPushing", !pull);
            if (!pull)
            {
                magBeamRenderer.size = Vector2.zero;
            }
            //Switch push/pull state
        }

        if (Input.GetMouseButtonDown(0) && isObjectAttached)
        {
            if (!pull)
            {
                MagneticObject temp = attachedObject;
                releaseAttachedObject();
                Vector2 lMousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                temp.shootTowards(lMousePos, player.PushMagnitude * 1.5f);
                player.SetPush(true);
                CameraControl.instance.Shake(0.08f, 5, 8f);
                FindObjectOfType <AudioHandler>().Play("Magnet Push");
                CreatePushEffect();
            }
        }

        if (Input.GetMouseButtonDown(0))
        {
            player.pullStartBonus = true;
            HandleSetTarget();
        }

        if (Input.GetMouseButton(0))
        {
            if (target != null)
            {
                HandleAttratctionBeam();

                if (target == null)
                {
                    magBeamRenderer.size = Vector2.zero;
                    elapsedPullTime      = 0f;
                }
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            if (target != null)
            {
                switch (target.weight)
                {
                case MagneticObject.MagneticWeight.heavy:
                    player.realseExternalForce();
                    break;

                case MagneticObject.MagneticWeight.light:
                    target.releaseExternalForce();
                    player.stopChannel();
                    break;

                case MagneticObject.MagneticWeight.stop:
                    target.releaseExternalForce();
                    player.stopChannel();
                    break;
                }
                target = null;
            }
            if (!attachedObject)
            {
                player.SetAimNothing();
            }

            magBeamRenderer.size = Vector2.up * magBeamHeight;
            elapsedPullTime      = 0f;
            distToTarget         = 0f;
        }
    }
コード例 #10
0
ファイル: MagnetControl.cs プロジェクト: Feetsalot/MagnetOpus
    private void HandleSetTarget(bool useMouseCast = true, RaycastHit2D aHit = new RaycastHit2D())
    {
        RaycastHit2D hit = (useMouseCast) ? Physics2D.Raycast(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position, 100f, magnetLayers) : aHit;

        if (hit)
        {
            if (hit.collider.gameObject.layer == LayerMask.NameToLayer("Ground"))
            {
                FindObjectOfType <AudioHandler>().Play("Miss Sound");
                CreateMissEffect();
                return;
            }
            target = hit.collider.GetComponent <MagneticObject>();

            if (target == null)
            {
                FindObjectOfType <AudioHandler>().Play("Miss Sound");
                CreateMissEffect();
                return;
            }

            if (target.inPlayerRange == false)
            {
                return;
            }

            hitPoint = hit.point;

            switch (target.weight)
            {
            case MagneticObject.MagneticWeight.heavy:
                if (pull)
                {
                    elapsedPullTime = 0f;
                    CreatePullEffect();
                    CameraControl.instance.Shake(0.08f, 5, 8f);
                    player.PullStartBonus(hit.point);
                }
                else
                {
                    player.pushPlayerFrom(hit.point);
                    CreatePushEffect();
                    FindObjectOfType <AudioHandler>().Play("Magnet Push");
                    CameraControl.instance.Shake(0.08f, 5, 8f);
                    player.SetPush(true);
                    //player.realseExternalForce();
                }
                distToTarget  = Vector2.Distance(transform.position, hitPoint);
                pullStartDist = distToTarget;
                break;

            case MagneticObject.MagneticWeight.light:
                if (!isObjectAttached)
                {
                    if (pull)
                    {
                        elapsedPullTime = 0f;
                        CreatePullEffect();
                        CameraControl.instance.Shake(0.08f, 5, 8f);
                    }
                    else
                    {
                        if (isObjectAttached)
                        {
                            target = null; break;
                        }
                        target.shootTowards(hit.point, -player.PushMagnitude);
                        CreatePushEffect();
                        FindObjectOfType <AudioHandler>().Play("Magnet Push");
                        CameraControl.instance.Shake(0.08f, 5, 8f);
                        player.SetPush(true);
                    }
                    distToTarget  = Vector2.Distance(transform.position, hitPoint);
                    pullStartDist = distToTarget;
                }
                break;

            case MagneticObject.MagneticWeight.stop:
                if (!pull)
                {
                    target.transform.parent.GetComponent <ShotgunProjectile>().Stop();
                    CreatePushEffect();
                    FindObjectOfType <AudioHandler>().Play("Magnet Push");
                    CameraControl.instance.Shake(0.08f, 5, 8f);
                    player.SetPush(true);
                }
                break;
            }
        }
    }
コード例 #11
0
ファイル: MagnetControl.cs プロジェクト: Feetsalot/MagnetOpus
    private void HandleAttratctionBeam()
    {
        RaycastHit2D lHitCheck = Physics2D.Raycast(transform.position, hitPoint - (Vector2)transform.position, 100f, magnetLayers);

        if (lHitCheck)
        {
            ObjectStick();

            MagneticObject lBeamIntterupt = lHitCheck.collider.GetComponent <MagneticObject>();
            if (lBeamIntterupt == null)
            {
                resetTarget();
                return;
            }

            if (lBeamIntterupt != target)
            {
                resetTarget();
                //HandleSetTarget(false, lHitCheck);
                return;
            }

            hitPoint     = lHitCheck.point;
            distToTarget = Vector2.Distance(transform.position, hitPoint);
            if (target.weight == MagneticObject.MagneticWeight.light && pull)
            {
                distToTarget = Vector2.Distance(transform.position, target.transform.position);
            }

            float lAngle = ((hitPoint.y > transform.position.y) ? 1 : -1) * Vector2.Angle(hitPoint - (Vector2)transform.position, Vector2.right);
            if (lAngle < 45f && lAngle > -45f)
            {
                player.SetAimForward(true);
            }
            else if (lAngle > 45f)
            {
                player.SetAimAbove(true);
            }
            else if (lAngle < -45f)
            {
                player.SetAimBelow(true);
            }

            if (pull)
            {
                magBeamRenderer.size = Vector2.right * distToTarget * Mathf.Clamp01(elapsedPullTime / (maxTimeToPull * Mathf.Clamp01(pullStartDist / 7.5f))) + Vector2.up * magBeamHeight;

                magBeamRenderer.gameObject.transform.localEulerAngles = Vector3.forward * (lAngle);
            }
            if (elapsedPullTime < maxTimeToPull * Mathf.Clamp01(pullStartDist / 7.5f))
            {
                elapsedPullTime += Time.deltaTime;
            }
            else
            {
                if (pull)
                {
                    switch (target.weight)
                    {
                    case MagneticObject.MagneticWeight.heavy:
                        if (target.gameObject != player.surfaceStuckTo)
                        {
                            player.pullPlayerTowards(hitPoint);
                        }
                        break;

                    case MagneticObject.MagneticWeight.light:
                        if (!isObjectAttached)
                        {
                            target.pullThis(this.gameObject, player.PullMagnitude);
                            player.channelPull();
                        }
                        break;
                    }
                }
            }

            if (target.inPlayerRange == false)
            {
                resetTarget();
            }
        }
    }
コード例 #12
0
 private void Awake()
 {
     this.magneticObject = this.GetComponent<MagneticObject>();
     this.timer = this.time;
 }
コード例 #13
0
 void Start()
 {
     this.forceGenerator = this.GetComponentInChildren <ForceGenerator> ();
     this.magneticObject = this.GetComponent <MagneticObject> ();
 }
コード例 #14
0
 // Use this for initialization
 void Start()
 {
     magnetSript   = gameObject.GetComponent <MagneticObject> ();
     rb2d          = gameObject.GetComponent <Rigidbody2D> ();
     rb2d.velocity = transform.up * moveSpeed;
 }