コード例 #1
0
    public void ChangeInputValue()
    {
        Transform healthbox    = this.transform.parent.parent;
        SetHealth healthScript = healthbox.GetComponent <SetHealth>();

        if (this.name == "InputName")
        {
            healthScript.nameForHealth = this.GetComponent <InputField>().text;
        }
        else if (this.name == "InputHealth")
        {
            healthScript.health = int.Parse(this.GetComponent <InputField>().text);
        }
    }
コード例 #2
0
ファイル: PacketNotifier.cs プロジェクト: agentran/GameServer
        public void NotifySetHealth(IAttackableUnit u)
        {
            var sh = new SetHealth(u);

            _packetHandlerManager.BroadcastPacketVision(u, sh, Channel.CHL_S2C);
        }
コード例 #3
0
ファイル: PacketNotifier.cs プロジェクト: agentran/GameServer
        public void NotifySetHealth(int userId, uint netId)
        {
            var setHealthPacket = new SetHealth(netId);

            _packetHandlerManager.SendPacket(userId, setHealthPacket, Channel.CHL_S2C);
        }
コード例 #4
0
ファイル: PacketNotifier.cs プロジェクト: agentran/GameServer
        public void NotifySetHealth(int userId, IAttackableUnit unit)
        {
            var setHealthPacket = new SetHealth(unit);

            _packetHandlerManager.SendPacket(userId, setHealthPacket, Channel.CHL_S2C);
        }
