public void MainLogicThread()
        {
            for (uint i = 1; i < 5; ++i)
            {
                MonsterCharacter monster = new MonsterCharacter();
                monster.UniqueID = i;
                dicMonsters.Add(i,monster);

            }
            
            


            while (true)
            {               
                Time.Update();              

                Parse();

                Update();
                
            }

        }
Exemple #2
0
    private void Awake()
    {
        Messaging.GUI.ActiveSlot.Invoke(-1);

        character = GetComponent <MonsterCharacter>();
        character.OnInputRequest = FillInputFrame;
        character.OnDeath.AddListener(() => { OnDeath(); });
        character.OnDamage.AddListener((_) => { Messaging.GUI.Painflash.Invoke(.25f); });

        character.OnWeaponChange.AddListener((i) =>
        {
            PlayerInfo.CurrentLocal.LastPlayerWeaponSwap = i;
            Messaging.GUI.ActiveSlot.Invoke(i);

            if (i >= 0 && i < character.weapons.Length && character.weapons[i] != null)
            {
                Messaging.GUI.LeftAbilityIcon.Invoke(character.weapons[i].LeftAbilitySprite);
                Messaging.GUI.RightAbilityIcon.Invoke(character.weapons[i].RightAbilitySprite);
            }
            else
            {
                Messaging.GUI.LeftAbilityIcon.Invoke(null);
                Messaging.GUI.RightAbilityIcon.Invoke(null);
            }
        });

        GetComponent <ThingController>().GridPosChanged.AddListener((p) =>
        {
            Messaging.Player.PlayerGridPosition.Invoke(p);

            int r = Room.GetRoomIndex(p);
            if (r != -1)
            {
                Messaging.Player.PlayerEnterRoom.Invoke(r);
            }
        });

        PlayerInfo.CurrentLocal.PlayerHasBeenInitialized = true;

        character.OnDeserialize.AddListener(() =>
        {
            Messaging.CameraControl.Spectator.Invoke(false);
            Messaging.CameraControl.RemoveShake.Invoke();
            Messaging.CameraControl.TargetPosition.Invoke(transform.position);
            Messaging.CameraControl.TargetRotation.Invoke(0);
            Messaging.CameraControl.SpeedMultiplier.Invoke(1f);
            Messaging.CameraControl.Teleport.Invoke();
        });

        Messaging.Player.EquipPlayerItems.AddListener(() =>
        {
            for (int w = 0; w < Mathf.Min(PlayerInfo.CurrentLocal.PlayerWeapons.Length, character.weapons.Length); w++)
            {
                if (PlayerInfo.CurrentLocal.PlayerWeapons == null)
                {
                    character.weapons[w] = null;
                    continue;
                }

                character.weapons[w] = PlayerInfo.CurrentLocal.PlayerWeapons[w];
            }

            for (int s = 0; s < Mathf.Min(PlayerInfo.CurrentLocal.PlayerSkills.Length, character.Skills.Length); s++)
            {
                if (PlayerInfo.CurrentLocal.PlayerSkills == null)
                {
                    character.Skills[s] = null;
                    continue;
                }

                character.Skills[s] = PlayerInfo.CurrentLocal.PlayerSkills[s];
            }

            SetActionBarIcons();
        });

        Messaging.Player.ForceHolster.AddListener(() => { character.UnEquip(); });
        Messaging.Player.DeActivateSkill.AddListener((i) =>
        {
            character.Skills[i]?.DeActivate(character, i);
        });

        Messaging.Player.ActivateAccessory.AddListener((i) =>
        {
            if (i >= 0 && i < PlayerInfo.CurrentLocal.PlayerAccessories.Length)
            {
                PlayerInfo.CurrentLocal.PlayerAccessories[i]?.Activate(character);
            }
        });

        Messaging.Player.DeActivateAccessory.AddListener((i) =>
        {
            if (i >= 0 && i < PlayerInfo.CurrentLocal.PlayerAccessories.Length)
            {
                PlayerInfo.CurrentLocal.PlayerAccessories[i]?.DeActivate(character);
            }
        });

        Messaging.Player.AddTalent.AddListener((talent) =>
        {
            if (PlayerInfo.CurrentLocal.TalentPoints <= 0)
            {
                Messaging.GUI.ScreenMessage.Invoke("NOT ENOUGH TALENT POINTS!", Color.red);
                return;
            }

            PlayerInfo.CurrentLocal.Talents.Add(talent);
            talent.Activate(character);
            PlayerInfo.CurrentLocal.TalentPoints--;
            Messaging.Player.TalentPoints.Invoke(PlayerInfo.CurrentLocal.TalentPoints);
        });

        Messaging.Player.RemoveTalent.AddListener((talent) =>
        {
            if (!PlayerInfo.CurrentLocal.Talents.Contains(talent))
            {
                Debug.LogError("PlayerControls: RemoveTalent: talent \"" + talent.name + "\" not found in PlayerInfo.CurrentLocal.Talents");
                return;
            }

            talent.DeActivate(character);
            PlayerInfo.CurrentLocal.Talents.Remove(talent);
            PlayerInfo.CurrentLocal.TalentPoints++;
            Messaging.Player.TalentPoints.Invoke(PlayerInfo.CurrentLocal.TalentPoints);
        });

        Messaging.Player.GetLocalPlayerStats = () =>
        {
            MonsterCharacter.ChargeRegenFrame frame = new MonsterCharacter.ChargeRegenFrame
            {
                RechargeAmount = character.ChargeRegenPerTick
            };

            character.OnChargeRegen.Invoke(frame);

            return(new PlayerStats()
            {
                MaxHealth = character.MaxHitPoints / 1000,
                MaxCharge = character.MaxChargePoints / 1000,
                Armor = character.Armor,
                MovementSpeed = character.walkSpeed,
                ChargeRegen = (float)frame.RechargeAmount * 50f / 1000f,
                DamageDecay = (float)character.SoftDamageDecayPerTick * 50f / 1000f,
            });
        };

        Messaging.Player.Invulnerable.AddListener((b) =>
        {
            character.Invulnerable = b;
        });

        Messaging.GUI.OpenCanvas.Invoke("GameCanvas");
    }
 public void LifeTargetEnable(MonsterCharacter target)
 {
     this._healthTargetObject.gameObject.SetActive(true);
     this.healthBarTargetInfo(target);
     if (!target.possessed)
         this._targetName.text = target.monsterName;
     else
         this._targetName.text = UIManager.instance.player.playerName;
 }
