예제 #1
0
    public override void Start()
    {
        base.Start();

        m_sets.Add("players");
        HandleSets(true);

        // to be replaced
        m_players.Add(this);

        m_rewiredPlayer = ReInput.players.GetPlayer(m_playerId);
        m_mouse         = GetComponent <PlayerCursor>();
        m_mouse.Init(m_playerId);
        m_playerController          = GetComponent <PlayerController>();
        m_playerController.m_player = this;

        m_feedbackColor = Constants.TRANSPARENT;

        // TODO: TEMP
        int hotkey = 1;

        foreach (Ability ability in Ability.m_abilities)
        {
            AbilityWrapper wrapper = new AbilityWrapper();

            wrapper.AbilityName   = ability.m_name;
            wrapper.Learned       = true;
            wrapper.TrainingLevel = 1;
            wrapper.HotkeySlot    = hotkey;

            m_abilities.Add(wrapper);

            hotkey++;
        }
    }
예제 #2
0
    public IEnumerator UpdateView()
    {
        while (true)
        {
            AbilityWrapper wrapper = m_entity.m_abilities.Find(a => a.HotkeySlot == m_hotkey);

            if (wrapper != null && (m_wrapper == null || wrapper.AbilityName != m_wrapper.AbilityName))
            {
                m_wrapper = wrapper;

                m_icon.enabled           = true;
                m_backgroundIcon.enabled = true;
                m_icon.sprite            = wrapper.GetAbility().m_icon;
                m_backgroundIcon.sprite  = wrapper.GetAbility().m_icon;
            }
            else if (wrapper == null)
            {
                m_wrapper = null;

                m_icon.enabled           = false;
                m_backgroundIcon.enabled = false;
            }

            string hotkeyText = "";

            if (m_entity is Player)
            {
                Rewired.Player     player     = ((Player)m_entity).m_rewiredPlayer;
                Rewired.Controller lastActive = player.controllers.GetLastActiveController();

                if (lastActive != null && lastActive.type == Rewired.ControllerType.Mouse)
                {
                    lastActive = player.controllers.Keyboard;
                }

                Rewired.ActionElementMap elementMap = player.controllers.maps.GetFirstElementMapWithAction(
                    lastActive, "Hotkey " + m_hotkey, false);

                if (elementMap != null)
                {
                    hotkeyText = elementMap.elementIdentifierName;
                }
                else
                {
                    elementMap = player.controllers.maps.GetFirstElementMapWithAction("Hotkey " + m_hotkey, false);

                    if (elementMap != null)
                    {
                        hotkeyText = elementMap.elementIdentifierName;
                    }
                }
            }

            m_hotkeyText.text = hotkeyText;

            yield return(new WaitForSeconds(Constants.ABILITY_VIEW_REFRESH));
        }
    }
예제 #3
0
    public void SetHotkey()
    {
        AbilityWrapper existingBind = m_selectedAbility.m_loader.m_entity.m_abilities.Find(a => a.HotkeySlot == m_dropdown.value);

        if (existingBind != null)
        {
            existingBind.HotkeySlot = 0;
            m_selectedAbility.m_loader.m_loadedAbilities.Find(a => a.m_ability == existingBind).m_selectionBorder.gameObject.SetActive(false);
        }

        m_selectedAbility.m_ability.HotkeySlot = m_dropdown.value;
        m_selectedAbility.m_selectionBorder.gameObject.SetActive(m_dropdown.value > 0);

        m_hotkeySetEvent.Raise();
    }