コード例 #5
0
ファイル: HandleSpawn.cs プロジェクト: Kaap0/GameServer
        public override bool HandlePacket(Peer peer, byte[] data)
        {
            var start = new StatePacket2(PacketCmd.PKT_S2C_StartSpawn);

            _game.PacketHandlerManager.sendPacket(peer, start, Channel.CHL_S2C);
            _logger.LogCoreInfo("Spawning map");

            int playerId = 0;

            foreach (var p in _playerManager.GetPlayers())
            {
                var spawn = new HeroSpawn(p.Item2, playerId++);
                _game.PacketHandlerManager.sendPacket(peer, spawn, Channel.CHL_S2C);

                var info = new AvatarInfo(p.Item2);
                _game.PacketHandlerManager.sendPacket(peer, info, Channel.CHL_S2C);
            }

            var peerInfo     = _playerManager.GetPeerInfo(peer);
            var bluePill     = _itemManager.GetItemType(_game.Map.MapGameScript.BluePillId);
            var itemInstance = peerInfo.Champion.getInventory().SetExtraItem(7, bluePill);
            var buyItem      = new BuyItemResponse(peerInfo.Champion, itemInstance);

            _game.PacketHandlerManager.sendPacket(peer, buyItem, Channel.CHL_S2C);

            // Runes
            byte runeItemSlot = 14;

            foreach (var rune in peerInfo.Champion.RuneList._runes)
            {
                var runeItem = _itemManager.GetItemType(rune.Value);
                var newRune  = peerInfo.Champion.getInventory().SetExtraItem(runeItemSlot, runeItem);
                _playerManager.GetPeerInfo(peer).Champion.GetStats().AddModifier(runeItem);
                runeItemSlot++;
            }

            // Not sure why both 7 and 14 skill slot, but it does not seem to work without it
            var skillUp = new SkillUpResponse(peerInfo.Champion.NetId, 7, 1, (byte)peerInfo.Champion.getSkillPoints());

            _game.PacketHandlerManager.sendPacket(peer, skillUp, Channel.CHL_GAMEPLAY);
            skillUp = new SkillUpResponse(peerInfo.Champion.NetId, 14, 1, (byte)peerInfo.Champion.getSkillPoints());
            _game.PacketHandlerManager.sendPacket(peer, skillUp, Channel.CHL_GAMEPLAY);

            peerInfo.Champion.GetStats().setSpellEnabled(7, true);
            peerInfo.Champion.GetStats().setSpellEnabled(14, true);
            peerInfo.Champion.GetStats().setSummonerSpellEnabled(0, true);
            peerInfo.Champion.GetStats().setSummonerSpellEnabled(1, true);

            var objects = _game.ObjectManager.GetObjects();

            foreach (var kv in objects)
            {
                if (kv.Value is LaneTurret)
                {
                    var turret      = kv.Value as LaneTurret;
                    var turretSpawn = new TurretSpawn(turret);
                    _game.PacketHandlerManager.sendPacket(peer, turretSpawn, Channel.CHL_S2C);

                    // Fog Of War
                    var fogOfWarPacket = new FogUpdate2(turret, _networkIdManager);
                    _game.PacketHandlerManager.broadcastPacketTeam(turret.Team, fogOfWarPacket, Channel.CHL_S2C);

                    // To suppress game HP-related errors for enemy turrets out of vision
                    var setHealthPacket = new SetHealth(turret);
                    _game.PacketHandlerManager.sendPacket(peer, setHealthPacket, Channel.CHL_S2C);

                    foreach (var item in turret.Inventory)
                    {
                        if (item == null)
                        {
                            continue;
                        }
                        _game.PacketNotifier.NotifyItemBought(turret, item as Item);
                    }

                    continue;
                }
                else if (kv.Value is LevelProp)
                {
                    var levelProp = kv.Value as LevelProp;

                    var levelPropSpawnPacket = new LevelPropSpawn(levelProp);
                    _game.PacketHandlerManager.sendPacket(peer, levelPropSpawnPacket, Channel.CHL_S2C);

                    continue;
                }
                else if (kv.Value is Champion)
                {
                    var champion = kv.Value as Champion;
                    if (champion.IsVisibleByTeam(peerInfo.Champion.Team))
                    {
                        var enterVisionPacket = new EnterVisionAgain(champion);
                        _game.PacketHandlerManager.sendPacket(peer, enterVisionPacket, Channel.CHL_S2C);
                    }
                }
                else if (kv.Value is Inhibitor || kv.Value is Nexus)
                {
                    var inhibtor = kv.Value as AttackableUnit;

                    var minionSpawnPacket = new MinionSpawn2(inhibtor.NetId);
                    _game.PacketHandlerManager.sendPacket(peer, minionSpawnPacket, Channel.CHL_S2C);
                    var setHealthPacket = new SetHealth(inhibtor.NetId);
                    _game.PacketHandlerManager.sendPacket(peer, setHealthPacket, Channel.CHL_S2C);

                    continue;
                }
                else if (kv.Value is Projectile)
                {
                    var projectile = kv.Value as Projectile;
                    if (projectile.IsVisibleByTeam(peerInfo.Champion.Team))
                    {
                        var spawnProjectilePacket = new SpawnProjectile(projectile);
                        _game.PacketHandlerManager.sendPacket(peer, spawnProjectilePacket, Channel.CHL_S2C);
                    }

                    continue;
                }
                else
                {
                    _logger.LogCoreWarning("Object of type: " + kv.Value.GetType() + " not handled in HandleSpawn.");
                }
            }

            // TODO shop map specific?
            // Level props are just models, we need button-object minions to allow the client to interact with it
            if (peerInfo != null && peerInfo.Team == TeamId.TEAM_BLUE)
            {
                // Shop (blue team)
                var minionSpawnPacket = new MinionSpawn2(0xff10c6db);
                _game.PacketHandlerManager.sendPacket(peer, minionSpawnPacket, Channel.CHL_S2C);
                var setHealthPacket = new SetHealth(0xff10c6db);
                _game.PacketHandlerManager.sendPacket(peer, setHealthPacket, Channel.CHL_S2C);
            }
            else if (peerInfo != null && peerInfo.Team == TeamId.TEAM_PURPLE)
            {
                // Shop (purple team)
                var minionSpawnPacket = new MinionSpawn2(0xffa6170e);
                _game.PacketHandlerManager.sendPacket(peer, minionSpawnPacket, Channel.CHL_S2C);
                var setHealthPacket = new SetHealth(0xffa6170e);
                _game.PacketHandlerManager.sendPacket(peer, setHealthPacket, Channel.CHL_S2C);
            }

            var endSpawnPacket = new StatePacket(PacketCmd.PKT_S2C_EndSpawn);

            return(_game.PacketHandlerManager.sendPacket(peer, endSpawnPacket, Channel.CHL_S2C));
        }
コード例 #6
0
        public void notifySetHealth(Unit u)
        {
            var sh = new SetHealth(u);

            _game.PacketHandlerManager.broadcastPacketVision(u, sh, Channel.CHL_S2C);
        }
