コード例 #1
0
    public static void assignXP(float xp, int level, HitMe hitme, Firearm firearm, Vector3 pos, EffectType type)
    {
        if (xp <= 0)
        {
            //    Debug.LogError("WTF " + xp + " " + hitme.gameObject.name + "\n");
            return;
        }
        if (firearm == null)
        {
            return;
        }
        float return_xp = firearm.addXp(xp, true);//if tower is at max xp, return the xp,

        // if xp is from damage done, it is tied to health. Otherwise,
        //if xp is from Speed/Teleport/Weaken etc, just assign the XP. this is handled by HitMe.stats.getXp though


        if (return_xp > 0)
        {
            hitme.stats.returnXp(return_xp);
        }
        float added = xp - return_xp;

        onXpAdded?.Invoke(added, pos);

        firearm.toy.my_tower_stats.addXp(type, level, xp);
    }
コード例 #2
0
    public HitMe makeMonster(string name, int path, Vector3 posv, float point_factor, float xp_factor)
    {
        EnemyType enemy_type = EnumUtil.EnumFromString <EnemyType>(name, EnemyType.Null);

        if (enemy_type == EnemyType.Null)
        {
            Debug.LogError("Cannot make monster of type Null from " + name + "\n");
            return(null);
        }

        GameObject toy = zoo.getObject("Monsters/" + name, true);

        toy.tag = "Enemy";
        toy.transform.GetChild(0).tag = "Enemy";
        //  Debug.Log("LAYER " + toy.layer + "\n");
        //toy.layer = 12;//Unit
        toy.name = name + monster_count;
        monster_count++;



        toy.transform.SetParent(monsters_transform);
        toy.transform.position   = posv;
        toy.transform.localScale = Vector3.one;// = Vector3.one;

        HitMe hitme = toy.GetComponent <HitMe>();

        hitme.initStats(Central.Instance.getEnemy(enemy_type));

        // Debug.Log(hitme.gameObject.name + " " + hitme.GetInstanceID() + " " + Duration.time + " SPAWNED!\n");

        hitme.stats.point_factor = point_factor;
        //	Debug.Log("xp_factor " + xp_factor + "\n");
        if (xp_factor >= 0)
        {
            hitme.stats.SetXp(xp_factor);
        }


        targets.addByID(hitme);

        hitme.my_ai.my_dogtag.my_name = name + " " + Moon.Instance.getEnemyID();
        hitme.my_ai.my_dogtag.wave    = Moon.Instance.current_wave;

        AI ai = hitme.my_ai;

        ai.path        = path;
        ai.player      = WaypointMultiPathfinder.Instance.paths[path].finish.transform;
        ai.seewhen     = diagonal;
        ai.keepwalking = diagonal;
        ai.notsure     = diagonal;
        ai.Init();
        enemy_list.addMonster(toy.transform.GetInstanceID(), ai.my_dogtag);
        if (onPlacedToy != null)
        {
            onPlacedToy(toy.name, RuneType.Null, ToyType.Null);
        }
        //toy.transform.localRotation = ai.GetForwardDirection();
        return(hitme);
    }
コード例 #3
0
ファイル: End.cs プロジェクト: Valensta/otherside
    void OnTriggerEnter2D(Collider2D c)
    {
        Debug.Log($"END REACHED by {c.gameObject.name} tag {c.tag}\n");
        Collider2D other = c;

        if (other.tag.Equals("Enemy"))
        {
            //other.tag.Equals("EnemyWon");

            HitMe  my_hitme = other.attachedRigidbody.gameObject.GetComponent <HitMe>();
            string label    = my_hitme.my_ai.my_dogtag.getLabel();
            //  Debug.Log(my_hitme.gameObject.name + " " + my_hitme.GetInstanceID() + " " + Duration.time + " DIED!\n");

            my_hitme.DieSpecial();
            if (!LevelBalancer.Instance.am_enabled)
            {
                Peripheral.Instance.AdjustHealth(-1);
                Tracker.Log(PlayerEvent.CastleReached, true,
                            customAttributes: new Dictionary <string, string>()
                {
                    { "attribute_1", label }
                },
                            customMetrics: new Dictionary <string, double>()
                {
                    { "metric_2", Peripheral.Instance.my_inventory.GetWishCount(WishType.Sensible) }
                });
            }
            Debug.Log("** Castle reached " + label + "\n");
            GameStatCollector.Instance.CastleInvaded(my_hitme.gameObject.name);
        }
        else
        {
        }
    }