Exemple #4
0
 public virtual void DeActivate(MonsterCharacter character, int index)
 {
 }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (!Active)
        {
            return;
        }
        MonsterCharacter m = collision.GetComponent <MonsterCharacter>();

        if (m == null)
        {
            return;
        }
        if (m.GetComponent <PlayerControls>() == null)
        {
            return;
        }

        OnPlayerTouch.Invoke();

        //stop the player and make him invulnerable
        m.physicsBody.velocity = Vector2.zero;
        m.impulseVector        = Vector2.zero;
        m.Invulnerable         = true;
        m.enabled = false;

        //to avoid division by zero just change level instantly
        if (FadeoutTime == 0)
        {
            Messaging.GUI.Blackout.Invoke(0f);
            Messaging.System.ChangeLevel.Invoke(TargetLevel, EntryPoint);
            return;
        }

        GameObject fadeout = new GameObject("fadeout levelchange");

        float timer = 0;

        UpdateCallHook u = fadeout.AddComponent <UpdateCallHook>();

        u.OnUpdateCall.AddListener(() =>
        {
            timer     += Time.unscaledDeltaTime;
            float fade = timer / FadeoutTime;
            Messaging.GUI.Blackout.Invoke(Mathf.Clamp01(fade));
        });

        DestroyAfterTime d = fadeout.AddComponent <DestroyAfterTime>();

        d.LifeTime        = FadeoutTime + .1f; //small addition to let screen turn to fully black
        d.UseUnscaledTime = true;
        d.OnDestroy.AddListener(() =>
        {
            /*Messaging.GUI.LoadingWindow.Invoke(() =>
             * {
             *  Messaging.System.ChangeLevel.Invoke(TargetLevel, EntryPoint);
             * });*/

            Messaging.System.ChangeLevel.Invoke(TargetLevel, EntryPoint);
        });

        if (TeleportEffect != null)
        {
            Instantiate(TeleportEffect, collision.transform.position, Quaternion.identity, LevelLoader.TemporaryObjects);
            Destroy(collision.gameObject);
        }
    }
