local ExpDriveComponent = class("ExpDriveComponent") -- 资源关卡特殊的 local EFFECT_PATH = ConstAssetPathConfig.EFFECT_PATH1 -- 资源关卡特殊的 local EFFECT_PATH_Resource = ConstAssetPathConfig.EFFECT_PATH_Resource local CameraRotateMode = { None = 0, -- 不旋转 Model = 1, -- 模型旋转 Node = 2, -- 模型的node_camera旋转 } function ExpDriveComponent:initialize(expEntity) self.ExpEntity = expEntity --UI 展示类型 self.ExtraUIType = nil --相对偏移的Z self.ExpAimLocalPosZ = 0 --上一帧的世界坐标位置(只给预警圈使用) self.LastExpAimPosX = nil self.LastExpAimPosZ = nil self.LastExpAimPosY = nil -- 相机旋转模式 self.cameraRotateMode = CameraRotateMode.Model end function ExpDriveComponent:AfterInit() local driveComp = self.ExpEntity.Entity.components.drive if driveComp then local driveData = driveComp:GetDriveData() if driveData then self.ExtraUIType = driveData.ExtraUIType self.cameraRotateMode = driveData.CameraRotateMode self.DisMin = FP.tonumberV1(driveData.DisMin) self.DisMax = FP.tonumberV1(driveData.DisMax) self.CRXMax = FP.tonumberV1(driveData.CRXMax) self.CRXMin = FP.tonumberV1(driveData.CRXMin) local drivePanelType = driveData.ExtraUIType if drivePanelType == LuaConst.DriveExtraUIType.RedWarning then local effectPath = nil if LevelManager.CheckCurLevelType(LuaConst.LevelType.Resource) then effectPath = EFFECT_PATH_Resource else effectPath = EFFECT_PATH end local renderEntity = self.ExpEntity.RenderEntity if not renderEntity then logging.error(LTAG.ERROR, "GWS: 创建载具的时候,expEntity.RenderEntity == nil") elseif renderEntity.Transform == nil then logging.error(LTAG.ERROR, "GWS: 创建载具的时候,expEntity.RenderEntity.Transform == nil") else self.ExpEntity.RedCircle = TK2API.GetInstance(effectPath, self.ExpEntity.RenderEntity.Transform) self.ExpEntity.RedCircle.gameObject.name = "aimPos" UIUtils.SetActive(self.ExpEntity.RedCircle,false) if driveData.AimRadius > 0 then local scale = driveData.AimRadius * 0.2 -- 0.2:EFFECT_PATH的默认大小是10米(scale默认为2) self.ExpEntity.RedCircle.transform:SetLocalScale(scale, scale, scale) end end end end end end function ExpDriveComponent:GetModelRotateX() if self.DisMax == self.DisMin then return 0 end local rate = (self.ExpAimLocalPosZ - self.DisMin) / (self.DisMax - self.DisMin) local rotatex = (self.CRXMax - self.CRXMin) * rate + self.CRXMin return rotatex end function ExpDriveComponent:SetExpAimPosZ(expAimPosZ) self.ExpAimLocalPosZ = expAimPosZ if self.cameraRotateMode then local eulerX = self:GetModelRotateX() self.ExpEntity:SetModelLocalEulerX(eulerX, self.cameraRotateMode) end end function ExpDriveComponent:RefreshCameraLocalEulerX() if self.ExpAimLocalPosZ ~= 0 then local eulerX = self:GetModelRotateX() self.ExpEntity:SetModelLocalEulerX(eulerX, self.cameraRotateMode) end end return ExpDriveComponent