상속: Script
예제 #1
0
 void Check(Activatable target, float biasAngle)
 {
     if (biasAngle < currentBiasAngle) {
         current = target;
         currentBiasAngle = biasAngle;
     }
 }
예제 #2
0
 private void LocateDirectSightActivatable()
 {
     if (unit.eye.underSight != null) {
         var activatable = unit.eye.underSight.GetComponent<Activatable>();
         if (activatable != null) {
             if (unit.eye.distance < activatable.EffectiveMaxDistance(this)) {
                 current = activatable;
             }
         }
     }
 }
 private void UpdateGUI(Activatable activatable, bool canCallHome) => gui.UpdateGUI(activatable, canCallHome, this);
예제 #4
0
파일: Player.cs 프로젝트: dloe/TheLastArray
    // Update is called once per frame
    void Update()
    {
        if (!UI.Instance.PausedStatus && (!CraftingTable.Instance || !CraftingTable.Instance.Menu.activeInHierarchy) && !endScreen.activeInHierarchy)
        {
            mouseLook();
            doMovement();


            //if there is a grabbable item and the inventory is not full, then E picks up item
            if (Input.GetKeyDown(KeyCode.E) && !Upgrades.Instance.upgradeMenu.activeInHierarchy)
            {
                if (thingsToActivate.Count > 0)
                {
                    thingToActivate = thingsToActivate[0];


                    if (thingToActivate is WorldItem && inventory.IsFull())
                    {
                        thingsToActivate.Remove(thingToActivate);
                        thingsToActivate.Add(thingToActivate);
                    }
                    else if (!(thingToActivate is CraftingTable))
                    {
                        //Debug.Log(thingToActivate.name + "activated, removing from reachable activatables");
                        thingsToActivate.Remove(thingToActivate);
                    }



                    thingToActivate.Activate();
                    thingToActivate = null;

                    //if(thingToActivateTwo)
                    //{
                    //    thingToActivate = thingToActivateTwo;
                    //    thingToActivateTwo = null;
                    //}
                    //thingToActivate = null;
                }
            }

            //uses currently selected item
            if (Input.GetMouseButtonDown(0) && inventory.selectedItem != null && !Upgrades.Instance.upgradeMenu.activeInHierarchy)
            {
                switch (inventory.selectedItem.itemData.itemType)
                {
                case ItemType.MeleeWeapon:
                    meleeAttack();
                    break;

                case ItemType.RangedWeapon:
                    rangedAttack();
                    break;

                case ItemType.Heal:
                    if (Health < maxHealth)
                    {
                        heal();
                        inventory.RemoveItem(inventory.selectedItem);
                    }
                    break;

                case ItemType.UnstableStim:
                    if (!usingStimmy)
                    {
                        StartCoroutine(UnstableStimmy());
                        inventory.RemoveItem(inventory.selectedItem);
                    }
                    break;

                default:
                    break;
                }
            }

            //drops currently selected item on the ground at the player's feet
            if (Input.GetKeyDown(KeyCode.Q) && inventory.selectedItem != null && !inventory.selectedItem.itemData.reloading)
            {
                inventory.DropItem();
            }



            if (Input.GetKeyDown(KeyCode.R) && inventory.selectedItem != null && inventory.selectedItem.itemData.itemType == ItemType.RangedWeapon && !inventory.selectedItem.itemData.reloading && inventory.selectedItem.itemData.loadedAmmo < inventory.selectedItem.itemData.magSize)
            {
                reload();
            }



#if UNITY_EDITOR
            //for testing damage and healing
            if (Input.GetKeyDown(KeyCode.Delete))
            {
                TakeDamage(1);
            }
            else if (Input.GetKeyDown(KeyCode.T))
            {
                Debug.Log("Reseting Player Save...");
                inventory.Clear();
                SetStatsToBase();
                InventoryUI.Instance.ResetSlots();
                SavePlayer();
                InventoryUI.Instance.RefreshUI();
            }
            else if (Input.GetKeyDown(KeyCode.DownArrow))
            {
                Debug.Log("Trying To Save...");
                SavePlayer();
            }
            else if (Input.GetKeyDown(KeyCode.UpArrow))
            {
                Debug.Log("Trying To Load...");
                LoadPlayer();
            }
            else if (Input.GetKeyDown(KeyCode.Comma) && inventory.selectedItem != null && inventory.selectedItem.itemData.itemType == ItemType.RangedWeapon)
            {
                inventory.selectedItem.itemData.hasLaserSight = true;
                laserLine.gameObject.SetActive(true);
            }
#endif
        }

        //if(meleeVisual.activeInHierarchy)
        //{
        //    meleeVisual.transform.position = _mainTransform.position + (_mainTransform.forward * inventory.selectedItem.itemData.meleeRange);
        //}
    }
