Exemple #1
0
        private void Awake()
        {
            controller = new BoidController(meshFilter);
            controller.Generate();
            StartCoroutine(controller.Simulate());

            SetupSlider(maxSpeedSlider, maxSpeedText, controller.maxSpeed,
                value => controller.maxSpeed = value);

            SetupSlider(interactionRadiusSlider, interactionRadiusText, controller.interactionRadius,
                value => controller.interactionRadius = value);
            SetupSlider(cohesionCoefficientSlider, cohesionCoefficientText, controller.cohesionCoefficient,
                value => controller.cohesionCoefficient = value);

            SetupSlider(separationDistanceSlider, separationDistanceText, controller.separationDistance,
                value => controller.separationDistance = value);
            SetupSlider(separationCoefficientSlider, separationCoefficientText, controller.separationCoefficient,
                value => controller.separationCoefficient = value);

            SetupSlider(alignmentCoefficientSlider, alignmentCoefficientText, controller.alignmentCoefficient,
                value => controller.alignmentCoefficient = value);

            simulateToggle.onValueChanged.AddListener(value => simulate = value);
            generateButton.onClick.AddListener(controller.Generate);
        }
        private void Generate()
        {
            controller = new BoidController();

            GeneratePalette();
            Color colorA = GetMainColorHSV().ToColor();
            Color colorB = GetSecondaryColorHSV().ToColor();

            config.template = MeshDraft.Tetrahedron(0.3f);
            // Assuming that we are dealing with tetrahedron, first vertex should be boid's "nose"
            config.template.colors.Add(colorA);
            for (int i = 1; i < config.template.vertexCount; i++)
            {
                config.template.colors.Add(colorB);
            }

            meshFilter.mesh = controller.Generate(config);
        }