コード例 #4
0
ファイル: Calamity.cs プロジェクト: Valensta/otherside
    //CALAMITY
    public void Init(StatBit bit, HitMe target, Firearm firearm, EffectType type)
    {
        Prepare(bit, firearm, type);

        if (type == EffectType.Calamity)
        {
            my_lava = Peripheral.Instance.zoo.getObject("Wishes/calamity_lava", true).GetComponent <Lava>();
        }
        else
        {
            my_lava = Peripheral.Instance.zoo.getObject("Wishes/foil_lava", true).GetComponent <Lava>();
        }

        my_lava.auto_return = true;

        my_lava.my_firearm = firearm;
        my_lava.Init(type, bit.level, lava_stats, lava_timer, true, firearm);

        my_lava.SetLocation(target.transform, target.transform.position, lava_size, Quaternion.identity);
        my_lava.SetFactor(1);

        my_lava.transform.localPosition = Vector3.zero;
        Vector3 pos = my_lava.transform.position;

        pos.z = 3.75f;
        my_lava.transform.position = pos;
        my_lava.updateMyPosition   = true;

        target.lavas.Add(my_lava);
    }
コード例 #5
0
        public HitMeResponse Put(HitMe request)
        {
            var game = Cache.Get <CardGame>(request.GameId);

            if (game == null)
            {
                throw HttpError.NotFound("Game not found");
            }
            if (game.PlayerOneId != request.PlayerId &&
                game.PlayerTwoId != request.PlayerId)
            {
                throw HttpError.NotFound("Player not found");
            }

            var player = game.PlayerOneId == request.PlayerId ? game.PlayerOne : game.PlayerTwo;

            player.HitMe(game.Deck);

            game.Events.Add(new CardGameEvent
            {
                ClientId = request.PlayerId,
                GameId   = request.GameId,
                Message  = "Player {0} hit".Fmt(player.DisplayName),
                Type     = "HIT"
            });

            Cache.Set(request.GameId, game, TimeSpan.FromHours(1));
            var result = new HitMeResponse();

            return(result);
        }
コード例 #6
0
    IEnumerator MakeSparkes(HitMe hitme)
    {
        Vector3 from = hitme.gameObject.transform.position;

        float walk_angle    = hitme.my_ai.forward_direction_angle / (2 * Mathf.PI) - Mathf.PI;
        float collider_size = Get.getColliderSize(hitme.my_collider);

        for (int i = 0; i < bullets; i++)
        {
            //float angle = UnityEngine.Random.Range(walk_angle - Mathf.PI*.3f, walk_angle + Mathf.PI*.3f);

            float   angle  = Get.RandomNormal() * (Mathf.PI * .75f) + walk_angle;
            Vector3 target = from;
            Vector2 dir    = Get.GetDirection(angle, 2f);

            Vector3 mod_from = from + (new Vector3(dir.x, dir.y, 0f)) * collider_size * 1.1f;

            target += new Vector3(2f * dir.x, 2f * dir.y, 0f);

            Arrow arrow = Get.MakeArrow(arrow_name, mod_from, target, my_statsum, -1, null, false);
            arrow.myFirearm = my_firearm;

            int c = Mathf.FloorToInt(Random.Range(0, colors.Length));
            if (c >= colors.Length)
            {
                Debug.Log("Color too big"); c = colors.Length - 1;
            }
            arrow.sprite_renderer.color = colors[c];
            //arrow.transform.rotation = turn;
            arrow.gameObject.SetActive(true);
            arrow.sourceID = hitme.gameObject.GetInstanceID();
        }
        yield return(null);
    }
コード例 #7
0
 //Instantiate objects
 void Start()
 {
     controller  = transform.GetComponent <CharacterController>();
     childObject = controller.transform.GetChild(0).gameObject;
     actor       = transform.GetComponent <Actor>();
     meleeRange  = transform.GetChild(2).gameObject;
     hit         = meleeRange.GetComponent <HitMe>();
     anim        = childObject.GetComponent <Animation>();
 }
コード例 #8
0
 public void AskSparkles(HitMe hitme)
 {
     if (lets_make_sparkles)
     {
         StartCoroutine(MakeSparkes(hitme));
         lets_make_sparkles = false;
         TIME_TO_FIRE       = fire_time;
     }
 }