예제 #5
0
    void Update()
    {
        variate              = !variate;
        deathTimer          -= Time.deltaTime;
        timedUncontrollable -= Time.deltaTime;
        dashTime            -= Time.deltaTime;
        meleeTime           -= Time.deltaTime;
        animationOverride   -= Time.deltaTime;
        timedInvulnerable   -= Time.deltaTime;
        curA *= 0.95f;
        if (curA < 0.05f)
        {
            if (cr.gameObject.activeSelf)
            {
                cr.gameObject.SetActive(false);
            }
        }
        else if (cr.gameObject.activeSelf)
        {
            cr.SetAlpha(Mathf.Min(curA, 1));
        }
        else
        {
            cr.gameObject.SetActive(true);
        }
        if (deathTimer <= 0f)
        {
            respawn();
        }
        if (noUpdate)
        {
            return;
        }
        if (!shadow)
        {
            genShadow();
        }
        else
        {
            if (shadow.GetComponent <SpriteRenderer>().sprite != sr.sprite)
            {
                genShadow();
            }
            shadow.GetComponent <SpriteRenderer>().flipX = sr.flipX;
        }
        if (fallTime <= deathFallTime)
        {
            fallTime         -= Time.deltaTime;
            gameObject.layer  = noclipLayer;
            pysc.gravityScale = 7f;
            gameObject.layer  = dashLayer;
            if (fallTime <= 0f)
            {
                kill();
            }
            transform.position = new Vector3(transform.position.x, transform.position.y, (transform.position.y + autoOrderOffset) / 100f);
            return;
        }
        if (light.barPercent <= 0f)
        {
            kill();
            return;
        }
        Vector2 redirect = Vector2.right;

        feetPos = pysc.position + cc.offset;
        armPos  = pysc.position + (Vector2)(fireArm.transform.localPosition);
        if (isDashing = dashPos.sqrMagnitude > 0.1f)
        {
            gameObject.layer = dashLayer;
            if (shadow.activeSelf && overAir)
            {
                shadow.SetActive(false);
            }
        }
        else
        {
            gameObject.layer = playerLayer;
            if (!shadow.activeSelf && overAir)
            {
                shadow.SetActive(true);
            }
        }
        float       closestA = float.PositiveInfinity;
        Activatable aInRange = null;

        foreach (RaycastHit2D rh in Physics2D.CircleCastAll(feetPos, 0.5f, Vector2.down, 0f))
        {
            if (rh.collider.isTrigger)
            {
                if (!isDashing && rh.collider.gameObject.GetComponent <Air>())
                {
                    fallTime = deathFallTime;
                    if (Mathf.Abs(lastInput.x) >= Mathf.Abs(lastInput.y))
                    {
                        ani.Play(lastInput.x > 0 ? "RightFall" : "LeftFall", 0);
                    }
                    else
                    {
                        ani.Play(lastInput.y > 0 ? "UpFall" : "DownFall", 0);
                    }
                    return;
                }
                else if (rh.collider.gameObject.GetComponent <Activatable>() && rh.distance < closestA)
                {
                    closestA = rh.distance;
                    aInRange = rh.collider.gameObject.GetComponent <Activatable>();
                }
                if (rh.collider.gameObject.GetComponent <MovementRedirect>())
                {
                    redirect = rh.collider.gameObject.GetComponent <MovementRedirect>().dir;
                }
            }
        }
        if (timedUncontrollable < 0f)
        {
            if (controllable)
            {
                Vector2 input       = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
                Vector2 rPosFromArm = ((Vector2)(Camera.main.ScreenToWorldPoint(Input.mousePosition)) - armPos).normalized;
                if (animationOverride <= 0f)
                {
                    rooted = false;
                }
                if (!isDashing)
                {
                    if (input.sqrMagnitude != 0f && animationOverride <= 0f && !arrowLoaded)
                    {
                        comboCount = 0;
                        rooted     = false;
                        lastInput  = input;
                        input      = input.normalized;
                        input      = redirect * input.x + new Vector2(-redirect.y, redirect.x) * input.y;
                        pysc.AddForce((input * charSpeed - pysc.velocity) * pysc.mass, ForceMode2D.Impulse);
                        if (Mathf.Abs(input.x) >= Mathf.Abs(input.y))
                        {
                            ani.Play(input.x > 0 ? "RightWalk" : "LeftWalk", 0);
                        }
                        else
                        {
                            ani.Play(input.y > 0 ? "UpWalk" : "DownWalk", 0);
                        }
                    }
                    else
                    {
                        brake();
                        if (!(rooted || arrowLoaded))
                        {
                            playIdleAnimation();
                        }
                    }
                    if (Input.GetKeyDown(Settings.keys[Settings.player, Settings.dash]) && !arrowLoaded && dashTime <= 0f)
                    {
                        comboCount = 0;
                        float closest = dashDist;
                        lastInput = rPosFromArm;
                        overAir   = false;
                        foreach (RaycastHit2D rh in Physics2D.RaycastAll(feetPos, rPosFromArm, dashDist))
                        {
                            if (!rh.collider.isTrigger && rh.distance < closest && !(rh.collider.attachedRigidbody && rh.collider.attachedRigidbody.gameObject == gameObject) && rh.collider.gameObject != gameObject)
                            {
                                closest = rh.distance;
                            }
                            if (!overAir && rh.collider.gameObject.GetComponent <Air>())
                            {
                                overAir = true;
                            }
                        }
                        dashPos = rPosFromArm * closest;
                        if (Mathf.Abs(dashPos.x) > Mathf.Abs(dashPos.y))
                        {
                            ani.Play(overAir ? dashPos.x > 0 ? "RightDash" : "LeftDash" : dashPos.x > 0 ? "RightRoll" : "LeftRoll", 0);
                        }
                        else
                        {
                            ani.Play(overAir ? dashPos.y > 0 ? "UpDash" : "DownDash" : dashPos.y > 0 ? "UpRoll" : "DownRoll", 0);
                        }
                        dashTime = dashCoolDown;
                        SoundManager.script.playOnListener(SoundManager.script.dash, 0.7f);
                    }
                    if (!arrowLoaded && Input.GetMouseButtonDown(0))
                    {
                        comboCount++;
                    }
                    if ((light.barPercent > arrowCost || !usingLight) && Input.GetMouseButtonDown(1) && canAfford(arrowCost))
                    {
                        arrowLoaded = true;
                        comboCount  = 0;
                        handAni.Play("boxWindUp", 0);
                        SoundManager.script.playOnListener(SoundManager.script.bowDraw);
                    }
                    if (arrowLoaded && Input.GetMouseButton(1))
                    {
                        arrowTime += Time.deltaTime;
                        if (Input.GetKeyDown(Settings.keys[Settings.player, Settings.cancel]))
                        {
                            arrowLoaded = false;
                            handAni.Play("NoAnimation", 0);
                            arrowTime   = 0f;
                            arrowLoaded = false;
                        }
                        fireArm.transform.localRotation = Quaternion.LookRotation(Vector3.forward, -rPosFromArm);
                        if (Mathf.Abs(rPosFromArm.x) > Mathf.Abs(rPosFromArm.y))
                        {
                            ani.Play(rPosFromArm.x < 0 ? "LeftFireState" : "RightFireState", 0);
                            if (fireHand.transform.localPosition.z != 0.01f)
                            {
                                fireArm.transform.localPosition = new Vector3(fireArm.transform.localPosition.x, fireArm.transform.localPosition.y, 0.0001f);
                            }
                        }
                        else if (rPosFromArm.y > 0)
                        {
                            ani.Play("UpFireState", 0);
                            if (fireHand.transform.localPosition.z != 0.01f)
                            {
                                fireArm.transform.localPosition = new Vector3(fireArm.transform.localPosition.x, fireArm.transform.localPosition.y, 0.0001f);
                            }
                        }
                        else if (fireHand.transform.localPosition.z != -0.01f)
                        {
                            ani.Play("DownFireState", 0);
                            fireArm.transform.localPosition = new Vector3(fireArm.transform.localPosition.x, fireArm.transform.localPosition.y, -0.0001f);
                        }
                    }
                    else
                    {
                        if (arrowTime >= arrowWindUp)
                        {
                            fire(rPosFromArm);
                        }
                        handAni.Play("NoAnimation", 0);
                        arrowTime   = 0f;
                        arrowLoaded = false;
                    }
                    if (!arrowLoaded && meleeTime <= 0f && comboCount > 0)
                    {
                        comboCount--;
                        BasicEnemy be = null;
                        foreach (RaycastHit2D rh in Physics2D.CircleCastAll(pysc.position, meleeRadius, Vector2.down, 0f))
                        {
                            if (!rh.collider.isTrigger && (be = rh.collider.gameObject.GetComponent <BasicEnemy>()) && Vector2.Dot((rh.point - pysc.position).normalized, rPosFromArm) >= meleeField)
                            {
                                be.damage((int)(meleeDamage / diff), BasicEnemy.MELEE_DAMAGE);
                                corrupt(meleeDamage);
                                SoundManager.script.playOnListener(variate ? SoundManager.script.enemyHit1 : SoundManager.script.enemyHit2, 0.8f);
                            }
                        }
                        SoundManager.script.playOnListener(variate ? SoundManager.script.sword1 : SoundManager.script.sword2, 0.8f);
                        meleeTime         = meleeCoolDown;
                        rooted            = true;
                        animationOverride = meleeCoolDown;
                        if (Mathf.Abs(rPosFromArm.x) >= Mathf.Abs(rPosFromArm.y))
                        {
                            if (variate)
                            {
                                ani.Play(rPosFromArm.x > 0 ? "RightAttack1" : "LeftAttack1", 0, 0);
                            }
                            else
                            {
                                ani.Play(rPosFromArm.x > 0 ? "RightAttack2" : "LeftAttack2", 0, 0);
                            }
                        }
                        else if (variate)
                        {
                            ani.Play(rPosFromArm.y > 0 ? "UpAttack" : "DownAttack", 0, 0);
                        }
                        else
                        {
                            ani.Play(rPosFromArm.y > 0 ? "UpAttack2" : "DownAttack2", 0, 0);
                        }
                        lastInput = rPosFromArm;
                        pysc.AddForce(rPosFromArm * meleeAdv);
                    }
                }
                else
                {
                    brake();
                }
                if (Input.GetKeyDown(Settings.keys[Settings.player, Settings.use]))
                {
                    if (aInRange && aInRange.playerActivatable)
                    {
                        aInRange.activate(this);
                    }
                    else
                    {
                        SoundManager.script.playOnListener(SoundManager.script.lightSwitch, 1f);
                        usingLight  = !usingLight;
                        gem.isLight = usingLight;
                        (usingLight ? lightP : darkP).GetComponent <ParticleSystem>().Play();
                    }
                }
            }
            else
            {
                playIdleAnimation();
                brake();
            }
        }
        if ((lastJuicePosition - pysc.position).sqrMagnitude >= sqrUnitPerSound)
        {
            lastJuicePosition = pysc.position;
            if (!isDashing && fallTime > deathFallTime)
            {
                SoundManager.script.playOnListener(variate ? SoundManager.script.step1 : SoundManager.script.step2, 0.8f);
            }
        }
        transform.position = new Vector3(transform.position.x, transform.position.y, (transform.position.y + autoOrderOffset) / 100f);
    }
