コード例 #1
0
ファイル: DiceManager.cs プロジェクト: aaronrcox/unity-demos
    void ConnectedDiceWithValueRecursive(int value, Vector3 pos, List <Rollable> visited, List <Rollable> dice)
    {
        Rollable left    = GetAtPosition(pos + Vector3.left);
        Rollable right   = GetAtPosition(pos + Vector3.right);
        Rollable forward = GetAtPosition(pos + Vector3.forward);
        Rollable back    = GetAtPosition(pos + Vector3.back);

        if (left && left.GetTopFace() == value && !visited.Contains(left))
        {
            dice.Add(left);
            visited.Add(left);
            ConnectedDiceWithValueRecursive(value, pos + Vector3.left, visited, dice);
        }

        if (right && right.GetTopFace() == value && !visited.Contains(right))
        {
            dice.Add(right);
            visited.Add(right);
            ConnectedDiceWithValueRecursive(value, pos + Vector3.right, visited, dice);
        }

        if (forward && forward.GetTopFace() == value && !visited.Contains(forward))
        {
            dice.Add(forward);
            visited.Add(forward);
            ConnectedDiceWithValueRecursive(value, pos + Vector3.forward, visited, dice);
        }

        if (back && back.GetTopFace() == value && !visited.Contains(back))
        {
            dice.Add(back);
            visited.Add(back);
            ConnectedDiceWithValueRecursive(value, pos + Vector3.back, visited, dice);
        }
    }
コード例 #2
0
ファイル: DiceManager.cs プロジェクト: aaronrcox/unity-demos
    public void SpawnRollableOnTile(GameBoardTile tile)
    {
        GameObject obj = Instantiate(rollablePrefab, transform.Find("AllDice").transform);

        obj.transform.position = tile.transform.position;

        Rollable rollableComponent = obj.GetComponent <Rollable>();

        rollableComponent.RandomiseRotation();
        rollableComponent.BeginRiseing();

        dice.Add(rollableComponent);
    }
コード例 #3
0
ファイル: DiceManager.cs プロジェクト: aaronrcox/unity-demos
    public void TrySinkDice(int value, Vector3 pos)
    {
        Rollable r = GetAtPosition(pos);

        List <Rollable> visited = new List <Rollable>();
        List <Rollable> dice    = new List <Rollable>();

        ConnectedDiceWithValueRecursive(value, pos, visited, dice);

        if (dice.Count >= value)
        {
            foreach (Rollable die in dice)
            {
                die.BeginSinking();
            }
        }
    }
コード例 #4
0
ファイル: DiceManager.cs プロジェクト: aaronrcox/unity-demos
 public void RemoveBlock(Rollable block)
 {
     dice.Remove(block);
 }
コード例 #5
0
 public Product(Rollable left, Rollable right)
     : base(left, right)
 {
 }
コード例 #6
0
 public static Product Of(Rollable left, Rollable right) => new Product(left, right);
コード例 #7
0
 public override Rollable With(Rollable left, Rollable right)
 => new Product(left, right);
コード例 #8
0
 // Use this for initialization
 void Start()
 {
     target = GetComponent <Rollable>();
     target.SetProps(controllerProps);
 }
コード例 #9
0
ファイル: Difference.cs プロジェクト: juoni/D20
 public static Difference Of(Rollable left, Rollable right) => new Difference(left, right);
コード例 #10
0
 public BlockController()
 {
     target = null;
 }
コード例 #11
0
    void DetectGroundBlock()
    {
        tileBounds.size   = new Vector3(1, 1, 1);
        tileBounds.center = new Vector3(
            (int)((transform.position.x + (transform.position.x >= 0 ? 0.5f : -0.5f)) / 1.0f) * 1.0f,
            (int)((transform.position.y + (transform.position.y >= 0 ? 0.5f : -0.5f)) / 1.0f) * 1.0f,
            (int)((transform.position.z + (transform.position.z >= 0 ? 0.5f: -0.5f)) / 1.0f) * 1.0f);

        Ray        ray = new Ray(transform.position, Vector3.down);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, character.height * 0.75f))
        {
            BoxCollider collider = hit.collider.GetComponent <BoxCollider>();
            if (collider == null)
            {
                blockBounds = null;
                availableMovementBounds.Clear();
            }
            else
            {
                Bounds b = collider.bounds;

                // check if the bounds are different... if so, update
                if (b != blockBounds)
                {
                    blockBounds = b;

                    availableMovementBounds.Clear();
                    availableMovementBounds.Add(b);
                    if (IsBlockInPosition(b.center + Vector3.left))
                    {
                        availableMovementBounds.Add(new Bounds(b.center + Vector3.left, Vector3.one));
                    }
                    if (IsBlockInPosition(b.center + Vector3.right))
                    {
                        availableMovementBounds.Add(new Bounds(b.center + Vector3.right, Vector3.one));
                    }
                    if (IsBlockInPosition(b.center + Vector3.forward))
                    {
                        availableMovementBounds.Add(new Bounds(b.center + Vector3.forward, Vector3.one));
                    }
                    if (IsBlockInPosition(b.center + Vector3.back))
                    {
                        availableMovementBounds.Add(new Bounds(b.center + Vector3.back, Vector3.one));
                    }


                    if (rollable)
                    {
                        rollable.diceMesh.transform.localScale = Vector3.one;
                        rollable.SetEmissiveness(0.0f);
                    }
                    rollable = hit.collider.GetComponent <Rollable>();

                    if (rollable)
                    {
                        rollable.diceMesh.transform.localScale -= new Vector3(0.1f, 0.1f, 0.1f);
                        rollable.SetEmissiveness(0.4f);
                        rollable.SetProps(props);
                    }
                }
            }
        }

        if (rollable)
        {
            Bounds b = rollable.GetComponent <BoxCollider>().bounds;
            availableMovementBounds.Clear();
            availableMovementBounds.Add(b);
            if (rollable.IsRolling() == false)
            {
                if (IsBlockInPosition(b.center + Vector3.left))
                {
                    availableMovementBounds.Add(new Bounds(b.center + Vector3.left, Vector3.one));
                }
                if (IsBlockInPosition(b.center + Vector3.right))
                {
                    availableMovementBounds.Add(new Bounds(b.center + Vector3.right, Vector3.one));
                }
                if (IsBlockInPosition(b.center + Vector3.forward))
                {
                    availableMovementBounds.Add(new Bounds(b.center + Vector3.forward, Vector3.one));
                }
                if (IsBlockInPosition(b.center + Vector3.back))
                {
                    availableMovementBounds.Add(new Bounds(b.center + Vector3.back, Vector3.one));
                }
            }
        }
    }
コード例 #12
0
 public Sum(Rollable left, Rollable right)
     : base(left, right)
 {
 }
コード例 #13
0
 public static Sum Of(Rollable left, Rollable right) => new Sum(left, right);
コード例 #14
0
 public override Rollable With(Rollable left, Rollable right)
 => new Sum(left, right);
コード例 #15
0
ファイル: Difference.cs プロジェクト: juoni/D20
 public Difference(Rollable left, Rollable right)
     : base(left, right)
 {
 }
コード例 #16
0
 public void SetTarget(Rollable obj)
 {
     target = obj;
 }
コード例 #17
0
ファイル: Difference.cs プロジェクト: juoni/D20
 public override Rollable With(Rollable left, Rollable right)
 => new Difference(left, right);