示例#1
0
        public void CheckTargetPoint(FixedUpdateEvent evt, ShaftAimingTargetPointWorkingStateNode weapon, [JoinByTank] SelfTankNode selfTank, [JoinAll] ICollection <SingleNode <TankPartIntersectedWithCameraStateComponent> > intersectedTankParts)
        {
            ShaftAimingTargetPointComponent          shaftAimingTargetPoint          = weapon.shaftAimingTargetPoint;
            ShaftAimingTargetPointContainerComponent shaftAimingTargetPointContainer = weapon.shaftAimingTargetPointContainer;
            MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);
            bool    isInsideTankPart     = weapon.shaftAimingTargetPoint.IsInsideTankPart;
            Vector3 barrelOriginWorld    = accessor.GetBarrelOriginWorld();
            float   verticalAngle        = weapon.shaftAimingWorkingState.VerticalAngle;
            Vector3 point = weapon.shaftAimingTargetPoint.Point;

            shaftAimingTargetPointContainer.Point            = this.GetTargetPoint(barrelOriginWorld, weapon.shaftAimingWorkingState.WorkingDirection, weapon.verticalSectorsTargeting.WorkDistance, weapon.targetCollector);
            shaftAimingTargetPointContainer.IsInsideTankPart = intersectedTankParts.Count > 1;
            this.CheckTargetPointDiff(point, verticalAngle, shaftAimingTargetPoint, shaftAimingTargetPointContainer, isInsideTankPart, !weapon.shaftAimingWorkingState.IsActive ? this.EPS_INACTIVE : this.EPS_ACTIVE);
        }
示例#2
0
        public void CreateTargetPoint(NodeAddedEvent evt, ShaftAimingWorkingStateNode weapon, [JoinByTank] SelfTankNode selfTank, [JoinAll] ICollection <SingleNode <TankPartIntersectedWithCameraStateComponent> > intersectedTankParts)
        {
            bool    flag = intersectedTankParts.Count > 1;
            Vector3 barrelOriginWorld = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance).GetBarrelOriginWorld();
            Vector3 vector3           = this.GetTargetPoint(barrelOriginWorld, weapon.shaftAimingWorkingState.WorkingDirection, weapon.verticalSectorsTargeting.WorkDistance, weapon.targetCollector);
            ShaftAimingTargetPointContainerComponent component = new ShaftAimingTargetPointContainerComponent {
                Point             = vector3,
                IsInsideTankPart  = flag,
                PrevVerticalAngle = weapon.shaftAimingWorkingState.VerticalAngle
            };

            weapon.Entity.AddComponent(component);
            ShaftAimingTargetPointComponent component3 = new ShaftAimingTargetPointComponent {
                Point            = vector3,
                IsInsideTankPart = flag
            };

            weapon.Entity.AddComponent(component3);
        }
示例#3
0
 private void UpdateAndShareTargetPoint(ShaftAimingTargetPointComponent targetPointComponent, ShaftAimingTargetPointContainerComponent targetPointContainerComponent, Vector3 actualPoint, bool isInsideTankPart, float currentVerticalAngle)
 {
     targetPointContainerComponent.PrevVerticalAngle = currentVerticalAngle;
     targetPointComponent.Point            = actualPoint;
     targetPointComponent.IsInsideTankPart = isInsideTankPart;
     targetPointComponent.OnChange();
 }
示例#4
0
        private void CheckTargetPointDiff(Vector3 currentPoint, float currentVerticalAngle, ShaftAimingTargetPointComponent targetPointComponent, ShaftAimingTargetPointContainerComponent targetPointContainerComponent, bool currentIntersectionTankPartStatus, float eps)
        {
            Vector3 point            = targetPointContainerComponent.Point;
            bool    isInsideTankPart = targetPointContainerComponent.IsInsideTankPart;

            if (currentIntersectionTankPartStatus != isInsideTankPart)
            {
                this.UpdateAndShareTargetPoint(targetPointComponent, targetPointContainerComponent, point, isInsideTankPart, currentVerticalAngle);
            }
            else if ((targetPointContainerComponent.PrevVerticalAngle != currentVerticalAngle) && !MathUtil.NearlyEqual(point, currentPoint, eps))
            {
                this.UpdateAndShareTargetPoint(targetPointComponent, targetPointContainerComponent, point, isInsideTankPart, currentVerticalAngle);
            }
        }