コード例 #9
0
 void EnableVisuals(HitMe me, float timer)
 {
     if (rate > 0)
     {
         me.EnableVisuals(MonsterType.Regeneration, timer);
     }
     else
     {
         me.EnableVisuals(MonsterType.DOT, timer);
     }
 }
コード例 #10
0
    void GetVictims()
    {
//	Debug.Log("Getting victims\n");
        if (monsters == null)
        {
            monsters = Peripheral.Instance.targets;
        }

        List <HitMe> targets = new List <HitMe>();

        for (int i = 0; i < monsters.max_count; i++)
        {
            HitMe enemy = monsters.array[i];
            if (enemy == null || enemy.amDying() || !enemy.gameObject.activeSelf)
            {
                continue;
            }

            if (Vector2.Distance(enemy.transform.position, this.transform.position) < radius)
            {
                targets.Add(enemy);
            }
        }

        if (targets.Count == 0)
        {
            return;
        }

        StatSum type = null;

        type        = arrow.myFirearm.toy.rune.GetStats(false);
        type.factor = 0.9f;
        StatSum explode_statsum = type.getSubStatSum(EffectType.Explode_Force);



        for (int i = 0; i < targets.Count; i++)
        {
            arrow.myFirearm.addXp(targets[i].HurtMe(explode_statsum, null, EffectType.Null), true);
            float mass = targets[i].my_rigidbody.mass;
            //Vector3 dir3 = targets[i].transform.position - from;
            Vector3 dir3 = this.transform.position - from;
            Vector2 dir  = Vector3.Normalize(new Vector2(dir3.x, dir3.y));
            //float dist = Vector2.Distance(targets[i].transform.position, from);

            float adjust = targets[i].my_ai.speed;
            targets[i].my_rigidbody.AddForce(adjust * strength * dir * mass, ForceMode2D.Impulse);
        }
    }
コード例 #11
0
    //DOT
    //regenerator doing damage => has negative stats[0]
    public float Init(HitMe _hitme, float[]  stats, RegeneratorType _type, Firearm firearm, int level)
    {
        repeat_rate   = Get.regenerator_repeat_rate;
        heal_duration = -1;
        type          = _type;
        my_hitme      = _hitme;
        effect_type   = EffectType.DOT;
        //if (_towerID != 0 && towerID != _towerID)
        //{
        //  towerID = _towerID;
        //my_firearm = getFirearm(towerID);
        // }
        my_firearm = firearm;
        monsters   = null;

        this.level = level;
        duration   = stats[1];
        EnableVisuals(_hitme, duration);
        TIME = 0f;
        if (is_active)
        {
            if (my_lava != null)
            {
                my_lava.lifespan = duration;
            }
            return(0f);
        }

        float finisher_percent = (stats.Length == StaticStat.StatLength(EffectType.DOT, true)) ? stats[3] : 0;

        if (finisher_percent > 0 && UnityEngine.Random.RandomRange(0, 1) < finisher_percent)
        {
            //  SetEverythingOnFire(stats);
            //    Debug.Log("Fin\n");
        }

        total_time     = duration + .1f; // this isn only intended for 1 time use, not repeating
        period         = -1;
        rate           = Get.getRegeneratorModRate(repeat_rate, stats[0], duration);
        type           = _type;
        done_for_good  = false;
        is_active      = true;
        am_doing_stuff = false;
        first_invoke   = true;
        //    Debug.Log("initializing regenerator total time " + total_time + " duration " + duration + " rate " + rate
        //                   + " repeat_rate " + repeat_rate + " stat " + stats[0] + "\n");
        return(0);
    }
コード例 #12
0
 void Start()
 {
     is_active = true;
     if (my_hitme == null)
     {
         my_hitme = hitme.GetComponent <HitMe> ();
     }
     if (defaultLayer < 0)
     {
         defaultLayer = gameObject.layer;
     }
     else
     {
         gameObject.layer = defaultLayer;
     }
     am_hidden = false;
 }
コード例 #13
0
ファイル: AIMovement.cs プロジェクト: justintam/Game-Demo
 void Start()
 {
     //Instantiate objects
     allActors  = GameObject.FindObjectsOfType <Actor>();
     actor      = transform.GetComponent <Actor>();
     meleeRange = transform.GetChild(1).gameObject;
     hit        = meleeRange.GetComponent <HitMe>();
     seeker     = GetComponent <Seeker>();
     controller = GetComponent <CharacterController>();
     anim       = controller.transform.GetChild(0).gameObject.GetComponent <Animation>();
     //Make attacks only fire only
     anim["Mine1/Attack1"].wrapMode = WrapMode.Once;
     anim["Mine2/Attack2"].wrapMode = WrapMode.Once;
     //Find random Waypoint
     pathWaypoint = GameObject.Find("Waypoint");
     //Start a new path to the targetPosition, return the result to the OnPathComplete function
     GoPath();
 }
