コード例 #1
0
 public void try_interact(rpg_character actor)
 {
     Debug.Log("Tried to interact wtih " + name);
     if (non_destructive.Count > 0)
     {
         for (int i = 0; i < non_destructive.Count; i++)
         {
             non_destructive[i].interact(actor);
             if (non_destructive[i].interact_effect != null)
             {
                 GameObject new_effect = GameObject.Instantiate(non_destructive[i].interact_effect);
                 new_effect.transform.position = transform.position;
             }
         }
     }
     else
     {
         for (int i = 0; i < destructive.Count; i++)
         {
             destructive[i].interact(actor);
             if (destructive[i].interact_effect != null)
             {
                 GameObject new_effect = GameObject.Instantiate(destructive[i].interact_effect);
                 new_effect.transform.position = transform.position;
             }
         }
     }
 }
コード例 #2
0
ファイル: openable.cs プロジェクト: alltucki/Dungeon-Crawler
    public override void interact(rpg_character actor)
    {
        if (!locked)
        {
            Vector3 temp_pos = replacement.transform.position;
            replacement.transform.position = transform.position;
            transform.position             = temp_pos;

            openable is_openable = replacement.GetComponent <openable>();

            //If we're currently blocking sight, check to see if we should change
            if (block_sight)
            {
                if (is_openable == null)
                {
                    Debug.Log("Set transparent to true");
                    util_ref.v_manager.transparent[(int)replacement.transform.position.x, (int)replacement.transform.position.y] = true;
                    util_ref.v_manager.refresh_fog();
                }
                if (is_openable != null && !is_openable.block_sight)
                {
                    Debug.Log("Set transparent to true");
                    util_ref.v_manager.transparent[(int)replacement.transform.position.x, (int)replacement.transform.position.y] = true;
                    util_ref.v_manager.refresh_fog();
                }
            }

            if (is_openable != null && is_openable.block_sight)
            {
                Debug.Log("Set transparent to false");
                util_ref.v_manager.transparent[(int)replacement.transform.position.x, (int)replacement.transform.position.y] = false;
                util_ref.v_manager.refresh_fog();
            }
        }
    }
コード例 #3
0
    public override bool activate(rpg_character attacker, attack_entity triggering_attack)
    {
        //Loop through the list of target squares and limit targets to only the first
        //pierce + 1 targets
        int remain_pierce             = triggering_attack.stats.get_stat_value("Pierce");
        List <Vector2Int> new_targets = new List <Vector2Int>();

        bool has_targets = false;

        for (int i = 0; i < triggering_attack.target_squares.Count; i++)
        {
            if (remain_pierce > 0)
            {
                if (util_ref.e_manager.is_occupied(triggering_attack.target_squares[i]) || util_ref.p_manager.get_p_pos() == triggering_attack.target_squares[i])
                {
                    new_targets.Add(triggering_attack.target_squares[i]);
                    remain_pierce--;
                    has_targets = true;
                }
            }
        }
        triggering_attack.target_squares = new_targets;

        return(has_targets);
    }
コード例 #4
0
    public bool do_attack(rpg_character attacker, Vector2Int target)
    {
        //Check conditions
        if (!util_ref.v_manager.is_visible[target.x, target.y])
        {
            return(false);
        }
        Vector2Int start_pos = new Vector2Int((int)attacker.transform.position.x, (int)attacker.transform.position.y);

        if (Mathf.Abs(Vector2Int.Distance(start_pos, target)) > stats.get_stat_value("Range"))
        {
            return(false);
        }

        switch (shape)
        {
        case attack_shape.line:
            return(line_attack(attacker, target));

        case attack_shape.single:
            return(single_attack(attacker, target));

        case attack_shape.square:
            return(area_attack(attacker, target));

        default:
            Debug.LogError("Do attack encountered default case");
            return(false);
        }
    }
