Beispiel #1
0
        protected override OpTypeVector VisitTypeVector(TypeVector node)
        {
            var vector = base.VisitTypeVector(node);

            vector.ComponentCount = node.ComponentCount;
            vector.ComponentType  = Visit(node.ComponentType);
            return(Register(vector, _typeInstructions));
        }
        public bool Tick(Snake snake, Fruit fruit)
        {
            if (snake.moveStatus is MoveStatus.Stopping) return false;
            TypeVector needSave = TypeVector.Down;
            bool need = false;
            while (snake.StackVectors.Count > 0)
            {
                TypeVector vector = snake.StackVectors.Pop();
                if (!snake != vector)
                {
                    snake.currentVector = vector;
                    break;
                }
                need = true;
                needSave = vector;
            }
            snake.StackVectors.Clear();

            if (need)
                snake.StackVectors.Push(needSave);
            

            if (snake.IsObstecle(this))
            {
                return true;
            }
            
            snake.Move(this);
            AddSnake(snake);
            if (snake.IsFruit(fruit))
            {
                _score += 10;
                if (snake.speed > 100) snake.UpSpeed();
                snake.GetTail().Add(snake.GetTail().Count is 0
                    ? new Tail(snake.GetHead().GetCell())
                    : new Tail(snake.GetTail().Last().GetCell()));
                do
                {
                    fruit.NewPosition(this);
                } while (fruit.GetCell().obj != null);
                AddGameObject(fruit);
            }
            Render();
            return false;
        }
        protected virtual bool WriteVectorField(string fieldName, uint byteOffset, TypeVector fieldType)
        {
            switch (fieldType.VectorType)
            {
            case VectorType.Vec2:
                WriteLine($"    [FieldOffset({byteOffset})]");
                WriteLine($"    public Vector2 {fieldName};");
                return(true);

            case VectorType.Vec3:
                WriteLine($"    [FieldOffset({byteOffset})]");
                WriteLine($"    public Vector3 {fieldName};");
                return(true);

            case VectorType.Vec4:
                WriteLine($"    [FieldOffset({byteOffset})]");
                WriteLine($"    public Vector4 {fieldName};");
                return(true);
            }
            for (uint i = 0; i < fieldType.ComponentCount; ++i)
            {
                string letter = null;
                switch (i)
                {
                case 0: letter = "X"; break;

                case 1: letter = "Y"; break;

                case 2: letter = "Z"; break;

                case 3: letter = "W"; break;

                default: letter = "_" + i; break;
                }
                WriteStructField(fieldName + letter, byteOffset + i * fieldType.ComponentType.Alignment, fieldType.ComponentType);
            }
            return(true);
        }
Beispiel #4
0
 public void SwapVector(TypeVector typeVector)
 {
     //newVector = typeVector;
     StackVectors.Push(typeVector);
 }