コード例 #14
0
ファイル: Teleport.cs プロジェクト: Valensta/otherside
    public void Init(HitMe hitme)
    {
        my_ai = hitme.my_ai;

        foreach (WaypointNode p in WaypointMultiPathfinder.Instance.paths[my_ai.path].Map)
        {
            path.Add(p.order, p.transform.position);
            if (smallest > p.order)
            {
                smallest = p.order;
            }
            if (biggest < p.order)
            {
                biggest = p.order;
            }
        }


        hitme.EnableVisuals(MonsterType.Teleport, 1f);
    }
コード例 #15
0
    void GetFriends()
    {
        friends = new List <HitMe>();
        if (monsters == null)
        {
            monsters = Peripheral.Instance.targets;
        }
        for (int i = 0; i < monsters.max_count; i++)
        {
            HitMe friend = monsters.array[i];
            if (friend == null || friend.amDying() || !friend.gameObject.activeSelf)
            {
                continue;
            }

            if (Vector2.Distance(friend.transform.position, this.transform.position) < range)
            {
                friends.Add(friend);
            }
        }
    }
コード例 #16
0
ファイル: Fear.cs プロジェクト: Valensta/otherside
    public float Init(HitMe _hitme, float[] stats)
    {
        float _lifetime   = stats[0];
        float little_more = 0.1f;//otherwise it looks like it ends too soon because some of them take time to turn around

        if (is_active)
        {
            lifetime = _lifetime;
            my_time  = 0f;
            _hitme.EnableVisuals(MonsterType.Fear, lifetime + little_more);
            if (my_lava != null)
            {
                my_lava.lifespan = lifetime;
            }
            return(0.15f);
        }

        my_ai  = _hitme.my_ai;
        finish = my_ai.player.transform;
        start  = WaypointMultiPathfinder.Instance.paths[my_ai.path].start.transform;

        my_time   = 0;
        is_active = true;

        lifetime     = _lifetime;
        my_ai.player = start;
        my_ai.getNewPath();
        my_ai.forward_only = false;
        _hitme.EnableVisuals(MonsterType.Fear, lifetime + lifetime);

        float finisher_percent = (stats.Length == StaticStat.StatLength(EffectType.Fear, true)) ? stats[3] : 0;

        if (finisher_percent > 0 && UnityEngine.Random.RandomRange(0, 1) < finisher_percent)
        {
            CauseMassPanic(stats);
            //    Debug.Log("Fin\n");
        }

        return(0.15f);
    }
コード例 #17
0
ファイル: Weaken.cs プロジェクト: Valensta/otherside
    //weaken applies to defenses that are both in hitme.defenses and in hitme.init_defenses, won't apply to secondary defenses that may be added later on, like Fear.
    public float Init(HitMe _hitme, float[] stats)  //, float aff, float _lifetime){
    {
        my_hitme  = _hitme;
        my_time   = 0;
        is_active = true;

        float by = Get.getPercent(stats[0]);

        lifetime = stats[1];

        _hitme.EnableVisuals(MonsterType.Weaken, lifetime);

        original_defenses = new List <Defense>();
        //   Debug.Log("WEAKEN by " + by + " for " + lifetime + "\n");

        finisher_percent = (stats.Length == StaticStat.StatLength(EffectType.Weaken, true)) ? stats[1] : 0;
        if (finisher_percent > 0 && UnityEngine.Random.RandomRange(0, 1) < finisher_percent)
        {
            by = 0.05f;
        }

        foreach (Defense def in my_hitme.defenses)
        {
            Defense init = null;
            foreach (Defense init_def in my_hitme.init_defenses)
            {
                if (def.type == init_def.type)
                {
                    original_defenses.Add(new Defense(init_def.type, init_def.strength));
                    init = init_def;
                }
            }

            if (init != null)
            {
                def.strength = init.strength * by;
            }
        }
        return(by / 40f);
    }