コード例 #7
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var  start = new StatePacket2(PacketCmdS2C.PKT_S2C_StartSpawn);
            bool p1    = PacketHandlerManager.getInstace().sendPacket(peer, start, Channel.CHL_S2C);

            Logger.LogCoreInfo("Spawning map");

            int        playerId   = 0;
            ClientInfo playerInfo = null;

            foreach (var p in game.getPlayers())
            {
                if (p.Item2.getPeer() == peer)
                {
                    playerInfo = p.Item2;
                }

                var spawn = new HeroSpawn(p.Item2, playerId++);
                PacketHandlerManager.getInstace().sendPacket(peer, spawn, Channel.CHL_S2C);

                var info = new PlayerInfo(p.Item2);
                PacketHandlerManager.getInstace().sendPacket(peer, info, Channel.CHL_S2C);

                p.Item2.getChampion().getStats().setSummonerSpellEnabled(0, true);
                p.Item2.getChampion().getStats().setSummonerSpellEnabled(1, true);

                // TODO: Recall slot
            }
            var objects = game.getMap().getObjects();

            foreach (var kv in objects)
            {
                var t = kv.Value as Turret;
                if (t != null)
                {
                    var turretSpawn = new TurretSpawn(t);
                    PacketHandlerManager.getInstace().sendPacket(peer, turretSpawn, Channel.CHL_S2C);

                    // To suppress game HP-related errors for enemy turrets out of vision
                    var sh = new SetHealth(t);
                    PacketHandlerManager.getInstace().sendPacket(peer, sh, Channel.CHL_S2C);
                    continue;
                }

                var lp = kv.Value as LevelProp;
                if (lp != null)
                {
                    var lpsPacket = new SpawnParticle.LevelPropSpawn(lp);
                    PacketHandlerManager.getInstace().sendPacket(peer, lpsPacket, Channel.CHL_S2C);
                }
            }

            // Level props are just models, we need button-object minions to allow the client to interact with it
            //if (playerInfo != null && playerInfo.getTeam() == TeamId.TEAM_BLUE)
            {
                // Shop (blue team)
                var ms1 = new MinionSpawn2(0xff10c6db);
                PacketHandlerManager.getInstace().sendPacket(peer, ms1, Channel.CHL_S2C);
                var sh1 = new SetHealth2(0xff10c6db);
                PacketHandlerManager.getInstace().sendPacket(peer, sh1, Channel.CHL_S2C);

                // Vision for hardcoded objects
                // Top inhib
                var ms2 = new MinionSpawn2(0xffd23c3e);
                PacketHandlerManager.getInstace().sendPacket(peer, ms2, Channel.CHL_S2C);
                var sh2 = new SetHealth2(0xffd23c3e);
                PacketHandlerManager.getInstace().sendPacket(peer, sh2, Channel.CHL_S2C);

                // Mid inhib
                var ms3 = new MinionSpawn2(0xff4a20f1);
                PacketHandlerManager.getInstace().sendPacket(peer, ms3, Channel.CHL_S2C);
                var sh3 = new SetHealth2(0xff4a20f1);
                PacketHandlerManager.getInstace().sendPacket(peer, sh3, Channel.CHL_S2C);

                // Bottom inhib
                var ms4 = new MinionSpawn2(0xff9303e1);
                PacketHandlerManager.getInstace().sendPacket(peer, ms4, Channel.CHL_S2C);
                var sh4 = new SetHealth2(0xff9303e1);
                PacketHandlerManager.getInstace().sendPacket(peer, sh4, Channel.CHL_S2C);

                // Nexus
                var ms5 = new MinionSpawn2(0xfff97db5);
                PacketHandlerManager.getInstace().sendPacket(peer, ms5, Channel.CHL_S2C);
                var sh5 = new SetHealth2(0xfff97db5);
                PacketHandlerManager.getInstace().sendPacket(peer, sh5, Channel.CHL_S2C);
            }
            //  else if (playerInfo != null && playerInfo.getTeam() == TeamId.TEAM_PURPLE)
            {
                // Shop (purple team)
                var ms1 = new MinionSpawn2(0xffa6170e);
                PacketHandlerManager.getInstace().sendPacket(peer, ms1, Channel.CHL_S2C);
                var sh1 = new SetHealth2(0xffa6170e);
                PacketHandlerManager.getInstace().sendPacket(peer, sh1, Channel.CHL_S2C);

                // Vision for hardcoded objects
                // Top inhib
                var ms2 = new MinionSpawn2(0xff6793d0);
                PacketHandlerManager.getInstace().sendPacket(peer, ms2, Channel.CHL_S2C);
                var sh2 = new SetHealth2(0xff6793d0);
                PacketHandlerManager.getInstace().sendPacket(peer, sh2, Channel.CHL_S2C);

                // Mid inhib
                var ms3 = new MinionSpawn2(0xffff8f1f);
                PacketHandlerManager.getInstace().sendPacket(peer, ms3, Channel.CHL_S2C);
                var sh3 = new SetHealth2(0xffff8f1f);
                PacketHandlerManager.getInstace().sendPacket(peer, sh3, Channel.CHL_S2C);

                // Bottom inhib
                var ms4 = new MinionSpawn2(0xff26ac0f);
                PacketHandlerManager.getInstace().sendPacket(peer, ms4, Channel.CHL_S2C);
                var sh4 = new SetHealth2(0xff26ac0f);
                PacketHandlerManager.getInstace().sendPacket(peer, sh4, Channel.CHL_S2C);

                // Nexus
                var ms5 = new MinionSpawn2(0xfff02c0f);
                PacketHandlerManager.getInstace().sendPacket(peer, ms5, Channel.CHL_S2C);
                var sh5 = new SetHealth2(0xfff02c0f);
                PacketHandlerManager.getInstace().sendPacket(peer, sh5, Channel.CHL_S2C);
            }

            var  end = new StatePacket(PacketCmdS2C.PKT_S2C_EndSpawn);
            bool p2  = PacketHandlerManager.getInstace().sendPacket(peer, end, Channel.CHL_S2C);

            return(p1 && p2);
        }