Exemple #6
0
 public override void DeActivate(MonsterCharacter character)
 {
     character.OnCombineMove -= Character_OnCombineMove;
     owner = null;
 }
 public override void Activate(MonsterCharacter character)
 {
     owner = character;
     character.GenerateSoftDamage.AddListener(SoftDamageMod);
     character.OnDealDamage.AddListener(DealDamageMod);
 }
    IEnumerator ReleaseMonsterProcess(Vector3 targetVec)
    {

        //transform.Translate(Vector3.up * 10);
        possessedMonster.EnableAI();
        possessedMonster.monsterCollider.enabled = true;
        possessedMonster.possessed = false;
        possessedMonster = null;
        isPossessingMonster = false;


        playerRenderer.SetActive(true);
        totalMaxHP = playerMaxHP;
        totalHP = playerHP;
        totalStr = playerStr;
        totalInt = playerInt;
        totalDef = playerDef;
        totalRes = playerRes;

        //UI
        
        UIManager.instance.HidePossessButton();
        UIManager.instance.HideReleaseButton();

        yield return null;
    }
    void TakeSpellDamages(int amount, MonsterCharacter attacker = null)
    {
        monsterHP -= amount - (monsterRes / 3);
        if (monsterHP <= 0)
        {
            DisableAI();
            isAlive = false;
            //mainMeshRenderer.enabled = false;
            mainCollider.enabled = false;
        }

        if (attacker != null)
        {
            attackTarget = attacker;
            isAttacked = true;
        }
    }
    public void TakeDamages(int amount, MonsterCharacter attacker=null)
    {
        if (possessed)
        {
            UIManager.instance.UpdateStatusUI();
            UIManager.instance.player.TakeDamages(amount);
        }
        else
        {
            monsterHP -= amount - (monsterDef / 3);
            //Prendre le cas où le monstre est possédé pour actualiser la vie du joueur


            if (monsterHP <= 0)
            {
                DisableAI();
                isAlive = false;
                //mainMeshRenderer.enabled = false;
                mainCollider.enabled = false;
            }

            if (attacker != null)
            {
                attackTarget = possessed == true ? null : attacker;
                isAttacked = true;
            }
        }
        
    }
    public void AttackTarget(MonsterCharacter target, int strength)
    {
        target.TakeDamages(strength, this);

        //cooldown
        simpleAttackCurrentCoolDownLevel = 0;
        isReadyToAttack = false;
    }
    void Respawn()
    {
        isAlive = true;
        //mainMeshRenderer.enabled = true;
        mainCollider.enabled = true;
        EnableAI();
        if (IA.EstAgresse)
            IA.changeStat();

        monsterHP = monsterMaxHP;
        transform.position = startPos;
        attackTarget = null;
    }
Exemple #13
0
 public override void DeActivate(MonsterCharacter character)
 {
     character.walkSpeed -= MoveBonus;
     character.OnChargeRegen.RemoveListener(ChargeBoost);
     owner = null;
 }
Exemple #14
0
 public override void Activate(MonsterCharacter character)
 {
     owner = character;
     character.walkSpeed += MoveBonus;
     character.OnChargeRegen.AddListener(ChargeBoost);
 }