コード例 #18
0
ファイル: Lava.cs プロジェクト: Valensta/otherside
    public List <HitMe> GetVictims()
    {
        if (!am_enabled)
        {
            return(null);
        }

        if (monsters == null)
        {
            monsters = Peripheral.Instance.targets;
        }
        if (updateMyPosition)
        {
            position = this.transform.position;
        }

        List <HitMe> targets = new List <HitMe>();

        //   Debug.Log("Get New " + GetInstanceID() + " " + Duration.realtimeSinceStartup + "\n");
        for (int i = 0; i < monsters.max_count; i++)
        {
            HitMe enemy = monsters.array[i];
            if (enemy == null)
            {
                continue;
            }
            if (enemy.amDying() || !enemy.gameObject.activeSelf)
            {
                continue;
            }
            if (inRange(enemy.transform))
            {
                targets.Add(enemy);
            }
        }

        return(targets);
    }
コード例 #19
0
ファイル: Converter.cs プロジェクト: Valensta/otherside
    public bool Init(HitMe _hitme, float[] stats, float factor)
    {
        if (_hitme == null)
        {
            Debug.Log("WTF hitme is null\n");
        }
        after = TransformType.Null;
        float roll    = UnityEngine.Random.Range(0, 1f);
        float current = 0;

        //    Debug.Log("roll is " + roll + " stats: " + stats[0] + " % " + " timer " + stats[1] + "\n");
        timer = stats[1] / factor;

        if (am_transformed)
        {
            return(true);
        }

/*
 *      float finisher_percent = (stats.Length == StaticStat.StatLength(EffectType.Transform, true)) ? stats[2]/100f : 0;
 *      if (finisher_percent > 0 && UnityEngine.Random.RandomRange(0, 1) < finisher_percent)
 *      {
 *          after = TransformType.Whale;
 *          timer = 99f;
 *      }
 *
 *      else
 *      {*/
        bool flying = (_hitme.gameObject.layer == Get.flyingProjectileLayer);

        if (roll < stats[0])
        {
            after = (flying)? TransformType.FruitFly :  TransformType.StickFigure;
        }
        //}


        if (!ValidateMe(after))
        {
            //     Debug.Log("Cancelling converter\n");
            return(false);
        }


        if (my_hitme == null)
        {
            my_hitme = _hitme;

            before.sprite      = my_hitme.sprite_renderer.sprite;
            before.sprite_size = my_hitme.sprite_renderer.gameObject.transform.localScale;
            getCollider(before);
            before.physics_material              = my_hitme.getCollider().sharedMaterial.name;
            before.rotation_interval             = my_hitme.my_ai.rotation_interval;
            before.rotation_inverse_speed_factor = my_hitme.my_ai.rotation_inverse_speed_factor;
            before.rotation_lerp_amount          = my_hitme.my_ai.rotation_lerp_amount;
            before.speed        = my_hitme.my_ai.speed;
            before.defenses     = CloneUtil.copyList <Defense>(my_hitme.stats.defenses);
            before.linear_drag  = my_hitme.my_rigidbody.drag;
            before.angular_drag = my_hitme.my_rigidbody.angularDrag;
        }
        ChangeMe(false);

        return(true);
    }