예제 #6
0
 public PayActionCost(Activatable act, AbilityType m)
 {
     MyActivatable = act;
     Mode          = m;
 }
예제 #7
0
    }//einde move

    public void CheckForActivables()// om de player een lever of slider te laten activeren (algemeen, om EEN activatable te activeren)
    {
        //gaan terug het gridje waar hij opstaat selecteren en overlopen om te zien of er een activatable op staat. Dan kunnen we die ook activeren.


        //een nieuw gridje aanmaken voor de ruimte van de player
        Block[,] gridPlayerSpace = GameController.CurrentLevel.GetPartOfGrid(Position,//enkel de ruimte van de player, dus kunnen gewoon de properties gebruiken van player (origineel van entity)
                                                                             Width,
                                                                             Height);


        //lijst om alle entities die hij vindt in het grid in te steken
        List <Entity> listEntitiesInGrid = new List <Entity>();



        //we gaan nu het gridje doorlopen en de entities in de lijst van entities steken


        foreach (Block tempBlock in gridPlayerSpace)
        {
            foreach (Entity entitieOnBlock in tempBlock.Entities) //lijst van entities die op de Block die we nu aan het bekijken zijn staan, .Entities komt uit Block
            {
                bool isAlreadyAddedToEntityList = false;          //voorlopig op false zetten



                foreach (Entity entityInList in listEntitiesInGrid)
                {
                    if (entityInList == entitieOnBlock)
                    //entity('s) op block gaan checken of die al in de lijst van entities zit (geen 2 keer dezelfde)
                    {
                        isAlreadyAddedToEntityList = true; //zit er al in, dus moet niet meer worden toegevoegd
                    }
                }//einde foreach, nu weten we welke entities er al in zitten en welke niet



                //(dit moet buiten de foreach staan want anders gaat hij voor elk item waar het niet mee overeen komt toevoegen, bv bolletje = bolletje checken--> niet toevoegen, bolletje = driehoekje checken --> nee, toevoegen, bolletje = vierkantje checken --> nee, toevoegen (bollejte zit er nu al 3 keer in, niet de bedoeling))

                //nu voegen we ook echt die entities toe aan de list
                if (!isAlreadyAddedToEntityList)            //als hij er nog NIET in zit, toevoegen
                {
                    listEntitiesInGrid.Add(entitieOnBlock); //de entity op de block die we aan het checken zijn, toevoegen aan de lijst van entities die zich op dat grid van de player bevinden
                }

                //nu zitten er in de list van entities alle entities die zich bevinden in ons grid van de player
            } //einde per block alle entities na checken
        }     //einde alle blocken na checken



        //nu gaan checken of er ergens een activatable in zit en die ook activaten
        foreach (Entity tempEntityInGrid in listEntitiesInGrid) //we overlopen de (wss 2) elementen die in de lijst zitten
        {
            if (tempEntityInGrid is Activatable)                //als er de entity een activatable is, moeten we hem casten zodat we hem kunnen activeren (een entity.Activate gaat niet)
            {
                Activatable activatableInGrid = (Activatable)tempEntityInGrid;
                activatableInGrid.Activate();
            }
        }
    } //einde CheckActivatables
 protected virtual void AddActivatable(Activatable activatable)
 {
     activatableObjects.Add(activatable);
 }