Exemple #15
0
            public abstract void VisitMonsterCharacter(

                MonsterCharacter monsterCharacter);
Exemple #16
0
 public void Init(Weapon weapon, MonsterCharacter character)
 {
     weapon.OnFire.AddListener(() => { recoilAmount = 1f; });
     character.OnDeath.AddListener(() => { Destroy(this); });
 }
 public void Possess()
 {
     attackTarget = null;
 }
 public override void DeActivate(MonsterCharacter character)
 {
     character.GenerateSoftDamage.RemoveListener(SoftDamageMod);
     character.OnDealDamage.RemoveListener(DealDamageMod);
     owner = null;
 }
Exemple #19
0
 public override void DeActivate(MonsterCharacter character)
 {
     character.OnAmmoPickup.RemoveListener(AmmoPickupBonus);
     owner = null;
 }
Exemple #20
0
 public override void DeActivate(MonsterCharacter character) =>
 character.AnimationSpeedMultiplier = 1f;
Exemple #21
0
 public override void Activate(MonsterCharacter character)
 {
     owner = character;
     character.OnAmmoPickup.AddListener(AmmoPickupBonus);
 }
Exemple #22
0
 public override void Activate(MonsterCharacter character)
 {
     owner = character;
     character.OnCombineMove += Character_OnCombineMove;
 }
 public void UpdateStatusTarget(MonsterCharacter target) { mainUI.healthBarTargetInfo(target); }
Exemple #24
0
    public override void Activate(MonsterCharacter character, int index)
    {
        //would result in illegal normalization, need a direction to dash into
        if (character.physicsBody.velocity == Vector2.zero)
        {
            return;
        }

        //need 65% of full power at minimum
        if (character.ChargePoints < (ChargeCost * .65f))
        {
            Sounds.CreateSound(FailSound);
            Messaging.GUI.ScreenMessage.Invoke("NOT ENOUGH CHARGE", Color.red);
            return;
        }

        if (character.SkillCooldowns[index] > 0)
        {
            Sounds.CreateSound(FailSound);
            return;
        }

        Sounds.CreateSound(ActivationSound);

        character.SkillCooldowns[index] = Cooldown;

        float strength = Strength;

        if (character.ChargePoints < ChargeCost)
        {
            strength *= (float)character.ChargePoints / ChargeCost;
            character.ChargePoints = 0;
        }
        else
        {
            character.ChargePoints -= ChargeCost;
        }

        DashSkill d = Instantiate(this, LevelLoader.DynamicObjects);

        d.Strength        = strength;
        d.direction       = character.physicsBody.velocity.normalized;
        d.targetCharacter = character;
        d.timer           = ActiveTime;

        if (AttachmentEffect != null)
        {
            foreach (string attachPoint in AttachmentPoints)
            {
                GameObject effect = Instantiate(AttachmentEffect);

                GenericTimer e = effect.AddComponent <GenericTimer>();
                e.LifeTime = ActiveTime * 5;
                e.OnTimer.AddListener(() =>
                {
                    TrailRenderer tr = effect.GetComponentInChildren <TrailRenderer>();
                    if (tr != null)
                    {
                        tr.emitting = false;
                    }
                });

                DestroyAfterTime t = effect.AddComponent <DestroyAfterTime>();
                t.LifeTime = ActiveTime * 10;

                effect.transform.SetParent(character.GetAttachmentPoint(attachPoint), false);
            }
        }
    }
 public void DisplayTargetStatus(MonsterCharacter target) { mainUI.LifeTargetEnable(target); }
Exemple #26
0
 public DotFrame(int TotalDamage, int DamagePerApplication, DamageType DamageType, MonsterCharacter Attacker)
 {
     totalDamage          = TotalDamage;
     damagePerApplication = DamagePerApplication;
     damageType           = DamageType;
     attacker             = Attacker;
 }