コード例 #20
0
ファイル: PlagueSummoner.cs プロジェクト: Valensta/otherside
    bool Fire()
    {
        MyArray <HitMe> enemies  = Peripheral.Instance.targets;
        int             how_many = Mathf.Min(Mathf.FloorToInt(stats[0]), enemies.max_count);

        Debug.Log("PlagueSummoner how many? " + how_many + "\n");
        if (how_many < 1)
        {
            return(false);
        }
        int[] selected_ids = new int[how_many];

        int current   = 0;
        int max_tries = 100;

        while (current < how_many && max_tries > 0)
        {
            int id = Mathf.FloorToInt(UnityEngine.Random.RandomRange(0, enemies.max_count));
            while (max_tries > 0 && (enemies.array[id] == null || enemies.array[id].amDying() || !enemies.array[id].gameObject.activeSelf || already_selected(selected_ids, id)))
            {
                id = Mathf.FloorToInt(UnityEngine.Random.RandomRange(0, enemies.max_count));
                max_tries--;
            }
            selected_ids[current] = id;
            current++;
        }
        //      Debug.Log("plague selected " + selected_ids.Length + " victims\n");
        foreach (int i in selected_ids)
        { //1 how many;  2 min % damage; 3 max % damage; 4 % speed and defense decrease
            HitMe victim = enemies.array[i];
            if (victim == null)
            {
                continue;
            }
            StatSum sum = new StatSum();
            sum.runetype = RuneType.Airy;
            sum.level    = -1;

            StatBit[] sb = new StatBit[3];
            sum.stats = sb;

            float percent = getDamage();
            float damage  = Get.bullshit_damage_factor * percent * victim.GetInitMass() / 2f;
            Debug.Log("Plague hurting victim " + victim.gameObject.name + " with " + victim.GetInitMass() + " init mass for " + percent + " healthl, damage: " + damage + "\n");

            sb[0]             = new StatBit();
            sb[0].effect_type = EffectType.DirectDamage; //% time
            sb[0].very_dumb   = true;
            sb[0].dumb        = true;
            sb[0].updateStat(damage);

            sb[1]             = new StatBit();
            sb[1].effect_type = EffectType.Speed;//%, time to normal, lifetime
            sb[1].Level       = -1;
            sb[1].very_dumb   = true;
            sb[1].dumb        = true;
            sb[1].updateStat(stats[3]);

            sb[2]             = new StatBit();
            sb[2].effect_type = EffectType.Weaken;//%, time
            sb[2].Level       = -1;
            sb[2].very_dumb   = true;
            sb[2].dumb        = true;
            sb[2].updateStat(stats[3]);

            victim.EnableVisuals(MonsterType.Plague, 2f);
            victim.HurtMe(sum, my_firearm, EffectType.Plague, level);
        }

        Tracker.Log(PlayerEvent.SpecialSkillUsed, true,
                    customAttributes: new Dictionary <string, string>()
        {
            { "attribute_1", EffectType.Plague.ToString() }
        },
                    customMetrics: new Dictionary <string, double>()
        {
            { "metric_1", level }
        });


        //  Central.Instance.my_spyglass.DisableByDragButton(true);
        return(true);
    }
コード例 #21
0
ファイル: Distractor.cs プロジェクト: Valensta/otherside
    void RandomLaunchDecoy()
    {
        float angle = UnityEngine.Random.Range(0, 1f);
        float rad   = angle * 2 * Mathf.PI;

        Vector3 direction = Get.GetDirection(rad, how_far);
        Vector3 pos       = this.transform.position + direction;

        my_hitme.setVisuals(MonsterType.SummonDecoy, 0.5f, true);
        GameObject obj;

        switch (type)
        {
        case DistractorType.Decoy:
            pos.z++;
            obj = Peripheral.Instance.zoo.getObject(decoy, false);
            float degrees = angle * 360f;
            obj.transform.localEulerAngles = new Vector3(0, 0, degrees);
            obj.transform.position         = this.transform.position;

            obj.name = obj.name + Peripheral.Instance.IncrementMonsterCount();

            obj.transform.SetParent(transform.parent);
            obj.SetActive(true);
            obj.GetComponent <Rigidbody2D>().velocity = direction * init_velocity * 2f;

            if (max_number > 0)
            {
                decoys.addByID(obj.GetComponent <Decoy>());
            }
            break;

        case DistractorType.Monster:
            Moon.Instance.enemySpawned(my_hitme.my_ai.my_dogtag.wave);

            HitMe hey = Peripheral.Instance.makeMonster(decoy, my_hitme.my_ai.path, pos, 0f, 0f);

            if (one_level)
            {
                foreach (Modifier tech in hey.enemy_tech)
                {
                    if (tech.GetType() == typeof(Distractor))
                    {
                        tech.setActive(false);
                    }
                }
            }
            hey.my_ai.my_dogtag.wave = my_hitme.my_ai.my_dogtag.wave;
            if (max_number > 0)
            {
                decoys.addByID(hey);
            }
            break;

        case DistractorType.Shield:
            decoy_position.z = 1f;

            if (my_shield == null)
            {
                my_shield = Peripheral.Instance.zoo.getObject(decoy, false).GetComponent <Decoy>();
                my_shield.transform.SetParent(transform);
                my_shield.transform.localPosition = decoy_position;
                my_shield.transform.localRotation = Quaternion.identity;
            }

            my_shield.Init(DistractorType.Shield, my_hitme.my_body);
            my_shield.gameObject.SetActive(true);
            break;
        }
    }