コード例 #8
0
        public bool HandlePacket(Peer peer, byte[] data)
        {
            var start = new StatePacket2(PacketCmdS2C.PKT_S2C_StartSpawn);

            _game.PacketHandlerManager.sendPacket(peer, start, Channel.CHL_S2C);
            _logger.LogCoreInfo("Spawning map");

            int playerId = 0;

            foreach (var p in _playerManager.GetPlayers())
            {
                var spawn = new HeroSpawn(p.Item2, playerId++);
                _game.PacketHandlerManager.sendPacket(peer, spawn, Channel.CHL_S2C);

                var info = new PlayerInfo(p.Item2);
                _game.PacketHandlerManager.sendPacket(peer, info, Channel.CHL_S2C);
            }

            var peerInfo     = _playerManager.GetPeerInfo(peer);
            var bluePill     = _itemManager.GetItemType(_game.Map.GetBluePillId());
            var itemInstance = peerInfo.Champion.getInventory().SetExtraItem(7, bluePill);
            var buyItem      = new BuyItemAns(peerInfo.Champion, itemInstance);

            _game.PacketHandlerManager.sendPacket(peer, buyItem, Channel.CHL_S2C);

            // Runes
            byte runeItemSlot = 14;

            foreach (var rune in peerInfo.Champion.RuneList._runes)
            {
                var runeItem = _itemManager.GetItemType(rune.Value);
                var newRune  = peerInfo.Champion.getInventory().SetExtraItem(runeItemSlot, runeItem);
                _playerManager.GetPeerInfo(peer).Champion.GetStats().AddBuff(runeItem);
                runeItemSlot++;
            }

            // Not sure why both 7 and 14 skill slot, but it does not seem to work without it
            var skillUp = new SkillUpPacket(peerInfo.Champion.NetId, 7, 1, (byte)peerInfo.Champion.getSkillPoints());

            _game.PacketHandlerManager.sendPacket(peer, skillUp, Channel.CHL_GAMEPLAY);
            skillUp = new SkillUpPacket(peerInfo.Champion.NetId, 14, 1, (byte)peerInfo.Champion.getSkillPoints());
            _game.PacketHandlerManager.sendPacket(peer, skillUp, Channel.CHL_GAMEPLAY);

            peerInfo.Champion.GetStats().setSpellEnabled(7, true);
            peerInfo.Champion.GetStats().setSpellEnabled(14, true);
            peerInfo.Champion.GetStats().setSummonerSpellEnabled(0, true);
            peerInfo.Champion.GetStats().setSummonerSpellEnabled(1, true);

            var objects = _game.Map.GetObjects();

            foreach (var kv in objects)
            {
                if (kv.Value is LaneTurret)
                {
                    var t           = kv.Value as LaneTurret;
                    var turretSpawn = new TurretSpawn(t);
                    _game.PacketHandlerManager.sendPacket(peer, turretSpawn, Channel.CHL_S2C);

                    // Fog Of War
                    var fow = new FogUpdate2(t);
                    _game.PacketHandlerManager.broadcastPacketTeam(t.Team, fow, Channel.CHL_S2C);

                    // To suppress game HP-related errors for enemy turrets out of vision
                    var sh = new SetHealth(t);
                    _game.PacketHandlerManager.sendPacket(peer, sh, Channel.CHL_S2C);

                    foreach (var item in t.Inventory)
                    {
                        if (item == null)
                        {
                            continue;
                        }
                        _game.PacketNotifier.notifyItemBought(t, item as Item);
                    }

                    continue;
                }
                else if (kv.Value is LevelProp)
                {
                    var lp = kv.Value as LevelProp;

                    var lpsPacket = new LevelPropSpawn(lp);
                    _game.PacketHandlerManager.sendPacket(peer, lpsPacket, Channel.CHL_S2C);
                }
                else if (kv.Value is Inhibitor || kv.Value is Nexus)
                {
                    var inhib = kv.Value as Unit;

                    var ms = new MinionSpawn2(inhib.NetId);
                    _game.PacketHandlerManager.sendPacket(peer, ms, Channel.CHL_S2C);
                    var sh = new SetHealth(inhib.NetId);
                    _game.PacketHandlerManager.sendPacket(peer, sh, Channel.CHL_S2C);
                }
            }

            // TODO shop map specific?
            // Level props are just models, we need button-object minions to allow the client to interact with it
            if (peerInfo != null && peerInfo.Team == TeamId.TEAM_BLUE)
            {
                // Shop (blue team)
                var ms1 = new MinionSpawn2(0xff10c6db);
                _game.PacketHandlerManager.sendPacket(peer, ms1, Channel.CHL_S2C);
                var sh1 = new SetHealth(0xff10c6db);
                _game.PacketHandlerManager.sendPacket(peer, sh1, Channel.CHL_S2C);
            }
            else if (peerInfo != null && peerInfo.Team == TeamId.TEAM_PURPLE)
            {
                // Shop (purple team)
                var ms1 = new MinionSpawn2(0xffa6170e);
                _game.PacketHandlerManager.sendPacket(peer, ms1, Channel.CHL_S2C);
                var sh1 = new SetHealth(0xffa6170e);
                _game.PacketHandlerManager.sendPacket(peer, sh1, Channel.CHL_S2C);
            }

            var end = new StatePacket(PacketCmdS2C.PKT_S2C_EndSpawn);

            return(_game.PacketHandlerManager.sendPacket(peer, end, Channel.CHL_S2C));
        }