コード例 #5
0
    public override bool activate(rpg_character attacker, attack_entity triggering_attack)
    {
        bool made_attack = false;

        for (int i = 0; i < triggering_attack.target_squares.Count; i++)
        {
            //If the square is occupied, call the take damage method on the enemy at that point
            if (util_ref.e_manager.is_occupied(triggering_attack.target_squares[i]))
            {
                if (attacker.tag != "Enemy")
                {
                    made_attack = true;
                    attack_data data = new attack_data();
                    data.attacker   = attacker;
                    data.attack_ref = triggering_attack;
                    util_ref.e_manager.get_at_square(triggering_attack.target_squares[i]).
                    GetComponent <rpg_character>().take_damage(data);
                }
            }
            else if (util_ref.p_manager.get_p_pos() == triggering_attack.target_squares[i])
            {
                if (attacker.gameObject.tag != "Player")
                {
                    made_attack = true;
                    attack_data data = new attack_data();
                    data.attacker   = attacker;
                    data.attack_ref = triggering_attack;
                    util_ref.p_manager.cur_player.GetComponent <rpg_character>().take_damage(data);
                }
            }
        }
        return(made_attack);
    }
コード例 #6
0
    public void do_effect(rpg_character target)
    {
        if (!initialized)
        {
            init();
        }

        Debug.Log("Do effect called for " + effect_name + " on " + target.name);
        turns_remaining--;
        attack_data dummy_data = new attack_data();

        dummy_data.target = target;

        if (turns_remaining <= 0)
        {
            //per_turn_effect.remove_modifier(dummy_data, mod_value);
            target.stat_cond.Remove(this);
        }
        else if (per_turn_effect != null)
        {
            play_sfx(dummy_data);
            //per_turn_effect.set_modifier(dummy_data, mod_value);
            //per_turn_effect.has_applied = false;
        }
    }
コード例 #7
0
    public override bool activate(rpg_character attacker, attack_entity triggering_attack)
    {
        GameObject new_effect = GameObject.Instantiate(effect_prefab);

        new_effect.transform.position = attacker.transform.position;
        return(true);
    }
コード例 #8
0
    public override bool activate(rpg_character attacker, attack_entity triggering_attack)
    {
        bool has_triggered = false;

        for (int i = 0; i < triggering_attack.target_squares.Count; i++)
        {
            if (util_ref.e_manager.is_occupied(triggering_attack.target_squares[i]))
            {
                if (attacker.gameObject.tag != "Enemy")
                {
                    has_triggered = true;
                    GameObject new_effect = GameObject.Instantiate(effect_prefab);
                    new_effect.transform.position = new Vector3(triggering_attack.target_squares[i].x, triggering_attack.target_squares[i].y);
                    new_effect.GetComponent <effects_script>().parent = attacker.gameObject;
                    attacker.set_locked("Locked " + attacker.name + " to allow effect to play");
                }
            }
            else if (util_ref.p_manager.get_p_pos() == triggering_attack.target_squares[i])
            {
                if (attacker.gameObject.tag != "Player")
                {
                    has_triggered = true;
                    GameObject new_effect = GameObject.Instantiate(effect_prefab);
                    new_effect.transform.position = new Vector3(triggering_attack.target_squares[i].x, triggering_attack.target_squares[i].y);
                }
            }
        }

        return(has_triggered);
    }
コード例 #9
0
    public override bool activate(rpg_character attacker, attack_entity triggering_attack)
    {
        bool has_dashed = false;

        for (int i = 0; i < triggering_attack.target_squares.Count; i++)
        {
            if (util_ref.e_manager.is_occupied(triggering_attack.target_squares[i]))
            {
                GameObject target   = util_ref.e_manager.get_at_square(triggering_attack.target_squares[i]);
                Vector3    adjacent = attacker.transform.position - target.transform.position;
                adjacent = adjacent.normalized;
                adjacent = target.transform.position + adjacent;
                adjacent = new Vector3(Mathf.Round(adjacent.x), Mathf.Round(adjacent.y), 0);


                GameObject afterimage = GameObject.Instantiate(util_ref.sprite_prefab);
                afterimage.transform.position = attacker.transform.position;
                afterimage.GetComponent <SpriteRenderer>().sprite = attacker.GetComponent <SpriteRenderer>().sprite;
                afterimage.AddComponent <fade_effect>();
                afterimage.GetComponent <fade_effect>().speed = .75f;

                //Debug.Log("Adjacent square is: " + adjacent.ToString());
                attacker.transform.position = adjacent;

                util_ref.v_manager.refresh_fog();
                has_dashed = true;
            }
        }
        return(has_dashed);
    }