コード例 #22
0
        public HitMeResponse Put(HitMe request)
        {
            var game = Cache.Get<CardGame>(request.GameId);
            if (game == null) throw HttpError.NotFound("Game not found");
            if (game.PlayerOneId != request.PlayerId &&
                game.PlayerTwoId != request.PlayerId)
                throw HttpError.NotFound("Player not found");

            var player = game.PlayerOneId == request.PlayerId ? game.PlayerOne : game.PlayerTwo;
            player.HitMe(game.Deck);

            game.Events.Add(new CardGameEvent
            {
                ClientId = request.PlayerId,
                GameId = request.GameId,
                Message = "Player {0} hit".Fmt(player.DisplayName),
                Type = "HIT"
            });

            Cache.Set(request.GameId, game, TimeSpan.FromHours(1));
            var result = new HitMeResponse();
            return result;
        }
コード例 #23
0
ファイル: Speed.cs プロジェクト: Valensta/otherside
    public float Init(HitMe _hitme, float[] stats, EffectType type, EffectSubType sub_type)
    {
        if (_hitme.my_body.amHidden())
        {
            return(0);
        }

        my_ai = _hitme.my_ai;
        //    Debug.Log("Stats " + stats[0] + " " + stats[1] + " " + stats[2] + "\n");
        my_time = 0;
        start   = false;
        bool was_already_active = is_active;

        is_active = true;
        float xp = 0f;

        if (orig_rotation_inverse_speed_factor == -1)
        {
            orig_rotation_inverse_speed_factor = my_ai.rotation_inverse_speed_factor;
        }


        float aff = Get.getPercent(stats[0]);
        //    Debug.Log("SPEED AFF " + stats[0] + " -> " + aff + "\n");

        float original_aff = aff;

        if (aff < 0)
        {
            aff = 0;
        }
        if (aff > 0.99f)
        {
            aff = 0.99f;
        }
        bool froze = false;

        if (sub_type == EffectSubType.Freeze)
        {
            float pct_freeze = stats[3];
            float roll       = UnityEngine.Random.Range(0f, 100f);
            if (roll < pct_freeze)
            {
                Debug.Log("FREEZING " + my_ai.gameObject.name + " for " + stats[5] + "\n");
                aff   = 0f;
                froze = true;
                StatBit[] sb = new StatBit[1];
                lifetime       = stats[5];
                time_to_normal = stats[5];

                sb[0] = new StatBit(EffectType.Weaken, stats[4], 1, false);
                sb[0].effect_sub_type = EffectSubType.Freeze;
                sb[0].very_dumb       = true;
                sb[0].dumb            = true;

                StatSum weaken = new StatSum(3, 0, sb, RuneType.Airy);

                _hitme.HurtMe(weaken, null, EffectType.Null);
            }
        }
        if (froze)
        {
            _hitme.EnableVisuals(MonsterType.Freeze, lifetime);
        }
        else
        {
            _hitme.EnableVisuals(MonsterType.Speed, lifetime);
        }


        //Speed
        lifetime       = stats[2];
        time_to_normal = stats[1];
        float final = my_ai.speed * aff;


        /*  this makes speed lavas ineffective
         * if (was_already_active)
         * {
         *  float current_speed_factor = my_ai.current_speed / my_ai.speed;
         *  float new_factor = (2 * aff + current_speed_factor) / 3f;
         *  final = new_factor * my_ai.speed;
         *  Debug.Log("Speed acting again, current speed factor " + current_speed_factor + " new_factor " + new_factor + " instead of " + aff + "\n");
         * }*/


        //  Debug.Log(my_ai.gameObject.name + " SETTING SPEED FROM (" + original_aff + ") " + my_ai.speed + " TO " + final + " AFF " + aff + " FOR " + lifetime + "\n");
        my_ai.Stunned       = true;
        my_ai.current_speed = final;
        xp = lifetime * (my_ai.speed - my_ai.current_speed) / my_ai.speed;

        //   Debug.Log(stats[0] + " " + aff + " time to normal " + time_to_normal + "\n");
        //Debug.Log("stat " + stats[0] + " aff " + aff + " xp " + xp + " lifetime " + lifetime + " speed " + my_ai.speed + " current_speed " + my_ai.current_speed + "\n");



        return(xp / 5f);
        //return 0;
    }
