示例#1
0
    private void Granade(DudeMoveState dude)
    {
        if (dude.AttackCooldown * dude.AttackSpeed > 1)
        {
            dude.AttackCooldown = 0;
            dude.WeaponEffect.Execute(dude.transform.position);
        }
        else
        {
            return;
        }

        if (dude.CubeStorage < dude.MaximumStorage * 0.8f)
        {
            return;
        }

        _fx.ScreenShake(0.1f, 0.25f);
        dude.CubeStorage = 0;

        var dir     = (dude.Cursor.position - dude.Tr.position).normalized;
        var granade = _pool.SpawnFromPool("Granade", dude.Tr.position + dir, Quaternion.identity);

        granade.GetComponent <ProjectileBehaviour>().Shoot((dir + Vector3.up * 0.5f).normalized, dude.GranadeForce);

        dude.Rb.AddForce(-dir * dude.RecoilForce, ForceMode.Impulse);
    }
示例#2
0
 private void Move(DudeMoveState dude, float hori, float vert)
 {
     dude.Rb.AddForce(new Vector3(hori, 0, vert).normalized
                      *(dude.Grounded ? dude.MoveSpeed : dude.MoveSpeed * 0.33f)
                      * Time.deltaTime,
                      ForceMode.VelocityChange);
 }
示例#3
0
    private void Succ(DudeMoveState dude)
    {
        if (dude.CubeStorage > dude.MaximumStorage || dude.SuccCooldown * dude.SuccSpeed < 1)
        {
            return;
        }

        dude.SuccCooldown = 0;

        RaycastHit hit;

        if (Physics.SphereCast(dude.transform.position + Vector3.up, 1.5f, (dude.Cursor.position - dude.transform.position).normalized, out hit,
                               (dude.Cursor.position - dude.transform.position).magnitude, ~((1 << 10) & (1 << 11))))
        {
            var selection = Selections.SphereSelection(World.Instance, hit.point.ToVector3Int(),
                                                       dude.SuccArea);

            var tiles = selection.SolidTiles.ToList();

            var cubes = tiles.Count;

            for (int i = 0; i < cubes; i++)
            {
                _pool.SpawnFromPool("SuccCube", tiles[i].Position + Vector3.one / 2, Quaternion.identity);
            }

            dude.CubeStorage += cubes;
            selection.DeleteAll();
        }
    }
示例#4
0
    private void Shoot(DudeMoveState dude)
    {
        if (dude.AttackCooldown * dude.AttackSpeed > 1)
        {
            dude.AttackCooldown = 0;
            dude.WeaponEffect.Execute(dude.transform.position);
        }
        else
        {
            return;
        }


        if (dude.CubeStorage < dude.MinimumStorage)
        {
            return;
        }

        dude.CubeStorage--;
        _fx.ScreenShake(0.1f, 0.25f);

        var        cursorDir = (dude.Cursor.position - dude.transform.position).normalized;
        var        target    = dude.Cursor.position;
        RaycastHit hit;

        if (Physics.SphereCast(dude.transform.position, dude.AimAssistRadius, cursorDir, out hit, 100f, 1 << 10))
        {
            target = hit.transform.position;
        }

        var dir        = ((target - dude.Tr.position + (dude.Cursor.position - dude.Tr.position)).normalized + Random.insideUnitSphere * dude.SpreadAmount).normalized;
        var projectile = _pool.SpawnFromPool("Projectile", dude.Tr.position + dir, Quaternion.identity);

        projectile.GetComponent <ProjectileBehaviour>().Shoot(dir, dude.ShootForce);


        dude.Rb.AddForce(-dir * dude.RecoilForce, ForceMode.Impulse);
    }
示例#5
0
    private void Jump(DudeMoveState dude)
    {
        var momentum = dude.Rb.velocity * 4;

        dude.Rb.AddForce(momentum.x, dude.JumpForce, momentum.z, ForceMode.Impulse);
    }
示例#6
0
    private void ApplyGravity(DudeMoveState dude)
    {
        var gravity = Physics.gravity * (dude.GravityScale + 5);

        dude.Rb.AddForce(gravity, ForceMode.Acceleration);
    }
示例#7
0
 private void Start()
 {
     _rb   = GetComponentInParent <Rigidbody>();
     _dude = GetComponentInParent <DudeMoveState>();
 }