コード例 #1
0
    public override bool CanInteract(PlayerUnitController controller)
    {
        PlayerBaseStats stats      = controller.di.stats;
        SlimeType       type       = stats.SlimeType;
        bool            isAssembly = stats.IsAssembly;

        switch (interactionType)
        {
        case SlimeInteractionType.OnlyUnitNoAssembly:
            return(!isAssembly && canInteract.Get(type));

        case SlimeInteractionType.UnitOrUnitInAssembly:
            return(canInteract.Get(type) || HasMergedAny(stats));

        case SlimeInteractionType.UnitOrAnyInAssembly:
            return(canInteract.Get(type) || isAssembly);

        case SlimeInteractionType.OnlyUnitInAssembly:
            return(canInteract.Get(type) && isAssembly);

        case SlimeInteractionType.OnlyAllUnitsInAssembly:
            return(isAssembly && HasMergedAll(stats));
        }
        return(false);
    }
コード例 #2
0
    public void ControlUpdate()
    {
        if (!stats.IsAssembly)
        {
            return;
        }

        if (input.yeet.IsPressed())
        {
            SlimeType selectedType = unitHandler.SelectedType;
            if (selectedType.IsKing())
            {
                if (hp.IsFull())
                {
                    PerformYeet(selectedType);
                }
            }
            else
            {
                PlayerBaseStats unitStats = unitHandler.GetSelectable(selectedType).Stats;
                int             hearts    = unitStats.Hearts;
                if (hp.CurrentHP > hearts)
                {
                    PerformYeet(selectedType);
                }
            }
        }
    }
コード例 #3
0
    public void OnDeath(PlayerUnitController unit, Vector2 relictVelocity)
    {
        PlayerBaseStats stats         = unit.di.stats;
        SlimeType       poofType      = stats.SlimeType;
        Vector2         spawnPosition = unit.transform.position;

        SlimePoof slimePoof = poofs[poofType];

        slimePoof.SpawnAt(spawnPosition);

        foreach (SlimeType type in SlimeTypeHelpers.GetEnumerable())
        {
            if (stats.HasType(type))
            {
                SlimeRelict relict = relicts[type];
                relict.SpawnAt(spawnPosition);

                Vector2 velocity = GenerateRelictVelocity();

                relict.SetVelocity(velocity);
                relict.SetRotation(RandomHelpers.Range(relicRotationsPerSecond));
                //relictVelocity = Vector2.zero;
            }
        }
    }
コード例 #4
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        PlayerUnitController unit           = InteractiveHelpers.GetPlayer(collision);
        PlayerBaseStats      stats          = unit.di.stats;
        PlayerRespawnHandler respawnHandler = unit.mainController.di.respawnHandler;
        bool playSound = false;

        foreach ((SlimeType type, bool acceptsType) in checkpointFor.GetPairEnumerable())
        {
            if (acceptsType && stats.HasType(type))
            {
                bool updated = respawnHandler.SetCheckpoint(type, this);
                if (updated)
                {
                    playSound = true;
                }
                if (!segmentMember.Segment)
                {
                    segmentMember.Segment = unit.di.camera.CameraSegment;
                }
            }
        }
        if (playSound)
        {
            AudioSingleton.PlaySound(AudioSingleton.Instance.clips.checkpoint);
        }
    }
コード例 #5
0
 private void OnStatsChange(PlayerBaseStats stats)
 {
     immune = stats.IsPoisonImmune;
     if (immune && state != PoisonState.None)
     {
         state = PoisonState.None;
     }
 }
コード例 #6
0
    private void OnStatsChange(PlayerBaseStats stats)
    {
        int maxHPDifference = stats.Hearts - maxHP;

        currentHP = Mathf.Clamp(currentHP + maxHPDifference, 0, stats.Hearts);
        maxHP     = stats.Hearts;

        OnHpUpdate(HpChange.Update);
    }
コード例 #7
0
 public void Inject(PlayerUnitDI di)
 {
     controller  = di.controller;
     stats       = di.stats;
     unitHandler = di.mainDi.unitHandler;
     hp          = di.hp;
     physics     = di.physics;
     camera      = di.camera;
 }
コード例 #8
0
 public void Inject(PlayerUnitDI di)
 {
     physics      = di.physics;
     stateMachine = di.stateMachine;
     unitHandler  = di.mainDi.unitHandler;
     input        = di.mainDi.controller.input;
     stats        = di.stats;
     hp           = di.hp;
 }