Exemple #27
0
 public override void DeActivate(MonsterCharacter character)
 {
     character.MaxChargePoints *= 2;
     character.OnChargeRegen.RemoveListener(TalentBonus);
 }
 public void healthBarTargetInfo(MonsterCharacter target)
 {
         this._healthTargetText.text = target.monsterMaxHP.ToString();
         float itlife = (float)target.monsterHP / (float)target.monsterMaxHP; //<== valeur entre 0 et 1
         _healthTargetBar.fillAmount = Mathf.Lerp(_healthTargetBar.fillAmount, itlife, 5 * Time.deltaTime);
         //this._healthTargetBar.transform.localScale = new Vector3(Mathf.Clamp(itlife, 0f, 1f), this._healthTargetBar.transform.localScale.y, this._healthTargetBar.transform.localScale.z);
 }
    void PossessionProcess()
    {
        //On Click Events---------------------------------------------------------
        if(Input.GetMouseButtonDown(0))
        {
            //ray = cam.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit, 100.0f, monsterLayerMask))
            {
                if (isPossessingMonster) //Case where we are possessing a monster
                {
                    possessedMonster.attackTarget = hit.collider.GetComponent<MonsterCharacter>();
                    possessedMonster.attackTarget.GetComponent<Renderer>().material.color = Color.red;
                    UIManager.instance.DisplayAttackButton();

                    //Display And Update Target Monster Status
                    // -- Display Status
                    UIManager.instance.DisplayTargetStatus(possessedMonster.attackTarget);
                }
                else //Case where we are not possessing any monster
                {
                    targetMonster = hit.collider.GetComponent<MonsterCharacter>();
                    if (targetMonster != null && targetMonster != possessedMonster)
                    {
                        UIManager.instance.DisplayPossessButton();
                        //Update and display information about targeted monster
                        //UIManager.instance.UpdateStatusTarget();
                        //UIManager.instance.DisplayTargetStatus();
                    }
                }
                
            }
            else if(Physics.Raycast(ray, out hit, questerLayerMask))
            {
                Quester q = hit.collider.GetComponent<Quester>();
                if (quester != null && quester.QuestId == 2)
                {
                    quester.Talk();
                }
            }
            else
            {
                targetMonster = null;
            }
        }

        //-----------------------------------------------------------------------
        if (isPossessingMonster)
        {
            possessedMonster.transform.position = transform.position;
            possessedMonster.transform.rotation = transform.rotation;
            UIManager.instance.UpdateAttackButton(possessedMonster.simpleAttackCurrentCoolDownLevel / possessedMonster.simpleAttackCoolDown);

            if (possessedMonster.attackTarget != possessedMonster && possessedMonster.attackTarget != null)
            {
                rangeProjector.orthographicSize = Mathf.Lerp(rangeProjector.orthographicSize, possessedMonster.simpleAttackRange, 10 * Time.deltaTime);
            }
            else
            {
                rangeProjector.orthographicSize =  Mathf.Lerp(rangeProjector.orthographicSize, 0, 10 * Time.deltaTime);
            }
        }
    }
 private void Awake() =>
 mc = GetComponent <MonsterCharacter>();
 public void PossessMonster()
 {
     if(Vector3.Distance(transform.position, targetMonster.transform.position) < 6)
     {
         if(playerLevel >= targetMonster.monsterLevel)
         {
             possessedMonster = targetMonster;
             targetMonster = null;
             isPossessingMonster = true;
             possessedMonster.possessed = true;
             possessedMonster.monsterCollider.enabled = false;
             possessedMonster.DisableAI();
             possessedMonster.transform.rotation = transform.rotation;
             StartCoroutine("PossessMonsterProcess", transform.position);
         }
         else
         {
             UIManager.instance.UpdateInfoText("Niveau du monstre trop élevé");
         }
     }
 }
Exemple #32
0
 public virtual void DeActivate(MonsterCharacter character)
 {
 }
Exemple #33
0
 public virtual void Equip(MonsterCharacter caller)
 {
     character  = caller;
     RaiseTimer = raiseTime / character.AnimationSpeedMultiplier;
 }