コード例 #10
0
    private bool single_attack(rpg_character attacker, Vector2Int target)
    {
        target_squares.Clear();
        target_squares.Add(target);

        return(activate_effects(attacker));
    }
コード例 #11
0
ファイル: util_ref.cs プロジェクト: alltucki/Dungeon-Crawler
    // Use this for initialization
    void Start()
    {
        DontDestroyOnLoad(gameObject);
        hotbar_prefab = hotbar_ref;
        sprite_prefab = sprite_ref;
        pickup_prefab = pickup_ref;

        g_manager       = GameObject.Find("Game Manager").GetComponent <game_manager>();
        i_manager       = GameObject.Find("Item Manager").GetComponent <item_manager>();
        e_manager       = GameObject.Find("Enemy Manager").GetComponent <enemy_manager>();
        b_manager       = GameObject.Find("Enemy Manager").GetComponent <boss_manager>();
        p_manager       = GameObject.Find("Player Manager").GetComponent <player_manager>();
        perks           = GameObject.Find("Player Manager").GetComponent <perk_manager>();
        feature_spawner = GameObject.Find("Map Manager").GetComponent <map_feature_spawner>();
        m_gen           = GameObject.Find("Map Manager").GetComponent <map_generator>();
        v_manager       = GameObject.Find("Map Manager").GetComponent <fov_manager>();
        d_manager       = GameObject.Find("Dijkstra Manager").GetComponent <dijkstra_manager>();
        events          = GameObject.Find("Event Manager").GetComponent <event_manager>();

        game_master = new rpg_character();

        colors    = new Color[7];
        colors[0] = Color.green;
        colors[1] = Color.red;
        colors[2] = Color.blue;
        colors[3] = Color.cyan;
        colors[4] = Color.magenta;
        colors[5] = Color.yellow;
        colors[6] = Color.grey;

        up    = new Vector2Int(0, 1);
        down  = new Vector2Int(0, -1);
        left  = new Vector2Int(-1, 0);
        right = new Vector2Int(1, 0);
    }
コード例 #12
0
ファイル: breakable.cs プロジェクト: alltucki/Dungeon-Crawler
 public override void interact(rpg_character actor)
 {
     health--;
     if (health <= 0)
     {
         Destroy(gameObject);
     }
 }
コード例 #13
0
 public void add_effect(rpg_character target)
 {
     target_character = target;
     turns_remaining  = max_turns;
     Debug.Log("Started listening to " + target.name + "_start_turn");
     util_ref.events.start_listening(target.name + "_start_turn", on_turn);
     on_start();
 }
コード例 #14
0
 public void trigger_event(string event_name, rpg_character actor)
 {
     last_actor = actor;
     //Debug.Log("Triggered " + event_name);
     if (events.ContainsKey(event_name))
     {
         events[event_name].Invoke();
     }
 }
コード例 #15
0
    /*
     * private void OnTriggerEnter2D(Collider2D collision)
     * {
     *  if (collision.gameObject.tag == "Player")
     *  {
     *      Debug.Log("Detected collision entering " + gameObject.name);
     *      collision.gameObject.GetComponent<player_script>().inv.pickup(attached_item);
     *
     *      Destroy(gameObject);
     *  }
     * }
     */
    public override void interact(rpg_character actor)
    {
        if (actor.gameObject.tag == "Player")
        {
            actor.GetComponent <player_script>().inv.pickup(attached_item);

            Destroy(gameObject);
        }
    }
コード例 #16
0
 private bool activate_effects(rpg_character attacker)
 {
     activated_effect = false;
     for (int i = 0; i < components.Length; i++)
     {
         //Check the function first; if the value is set to true
         //the OR evaluation will short-circuit if it's first
         activated_effect = components[i].activate(attacker, this) || activated_effect;
     }
     return(activated_effect);
 }