コード例 #24
0
    public float Init(HitMe _hitme, float[] stats)
    {
        percent_increase = Get.getPercent(stats[0]);
        lifetime         = stats[1];
        my_time          = 0;
        _hitme.EnableVisuals(MonsterType.Wishful, lifetime);

        if (is_active)
        {
            return(percent_increase);
        }

        my_hitme  = _hitme;
        is_active = true;


        // Debug.Log("initializing wish catcher: percent increase " + percent_increase + " for " + lifetime + "\n");
        original_wish_list = new List <Wish>();



        finisher_percent = (stats.Length == StaticStat.StatLength(EffectType.WishCatcher, true)) ? stats[2] : 0;

        bool finisher = (finisher_percent > 0 && UnityEngine.Random.RandomRange(0, 1) < finisher_percent);

        if (finisher)
        {
            lifetime = stats[1] * 2f;        //some other stuff as well like add health and other nice wishes
        }
        original_wish_list = CloneUtil.copyList(_hitme.stats.inventory);

        bool have_health = false;
        bool have_damage = false;
        bool have_dreams = false;

        Debug.Log("Wishcatcher " + stats[0] + " -> " + percent_increase + "\n");
        foreach (Wish w in _hitme.stats.inventory)
        {
            w.percent *= (1 + percent_increase);
            //  Debug.Log("Setting " + _hitme.gameObject.name + " " + w.type + " to " + w.strength + "\n");
            if (finisher)
            {
                w.percent *= (1 + finisher_percent);
                if (w.type == WishType.MoreHealth)
                {
                    have_health = true;
                }
                if (w.type == WishType.MoreDreams)
                {
                    have_dreams = true;
                }
                if (w.type == WishType.MoreDamage)
                {
                    have_damage = true;
                }
            }
        }

        if (finisher && !have_health)
        {
            _hitme.stats.inventory.Add(new Wish(WishType.MoreHealth, 1, finisher_percent));
        }
        if (finisher && !have_dreams)
        {
            _hitme.stats.inventory.Add(new Wish(WishType.MoreDreams, 0.25f, finisher_percent));
        }
        if (finisher && !have_damage)
        {
            _hitme.stats.inventory.Add(new Wish(WishType.MoreDamage, 0.25f, finisher_percent));
        }

        return(percent_increase);
    }
コード例 #25
0
ファイル: AreaEffector.cs プロジェクト: Valensta/otherside
    void GetVictims()
    {
        if (monsters == null)
        {
            monsters = Peripheral.Instance.targets;
        }

        HitMe closest_target   = null;
        float closest_distance = 999f;

        bool previous_status = halo_active;

        List <HitMe> targets = new List <HitMe>();

        //  Debug.Log("Potential targets " + monsters.Count + " range is " + range + " tilesize " + tileSize + "\n");
        for (int i = 0; i < monsters.max_count; i++)
        {
            HitMe enemy = monsters.array[i];
            if (enemy == null || enemy.amDying() || !enemy.gameObject.activeSelf)
            {
                continue;
            }

            float distance = Vector2.Distance(enemy.transform.position, transform.position);
            if (distance < closest_distance)
            {
                closest_target   = enemy;
                closest_distance = distance;
            }
            if (distance < my_firearm.getCurrentRange() * tileSize)
            {
                targets.Add(enemy);
                halo_active = true;
            }
        }
        //  Debug.Log("Got " + targets.Count + " victims, previous status is " + previous_status + "\n");
        if (targets.Count > 0)
        {
            type = my_firearm.toy.rune.GetStats(false);


            if (previous_status == false)
            {
                if (my_calamity != null)
                {
                    StatBit bit = type.GetStatBit(EffectType.Calamity);
                    if (bit != null)
                    {
                        my_calamity.Init(bit, closest_target, my_firearm, EffectType.Calamity);
                    }
                }

                if (my_foil != null)
                {
                    StatBit bit = type.GetStatBit(EffectType.Foil);
                    if (bit != null)
                    {
                        my_foil.Init(bit, closest_target, my_firearm, EffectType.Foil);
                    }
                }

                if (my_swarm != null)
                {
                    StatBit bit = type.GetStatBit(EffectType.Swarm);
                    if (bit != null)
                    {
                        my_swarm.Init(bit, transform, my_firearm, EffectType.Swarm);
                    }
                }
            }
        }
        //    Debug.Log("Gonna hurt " + targets.Count + " victims\n");
        for (int i = 0; i < targets.Count; i++)
        {
            targets[i].HurtMe(type, my_firearm, EffectType.Null);

            if (my_wish_catcher != null)
            {
                StatBit bit = type.GetStatBit(EffectType.WishCatcher);
                if (bit != null)
                {
                    my_wish_catcher.Init(targets[i], bit.getStats());
                }
            }
        }

        if (!previous_status && halo_active)
        {
            ShowHalo(true);
            if (!previous_status)
            {
                my_firearm.UseAmmo();
            }
            if (previous_status == false)
            {
            }
        }
    }