コード例 #9
0
        public static void notifySetHealth(Unit u)
        {
            var sh = new SetHealth(u);

            PacketHandlerManager.getInstace().broadcastPacketVision(u, sh, Channel.CHL_S2C);
        }
コード例 #10
0
ファイル: HandleSpawn.cs プロジェクト: chienhao10/GameServer
        public bool HandlePacket(Peer peer, byte[] data, Game game)
        {
            var start = new StatePacket2(PacketCmdS2C.PKT_S2C_StartSpawn);

            game.PacketHandlerManager.sendPacket(peer, start, Channel.CHL_S2C);
            Logger.LogCoreInfo("Spawning map");

            int playerId = 0;

            foreach (var p in game.GetPlayers())
            {
                var spawn = new HeroSpawn(p.Item2, playerId++);
                game.PacketHandlerManager.sendPacket(peer, spawn, Channel.CHL_S2C);

                var info = new PlayerInfo(p.Item2);
                game.PacketHandlerManager.sendPacket(peer, info, Channel.CHL_S2C);
            }

            var peerInfo     = game.GetPeerInfo(peer);
            var bluePill     = game.ItemManager.GetItemType(game.GetMap().GetBluePillId());
            var itemInstance = peerInfo.GetChampion().Inventory.SetExtraItem(7, bluePill);
            var buyItem      = new BuyItemAns(peerInfo.GetChampion(), itemInstance);

            game.PacketHandlerManager.sendPacket(peer, buyItem, Channel.CHL_S2C);

            // Not sure why both 7 and 14 skill slot, but it does not seem to work without it
            var skillUp = new SkillUpPacket(peerInfo.GetChampion().getNetId(), 7, 1, (byte)peerInfo.GetChampion().getSkillPoints());

            game.PacketHandlerManager.sendPacket(peer, skillUp, Channel.CHL_GAMEPLAY);
            skillUp = new SkillUpPacket(peerInfo.GetChampion().getNetId(), 14, 1, (byte)peerInfo.GetChampion().getSkillPoints());
            game.PacketHandlerManager.sendPacket(peer, skillUp, Channel.CHL_GAMEPLAY);

            peerInfo.GetChampion().GetStats().setSpellEnabled(7, true);
            peerInfo.GetChampion().GetStats().setSpellEnabled(14, true);
            peerInfo.GetChampion().GetStats().setSummonerSpellEnabled(0, true);
            peerInfo.GetChampion().GetStats().setSummonerSpellEnabled(1, true);

            var objects = game.GetMap().GetObjects();

            foreach (var kv in objects)
            {
                if (kv.Value is Turret)
                {
                    var t           = kv.Value as Turret;
                    var turretSpawn = new TurretSpawn(t);
                    game.PacketHandlerManager.sendPacket(peer, turretSpawn, Channel.CHL_S2C);

                    // To suppress game HP-related errors for enemy turrets out of vision
                    var sh = new SetHealth(t);
                    game.PacketHandlerManager.sendPacket(peer, sh, Channel.CHL_S2C);
                    continue;
                }
                else if (kv.Value is LevelProp)
                {
                    var lp = kv.Value as LevelProp;

                    var lpsPacket = new LevelPropSpawn(lp);
                    game.PacketHandlerManager.sendPacket(peer, lpsPacket, Channel.CHL_S2C);
                }
                else if (kv.Value is Inhibitor || kv.Value is Nexus)
                {
                    var inhib = kv.Value as Unit;

                    var ms = new MinionSpawn2(inhib.getNetId());
                    game.PacketHandlerManager.sendPacket(peer, ms, Channel.CHL_S2C);
                    var sh = new SetHealth(inhib.getNetId());
                    game.PacketHandlerManager.sendPacket(peer, sh, Channel.CHL_S2C);
                }
            }

            // TODO shop map specific?
            // Level props are just models, we need button-object minions to allow the client to interact with it
            if (peerInfo != null && peerInfo.GetTeam() == TeamId.TEAM_BLUE)
            {
                // Shop (blue team)
                var ms1 = new MinionSpawn2(0xff10c6db);
                game.PacketHandlerManager.sendPacket(peer, ms1, Channel.CHL_S2C);
                var sh1 = new SetHealth(0xff10c6db);
                game.PacketHandlerManager.sendPacket(peer, sh1, Channel.CHL_S2C);
            }
            else if (peerInfo != null && peerInfo.GetTeam() == TeamId.TEAM_PURPLE)
            {
                // Shop (purple team)
                var ms1 = new MinionSpawn2(0xffa6170e);
                game.PacketHandlerManager.sendPacket(peer, ms1, Channel.CHL_S2C);
                var sh1 = new SetHealth(0xffa6170e);
                game.PacketHandlerManager.sendPacket(peer, sh1, Channel.CHL_S2C);
            }

            var end = new StatePacket(PacketCmdS2C.PKT_S2C_EndSpawn);

            return(game.PacketHandlerManager.sendPacket(peer, end, Channel.CHL_S2C));
        }