コード例 #17
0
    private bool line_attack(rpg_character attacker, Vector2Int target)
    {
        //Get targets between attacker and chosen square
        Vector2Int start_pos = new Vector2Int((int)attacker.gameObject.transform.position.x,
                                              (int)attacker.gameObject.transform.position.y);

        target_squares.Clear();
        target_squares = line(start_pos.x, start_pos.y, target.x, target.y);

        return(activate_effects(attacker));
    }
コード例 #18
0
ファイル: pushable.cs プロジェクト: alltucki/Dungeon-Crawler
    public override void interact(rpg_character actor)
    {
        Debug.Log("Pushed pushable");

        Vector3 adjacent = actor.transform.position - transform.position;

        adjacent = adjacent.normalized;
        adjacent = transform.position - adjacent;
        adjacent = new Vector3(Mathf.Round(adjacent.x), Mathf.Round(adjacent.y), 0);

        GetComponent <Rigidbody2D>().MovePosition(new Vector2(adjacent.x, adjacent.y));
    }
コード例 #19
0
ファイル: buyable.cs プロジェクト: alltucki/Dungeon-Crawler
 public override void interact(rpg_character actor)
 {
     if (actor.stats.get_stat_value("Gold") < requires_gold)
     {
         return;
     }
     else
     {
         actor.stats.get_stat("Gold").set_value(actor.stats.get_stat_value("Gold") - requires_gold);
         actor.GetComponent <player_script>().inv.pickup(associated_item);
         Destroy(gameObject);
     }
 }
コード例 #20
0
    // Use this for initialization
    void Start()
    {
        attached_character = GetComponent <rpg_character>();

        attached_character.stats.init_character();
        attached_character.stats.set_stat_max("Health", health_template);
        attached_character.stats.set_stat_to_max("Health");
        attached_character.stats.set_stat("Max Move", move_template);
        attached_character.stats.set_stat("Max Attack", attack_template);
        attached_character.stats.set_stat("Max Shared", shared_template);

        GetComponent <StateController>().attached_character = attached_character;
        attached_character.current_target_character         = util_ref.p_manager.cur_player.GetComponent <rpg_character>();
    }
コード例 #21
0
    private bool area_attack(rpg_character attacker, Vector2Int target)
    {
        target_squares.Clear();

        for (int x = target.x - stats.get_stat_value("Radius"); x < target.x + stats.get_stat_value("Radius"); x++)
        {
            for (int y = target.y - stats.get_stat_value("Radius"); y < target.y + stats.get_stat_value("Radius"); y++)
            {
                target_squares.Add(new Vector2Int(x, y));
            }
        }

        return(activate_effects(attacker));
    }
コード例 #22
0
    //Drop item chosen from item manager
    public override void interact(rpg_character actor)
    {
        if (has_looted)
        {
            return;
        }
        item drop_item = util_ref.cur_palette.container_drops.get_weighted_item();

        Debug.Log("Dropping " + drop_item.name);
        GameObject looted_item = GameObject.Instantiate(util_ref.pickup_prefab);

        looted_item.transform.position = transform.position;
        looted_item.GetComponent <pickupable>().attached_item = drop_item;
        has_looted = true;
    }
コード例 #23
0
 public override bool activate(rpg_character attacker, attack_entity triggering_attack)
 {
     if (triggering_attack.activated_effect)
     {
         temporary_condition new_condition = Object.Instantiate(condition) as temporary_condition;
         new_condition.source_character = attacker;
         new_condition.source_attack    = triggering_attack;
         new_condition.add_effect(attacker);
         return(true);
     }
     else
     {
         return(false);
     }
 }
コード例 #24
0
    public override bool activate(rpg_character attacker, attack_entity triggering_attack)
    {
        if (triggering_attack.activated_effect)
        {
            if (attacker.type == character_type.enemy)
            {
                attacker.queued_attack = replacement_skill;
            }
            else if (attacker.type == character_type.player)
            {
                attacker.GetComponent <player_script>().inv.swap_skill(triggering_attack, replacement_skill);
            }
        }

        return(triggering_attack.activated_effect);
    }