コード例 #9
0
ファイル: PlayerView.cs プロジェクト: quajak/StartGame
        public void Activate(Player player, MainGameWindow main, bool AllowAction)
        {
            allowAction = AllowAction;
            Point spawnPoint = new Point(0, 20);

            playerProfile = new PlayerBaseStats
            {
                Location = spawnPoint
            };
            playerProfile.Activate(player);
            Controls.Add(playerProfile);

            itemView = new PlayerItemView()
            {
                Location = spawnPoint
            };
            itemView.Activate(player, main);
            itemView.Visible = false;
            Controls.Add(itemView);

            playerStatus = new PlayerStatusView
            {
                Location = spawnPoint
            };
            playerStatus.Activate(player);
            playerStatus.Visible = false;
            Controls.Add(playerStatus);

            playerSpell = new PlayerSpellView
            {
                Location = spawnPoint
            };
            playerSpell.Activate(player, main, allowAction);
            playerSpell.Visible = false;
            Controls.Add(playerSpell);

            playerWeapon = new PlayerWeaponView
            {
                Location = spawnPoint
            };
            playerWeapon.Visible = false;
            playerWeapon.Activate(player, allowAction);
            Controls.Add(playerWeapon);

            playerTree = new PlayerTreeView
            {
                Location = spawnPoint
            };
            playerTree.Visible = false;
            playerTree.Activate(player);
            Controls.Add(playerTree);

            active = playerProfile;
            tab    = PlayerTab.stats;
            Render();
        }
コード例 #10
0
 public void Init(PlayerBaseStats stats)
 {
     if (stats.OnChange != null)
     {
         stats.OnChange += ReadStats;
     }
     else
     {
         ReadStats(stats);
     }
 }
コード例 #11
0
    private void Start()
    {
#if UNITY_EDITOR
        spawnPoint = unit.transform.position;
#else
        spawnPoint = transform.position;
        unit.transform.position = SpawnPoint;
#endif
        PlayerBaseStats stats = unit.di.stats;
        unit.di.mainDi.respawnHandler.SetCheckpoint(stats.SlimeType, this);
    }
コード例 #12
0
 private bool HasMergedAny(PlayerBaseStats stats)
 {
     foreach (SlimeType type in SlimeTypeHelpers.GetEnumerable())
     {
         if (canInteract.Get(type) && stats.HasType(type))
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #13
0
    public void Inject(PlayerUnitDI di)
    {
        hp     = di.hp;
        damage = di.damage;
        PlayerBaseStats stats = di.stats;

        OnStatsChange(stats);
        if (stats.OnChange != null)
        {
            stats.OnChange += OnStatsChange;
        }
    }
コード例 #14
0
    public override void Inject(PlayerUnitDI di)
    {
        PlayerBaseStats stats = di.stats;

        foreach (IPlayerAssemblyComponent component in GetComponents())
        {
            component.Inject(di);
        }

        stats.OnChange += OnStatsChange;
        OnStatsChange(stats);
    }
コード例 #15
0
 private void OnPressingAssemblyStatsChange(PlayerBaseStats stats)
 {
     foreach (PlayerUnitController unit in new List <PlayerUnitController>(pressing))
     {
         if (unit.di.stats.IsAssembly)
         {
             if (!interactionPredicate.CanInteract(unit))
             {
                 RemovePressingUnit(unit);
             }
         }
     }
 }
コード例 #16
0
    public override void Inject(PlayerUnitDI di)
    {
        animator = di.animator;
        PlayerBaseStats stats = di.stats;

        input = di.mainDi.controller.input;
        di.animationEvents.OnSwordEnded += OnSwordEnded;
        OnStatsChange(stats);
        if (stats.OnChange != null)
        {
            stats.OnChange += OnStatsChange;
        }
    }
コード例 #17
0
    public void Inject(PlayerUnitDI di)
    {
        controller = di.controller;

        PlayerBaseStats stats = di.stats;

        maxHP     = stats.Hearts;
        currentHP = maxHP;
        OnHpUpdate(HpChange.Update);
        if (stats.OnChange != null)
        {
            stats.OnChange += OnStatsChange;
        }
    }
コード例 #18
0
 private void OnStatsChange(PlayerBaseStats stats)
 {
     hasSword  = stats.HasType(SlimeType.Sword);
     hasShield = stats.HasType(SlimeType.Shield);
 }
コード例 #19
0
 public override void Inject(PlayerUnitDI di)
 {
     unitController = di.controller;
     stats          = di.stats;
     unitHandler    = di.mainDi.unitHandler;
 }
コード例 #20
0
 public void OnStatsChange(PlayerBaseStats stats)
 {
     swordHand.SetStats(stats.HasType(SlimeType.Sword));
     shieldHand.SetHasShield(stats.HasType(SlimeType.Shield));
     heart.enabled = stats.HasType(SlimeType.Heart);
 }
コード例 #21
0
 private void ReadStats(PlayerBaseStats stats)
 {
     effectable.strength = stats.Strength;
 }