Ejemplo n.º 1
0
void CSPCharacter::Think()
{
	BaseClass::Think();

	CPlanet* pPlanet = GetNearestPlanet();

	if (pPlanet && !HasMoveParent())
	{
		m_flLastEnteredAtmosphere = GameServer()->GetGameTime();
		m_flRollFromSpace = GetGlobalAngles().r;
	}

	SetMoveParent(pPlanet);

	if (pPlanet)
	{
		// Estimate this planet's mass given things we know about earth. Assume equal densities.
		double flEarthVolume = 1097509500000000000000.0;	// cubic meters
		double flEarthMass = 5974200000000000000000000.0;	// kilograms

		// 4/3 * pi * r^3 = volume of a sphere
		CScalableFloat flPlanetVolume = pPlanet->GetRadius()*pPlanet->GetRadius()*pPlanet->GetRadius()*(M_PI*4/3);
		double flPlanetMass = RemapVal(flPlanetVolume, CScalableFloat(), CScalableFloat(flEarthVolume, SCALE_METER), 0, flEarthMass);

		double flG = 0.0000000000667384;					// Gravitational constant

		CScalableVector vecDistance = (pPlanet->GetGlobalOrigin() - GetGlobalOrigin());
		CScalableFloat flDistance = vecDistance.Length();
		CScalableFloat flGravity = CScalableFloat(flPlanetMass*flG, SCALE_METER)/(flDistance*flDistance);

		CScalableVector vecGravity = vecDistance * flGravity / flDistance;

		SetGlobalGravity(vecGravity);
	}
}
Ejemplo n.º 2
0
void CSPCharacter::StandOnNearestPlanet()
{
	CPlanet* pPlanet = GetNearestPlanet(FINDPLANET_ANY);
	if (!pPlanet)
		return;

	CScalableVector vecPlanetOrigin = pPlanet->GetGlobalOrigin();
	CScalableVector vecCharacterOrigin = GetGlobalOrigin();
	CScalableVector vecCharacterDirection = (vecCharacterOrigin - vecPlanetOrigin).Normalized();

	SetMoveParent(pPlanet);

	TVector vecPoint, vecNormal;
	pPlanet->CollideLocal(vecCharacterDirection * (pPlanet->GetRadius()*2.0f), TVector(), vecPoint, vecNormal);

	SetLocalOrigin(vecPoint);
}
Ejemplo n.º 3
0
BOOL CMainDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	m_BitmapBk.LoadBitmap(IDB_MAIN);

	::SetWindowLong(m_hWnd, GWL_STYLE, WS_POPUP | WS_SYSMENU | WS_MINIMIZEBOX);
	CRect rect;
	GetClientRect(&rect);
	rect.bottom -= 3;
	rect.right -= 2;
	MoveWindow(&rect);
	CenterWindow();
	SetMoveParent(FALSE);

	SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), TRUE);
	SetWindowText(WINDOW_CAPTION);
	CreateCaption(WINDOW_CAPTION);

	SetButton(&m_Button[BUTTON_MONITOR], IDC_MONITOR);
	SetButton(&m_Button[BUTTON_LOG], IDC_LOG);
	SetButton(&m_Button[BUTTON_ACL], IDC_ACL);
	SetButton(&m_Button[BUTTON_SYSTEMSET], IDC_SYSTEMSET);
	SetButton(&m_Button[BUTTON_ONLINE], IDC_ONLINE);
	SetButton(&m_Button[BUTTON_HELP], IDHELP);
	SetButton(&m_Button[BUTTON_ABOUT], IDC_ABOUT);
	SetButton(&m_Button[BUTTON_PARAMETER], IDC_PARAMETER);
	
	m_ButtonClose.SubclassDlgItem(IDC_CLOSE, this);
   	m_ButtonClose.SetBitmaps(IDB_CLOSE);
	m_ButtonClose.SetToolTipText(BUTTON_CAPTION_HIDE);

	m_ButtonMin.SubclassDlgItem(IDC_MIN, this);
   	m_ButtonMin.SetBitmaps(IDB_MIN);
	m_ButtonMin.SetToolTipText(BUTTON_CAPTION_MIN);

	m_ButtonTopMost.SubclassDlgItem(IDC_TOPMOST, this);
   	m_ButtonTopMost.SetBitmaps(IDB_TOPMOST_NORMAL);
	m_ButtonTopMost.SetToolTipText(BUTTON_CAPTION_TOPMOST);
    
	m_ButtonPasseck.SubclassDlgItem(IDC_PASSECK, this);
   	m_ButtonPasseck.SetBitmaps(IDB_PASSECK_FOCUS, IDB_PASSECK_NORMAL);
	m_ButtonPasseck.DrawBorder(FALSE);
	m_ButtonPasseck.SetBtnCursor(IDC_HAND);

	m_ButtonLamp[WORKMODE_PASSALL].SetLamp(IDC_GREEN, IDB_GREEN_FOCUS, IDB_GREEN_NORMAL, IDB_GREEN_SELECT, BUTTON_CAPTION_GREEN, this);
	m_ButtonLamp[WORKMODE_FILTER].SetLamp(IDC_YELLOW, IDB_YELLOW_FOCUS, IDB_YELLOW_NORMAL, IDB_YELLOW_SELECT, BUTTON_CAPTION_YELLOW, this);
	m_ButtonLamp[WORKMODE_DENYALL].SetLamp(IDC_RED, IDB_RED_FOCUS, IDB_RED_NORMAL, IDB_RED_SELECT, BUTTON_CAPTION_RED, this);

	SetLampSelect(theApp.m_AclFile.GetHeader()->bWorkMode);
    
	m_SubParent.SubclassDlgItem(IDC_SUB_PARENT, this);
	m_ParameterSub.Create(IDD_PARAMETER_SUB, &m_SubParent);
	m_AclSub.Create(IDD_ACL_SUB, &m_SubParent);
	m_MonitorSub.Create(IDD_MONITOR_SUB, &m_SubParent);
	m_LogSub.Create(IDD_LOG_SUB, &m_SubParent);
	m_SystemSet.Create(IDD_SYSTEM_SET, &m_SubParent);
	m_OnLine.Create(IDD_ONLINE, &m_SubParent);
	m_About.Create(IDD_ABOUT, &m_SubParent);

	OnParameter();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}