예제 #9
0
 protected override void ActivateEnd(Activatable activatable, bool recall = true)
 {
     base.ActivateEnd(activatable, recall);
 }
예제 #10
0
 void Start()
 {
     activatable = gameObject.GetComponent <Activatable>();
     inputMgr    = GameManager.Inst().GetComponent <InputManager>();
 }
예제 #11
0
 void Reset()
 {
     current = null;
     currentBiasAngle = float.PositiveInfinity;
 }
예제 #12
0
 void Awake()
 {
     activatable = GetComponentInChildren<Activatable>();
     meshRenderer = GetComponentInChildren<MeshRenderer>();
 }
예제 #13
0
 protected virtual void ActivateStart(Activatable activatable)
 {
     Debug.Log("Process Started Sent");
 }
예제 #14
0
 private void Start()
 {
     activatable = gameObject.GetComponent <Activatable>();
 }
예제 #15
0
 // Use this for initialization
 void Start()
 {
     switchScript = assignedSwitch.GetComponent<Activatable>();
     currentlyActivated = activated;
     if(currentlyActivated) Activate();
 }
예제 #16
0
 private void OnCollisionExit2D(Collision2D collision)
 {
     standingOver = null;
 }
예제 #17
0
 public Choice(string choiceText, Activatable choiceActivatable)
 {
     this.choiceText  = choiceText;
     this.activatable = choiceActivatable;
 }
예제 #18
0
	public void SetTooltip(Activatable tooltipObject, string frame) {
		if (tooltipObject == null && frame != frameName)
			return;
		tooltipToDraw = tooltipObject;
		frameName = frame;
	}
예제 #19
0
 public void Populate(Choice choice)
 {
     choiceText.text = choice.choiceText;
     activatable     = choice.activatable;
 }