Ejemplo n.º 1
0
        public void PrepareBonusBoxData(NodeAddedEvent e, BonusBoxInstantiatedNode bonus)
        {
            BonusDataComponent bonusData = new BonusDataComponent();
            Vector3            position  = bonus.position.Position;

            bonusData.BoxHeight = bonus.bonusBoxInstance.BonusBoxInstance.GetComponent <BoxCollider>().size.y;
            CalculateGroundPointAndNormal(position, bonusData, bonus);
            CalculateLandingPivot(position, ref bonusData);
            bonusData.FallDuration = (position.y - bonusData.LandingPoint.y) / bonus.bonusConfig.FallSpeed;
            if (bonusData.GroundPointNormal != Vector3.up)
            {
                bonusData.AlignmentToGroundDuration = (Mathf.Acos(bonusData.GroundPointNormal.y) * 57.29578f) / bonus.bonusConfig.AlignmentToGroundAngularSpeed;
                bonusData.LandingAxis = Vector3.Cross(Vector3.up, bonusData.GroundPointNormal);
            }
            bonus.Entity.AddComponent(bonusData);
        }
Ejemplo n.º 2
0
        private static void CalculateGroundPointAndNormal(Vector3 spawnPosition, BonusDataComponent bonusData, BonusBoxInstantiatedNode bonus)
        {
            RaycastHit hit;

            if (!Physics.Raycast(spawnPosition, Vector3.down, out hit, float.PositiveInfinity, LayerMasks.STATIC))
            {
                bonusData.GroundPoint       = spawnPosition;
                bonusData.GroundPointNormal = Vector3.up;
            }
            else
            {
                bonusData.GroundPoint        = hit.point;
                bonusData.GroundPointNormal  = hit.normal;
                bonus.rotation.RotationEuler = hit.transform.eulerAngles;
            }
        }