コード例 #11
0
    void Update()
    {
        //Health
        health = GameObject.Find("Health_bar").GetComponent <Health_Controller>().health_this;

        //Horizontal movement
        float hInput = Input.GetAxis("Horizontal");

        rb.AddForce(new Vector2(hInput * modstats[0, 0], 0));

        //Cannon rotation
        lookDirection             = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
        lookAngle                 = Mathf.Atan2(lookDirection.y, lookDirection.x) * Mathf.Rad2Deg;
        cannon_Transform.rotation = Quaternion.Euler(0f, 0f, lookAngle + 90f);

        //Bend
        if (Input.GetKeyDown(KeyCode.C))
        {
            gameObject.GetComponent <Transform>().localScale =
                new Vector3(standard_size.x, Mathf.Abs(gameObject.GetComponent <Transform>().localScale.y - 1.5f), 1);
        }
        if (Input.GetKeyDown(KeyCode.X))
        {
            gameObject.GetComponent <Transform>().localScale =
                new Vector3(Mathf.Abs(gameObject.GetComponent <Transform>().localScale.x - 1.5f), standard_size.y, 1);
        }

        //Fire + Fire improvement
        if (Input.GetMouseButton(0) && gameObject.transform.localScale.x == 1 && gameObject.transform.localScale.y == 1)
        {
            if (watch_fire <= 0)
            {
                Fire(cannon_Transform_Top, lookDirection.normalized, Quaternion.Euler(0f, 0f, lookAngle - 90f), bullet_Gameobject);
                rb.AddForce(-lookDirection.normalized * 3 * watch_fire, ForceMode2D.Impulse);
                watch_fire = modstats[1, 0];
            }
        }

        if (watch_fire > 0)
        {
            watch_fire -= 1 * Time.deltaTime;
        }

        //Jump ray
        RaycastHit2D fireRay = Physics2D.Raycast(cannon_Transform_Top.position, lookDirection.normalized);

        Debug.DrawRay(cannon_Transform_Top.position, lookDirection.normalized, Color.green);

        //Mira
        if (fireRay.point == null)
        {
            mira_Gameobject.transform.position = new Vector2(-22, 22);
            mira_Gameobject.SetActive(false);
        }
        else if (fireRay.point != null)
        {
            mira_Gameobject.SetActive(true);
            mira_Gameobject.transform.position = fireRay.point;
        }

        //Jump
        if (Input.GetKey(KeyCode.Space) && watch_Jump <= 0)
        {
            //Increse Force & Set up a limit
            if (power_Jump < 3)
            {
                power_Jump += 3 * Time.deltaTime;
            }
        }
        else if (!Input.GetKey(KeyCode.Space) && watch_Jump <= 0 && fireRay.transform != null)
        {
            jumped_GameObject = GameObject.Find(fireRay.transform.name);
            if (jumped_GameObject.GetComponent <SetHealth>() != null && power_Jump > 0)
            {
                //Jump Enemy
                jumped_rb           = jumped_GameObject.GetComponent <Rigidbody2D>();
                health_Enemy_script = jumped_GameObject.GetComponent <SetHealth>();
                if (power_Jump > 0)
                {
                    jumped_rb.AddForce
                        (new Vector2(
                            -jumped_GameObject.transform.position.x + transform.position.x,
                            -jumped_GameObject.transform.position.y + transform.position.y).normalized
                        *power_Jump * 2 * ((health_Enemy_script.healthset) - health / fireRay.distance)
                        );
                }
            }
            if (power_Jump > 0 && (jumped_GameObject.tag == "Walls" || jumped_GameObject.GetComponent <SetHealth>() == null))
            {
                //Normal Jump
                jumped_GameObject = null;
                jumped_rb         = null;

                if (fireRay.distance <= 1)
                {
                    rb.AddForce(-lookDirection.normalized * 5 * power_Jump, ForceMode2D.Impulse);
                    watch_Jump = 2;
                    power_Jump = 0;
                }
            }
        }

        //EXP//////////////////////////////////////////////////////////////////////////////////////////////
        if (exp_Float >= 1)
        {
            exp_Float         = 0;
            level            += 1;
            disposable_level += 1;
            Instantiate(levelUp_prefab, new Vector3(this.transform.position.x + .5f, this.transform.position.y + 1f, 0), Quaternion.Euler(0, 0, 0));
        }

        if (disposable_level > 0)
        {
            //Improve speed (1)
            if (Input.GetKeyDown(KeyCode.Alpha1))
            {
                disposable_level--;
                modstats[0, 0] *= 1.2f;
            }

            //Improve fire rate (2)
            else if (Input.GetKeyDown(KeyCode.Alpha2))
            {
                disposable_level--;
                if (modstats[1, 0] > 0.1f)
                {
                    modstats[1, 0] -= modstats[1, 1] / 10;
                }
            }

            //Give health (3)
            else if (Input.GetKeyDown(KeyCode.Alpha3))
            {
                disposable_level--;
                Instantiate(givenhealthGameObject);
            }
        }

        if (Input.GetKeyDown(KeyCode.L))
        {
            exp_Float = 1;
        }
        exp_Transform.localScale = new Vector3(exp_Float, exp_Float, 0);

        //Sand watch
        if (watch_Jump > 0)
        {
            watch_Jump -= 1 * Time.deltaTime;
        }
    }