예제 #4
0
    public void UseAbility(string p_ability)
    {
        AbilityWrapper wrapper = m_abilities.Find(a => a.AbilityName == p_ability);

        if (wrapper == null && wrapper.Learned)
        {
            return;
        }

        Ability ability = wrapper.GetAbility();

        int cost         = ability.m_manaCosts.Find(m => m.TrainingLevel == wrapper.TrainingLevel).Value;
        int leftoverMana = m_stats.GetStat(Stats.MP) - cost;

        if (leftoverMana >= 0 && wrapper.Use())
        {
            m_stats.AddModifier(Stats.MP, -cost, 0);
            ability.Use(this, wrapper.TrainingLevel);

            if (wrapper.ChainedAbilities != null && wrapper.ChainedAbilities.Count > 0)
            {
                foreach (string chain in wrapper.ChainedAbilities)
                {
                    AbilityWrapper chainWrapper = m_abilities.Find(a => a.AbilityName == chain);

                    if (chainWrapper == null && chainWrapper.Learned)
                    {
                        continue;
                    }

                    Ability chainAbility = Ability.Get(chain);

                    cost         = chainAbility.m_manaCosts.Find(m => m.TrainingLevel == chainWrapper.TrainingLevel).Value;
                    leftoverMana = m_stats.GetStat(Stats.MP) - cost;

                    if (leftoverMana >= 0 && chainWrapper.Use())
                    {
                        m_stats.AddModifier(Stats.MP, -cost, 0);
                        chainAbility.Use(this, chainWrapper.TrainingLevel);
                    }
                }
            }
        }
    }
예제 #5
0
 public AbilitySkillWrapper(AbilityWrapper p_wrapper)
 {
     AbilityWrapper = p_wrapper;
 }
예제 #6
0
    void LateUpdate()
    {
        bool       leftClick           = true;
        bool       fire                = false;
        GameObject hover               = Game.m_rewiredEventSystem.GetGameObjectUnderPointer(m_playerId);
        bool       mouseOverGameObject = hover || UIItem.HeldItem;

        if (HideUIOnEvent.ObjectsHidden.Contains(hover))
        {
            mouseOverGameObject = UIItem.HeldItem;
        }
        if (UIItem.HeldItem && this == UIItem.Holder)
        {
            UIItem.HeldItem.MoveItem(m_mouse.GetPosition());
        }
        if (MenuHandler.Instance.m_openedMenus.Count > 0 || m_interactingWithNPC ||
            Time.time - m_lastNPCInteract <= 0.5f)
        {
            if (m_interactingWithNPC)
            {
                m_lastNPCInteract = Time.time;
            }
            return;
        }

        if (m_rewiredPlayer.GetButtonDown("SpawnNPC"))
        {
            Game.m_npcGenerator.GenerateRandom(1);
        }
        if (m_rewiredPlayer.GetButtonDown("SpawnEnemy"))
        {
            Game.m_enemyGenerator.Generate("TestEnemy");
        }

        if (m_rewiredPlayer.GetButton("Primary Fire"))
        {
            fire = true;
        }
        else if (m_rewiredPlayer.GetButton("Secondary Fire"))
        {
            fire = true; leftClick = false;
        }

        if (mouseOverGameObject)          // make sure we can't fire when we hover outside of ui elements when dragging items
        {
            m_wasHoldingLeftClick  = m_rewiredPlayer.GetButton("Primary Fire");
            m_wasHoldingRightClick = m_rewiredPlayer.GetButton("Secondary Fire");
        }
        else if (m_wasHoldingLeftClick || m_wasHoldingRightClick)
        {
            fire = false;
        }

        if (m_rewiredPlayer.GetButtonUp("Primary Fire"))
        {
            m_wasHoldingLeftClick = false;
        }
        if (m_rewiredPlayer.GetButtonUp("Secondary Fire"))
        {
            m_wasHoldingRightClick = false;
        }

        if (fire && !mouseOverGameObject)
        {
            Weapon weapon = m_equipment.GetWeaponHandlingClick(leftClick);
            string toFire = m_equipment.GetShotPatternHandlingClick(leftClick);

            if (weapon == null)
            {
                return;
            }
            if (string.IsNullOrEmpty(toFire))
            {
                return;
            }

            weapon.Use(this, new string[] { weapon.m_leftClickPattern == toFire ? "true" : "false", "true" });            // using weapon in case it has specific code to execute
        }

        for (int i = 1; i <= 6; i++)
        {
            if (m_rewiredPlayer.GetButtonDown("Hotkey " + i))
            {
                AbilityWrapper wrapper = m_abilities.Find(a => a.HotkeySlot == i);

                if (wrapper != null)
                {
                    UseAbility(wrapper.AbilityName);
                }
            }
        }
    }