コード例 #25
0
    public override bool activate(rpg_character attacker, attack_entity triggering_attack)
    {
        bool did_apply = false;

        for (int i = 0; i < triggering_attack.target_squares.Count; i++)
        {
            if (util_ref.e_manager.is_occupied(triggering_attack.target_squares[i]))
            {
                temporary_condition new_condition = Object.Instantiate(condition) as temporary_condition;
                new_condition.source_character = attacker;
                new_condition.source_attack    = triggering_attack;
                new_condition.add_effect(util_ref.e_manager.get_at_square(triggering_attack.target_squares[i]).GetComponent <rpg_character>());
                did_apply = true;
            }
        }
        return(did_apply);
    }
コード例 #26
0
    public void on_apply(rpg_character target)
    {
        if (!initialized)
        {
            init();
        }

        Debug.Log("Called on_apply");
        attack_data dummy_data = new attack_data();

        dummy_data.target = target;

        if (on_apply_effect != null)
        {
            play_sfx(dummy_data);
            //on_apply_effect.set_modifier(dummy_data, mod_value);
        }
    }
コード例 #27
0
 public override bool activate(rpg_character attacker, attack_entity triggering_attack)
 {
     Debug.Log("Looping through target squares list of length " + triggering_attack.target_squares.Count);
     for (int i = 0; i < triggering_attack.target_squares.Count; i++)
     {
         GameObject new_projectile = GameObject.Instantiate(projectile);
         new_projectile.transform.position = attacker.transform.position + new Vector3(.5f, .5f, 0f);
         Vector3 target_square = new Vector3(triggering_attack.target_squares[i].x + .5f, triggering_attack.target_squares[i].y + .5f);
         new_projectile.GetComponent <projectile_script>().generate_midpoint(attacker.transform.position, target_square);
         Debug.Log("Created projectile targeting " + target_square.ToString());
         new_projectile.GetComponent <projectile_script>().target = target_square;
         new_projectile.GetComponent <projectile_script>().type   = type;
     }
     if (triggering_attack.target_squares.Count > 0)
     {
         return(true);
     }
     return(false);
 }
コード例 #28
0
    public override bool activate(rpg_character attacker, attack_entity triggering_attack)
    {
        if (cur_cooldown > 0)
        {
            triggering_attack.target_squares.Clear();
            return(false);
        }
        else
        {
            cur_cooldown = triggering_attack.stats.get_stat_value("Cooldown");
            target_event = attacker.name + "_start_turn";
            util_ref.events.start_listening(target_event, tick);

            //Get the index of the appropriate skill and set the fill to none
            attack_reference = triggering_attack;
            int index_reference = util_ref.p_manager.p_script.inv.get_skill_index(attack_reference);
            util_ref.p_manager.p_script.inv.hotbar.transform.GetChild(index_reference).GetComponent <Image>().fillAmount = 0f;

            return(true);
        }
    }
コード例 #29
0
 public override bool activate(rpg_character attacker, attack_entity triggering_attack)
 {
     //Need to set stat in character so other attacks can reference the charges
     if (triggering_attack.activated_effect)
     {
         if (!attacker.stats.has_stat(charge_name))
         {
             attacker.stats.init_stat(charge_name);
             attacker.stats.set_stat_max(charge_name, max_charge);
         }
         if (attacker.stats.get_stat_value(charge_name) == max_charge)
         {
             triggering_attack.activated_effect = false;
             return(false);
         }
         attacker.stats.get_stat(charge_name).inc_value();
         //triggering_attack.stats.get_stat(charge_name).inc_value();
         Debug.Log(charge_name + " is now " + attacker.stats.get_stat_value(charge_name));
     }
     return(triggering_attack.activated_effect);
 }
コード例 #30
0
    public override bool activate(rpg_character attacker, attack_entity triggering_attack)
    {
        if (triggering_attack.target_squares.Count <= 0)
        {
            return(false);
        }
        int cost    = triggering_attack.stats.get_stat_value("cost");
        int charges = attacker.stats.get_stat_value(charge_name);

        //Debug.Log("Attempting to remove " + cost + " charges from " + charges + " " + charge_name);
        if (charges >= cost)
        {
            attacker.stats.set_stat(charge_name, charges - cost);
            //Debug.Log(charge_name + " is now " + attacker.stats.get_stat_value(charge_name));
            return(true);
        }
        else
        {
            triggering_attack.target_squares.Clear();
            return(false);
        }
    }