channel *NewChannel(const char *Id) { channel *Channel; if (Id == NULL) { Error("NewChannel(): Id = NULL"); return NULL; } else if (! IsId(Id)) { Error("NewChannel(): Id = \"%s\" is not an ID",Id); return NULL; } else if (SearchObject(Lists,Id,OBJECT) != NULL) { Error("NewChannel(): Id = \"%s\" is already used",Id); return NULL; } else if ((Channel = calloc(1,sizeof(channel))) == NULL) { Error("NewChannel(): not enough memory for channel \"%s\"",Id); return NULL; } Channel->Type = CHANNEL; Channel->Id = NewString(Id); strcpy(Channel->Owner,DEFAULT_USER); strcpy(Channel->Group,DEFAULT_GROUP); Channel->Topic = NewString(""); Channel->UserNb = 0; Channel->Closed = FALSE; Channel->Hidden = FALSE; Channel->Invite = FALSE; Channel->Protected = FALSE; Channel->Resident = FALSE; return Channel; }
channel *SearchChannel(const char *Id) { if (Id == NULL) { Error("SearchChannel(): Id = NULL"); return NULL; } else if (! IsId(Id)) { Error("SearchChannel(): Id = \"%s\" is not an ID",Id); return NULL; } return (channel *) SearchObject(ChannelList,Id,CHANNEL); }
BOOL CtrfFolderColumn::RefreshData(CTreeCtrl* pTree, HTREEITEM hItem, CaRefreshTreeInfo* pInfo) { BOOL bOk = FALSE; CTypedPtrList< CObList, CaDBObject* > lNew; // // Refresh only the branch has already been expanded: if (pInfo && pInfo->GetAction() == CaRefreshTreeInfo::ACTION_REFRESH && !GetTreeCtrlData().IsAlreadyExpanded()) return TRUE; CaLLQueryInfo* pQueryInfo = GetQueryInfo(NULL); ASSERT (pQueryInfo); if (!pQueryInfo) return FALSE; if (GetPfnCOMQueryObject()) bOk = GetPfnCOMQueryObject()(GetAptAccess(), pQueryInfo, lNew); else { CmtSessionManager* pSessionManager = GetSessionManager(); ASSERT (pSessionManager); if (!pSessionManager) return FALSE; if (GetPfnUserQueryObject()) bOk = GetPfnUserQueryObject()(pQueryInfo, lNew, pSessionManager); else bOk = INGRESII_llQueryObject (pQueryInfo, lNew, pSessionManager); } if (!bOk) return FALSE; // // Mark all old object as being deleted: CtrfItemData* pObj = NULL; POSITION p = NULL, pos = m_listObject.GetHeadPosition(); while (pos != NULL) { pObj = m_listObject.GetNext (pos); pObj->GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_DELETE); } // // Add new Objects: while (!lNew.IsEmpty()) { CaColumn* pNew = (CaColumn*)lNew.RemoveHead(); CtrfItemData* pExist = SearchObject(pNew); // // The new queried object already exists in the old list, we destroy it ! if (pExist != NULL) { pExist->GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_EXIST); delete pNew; continue; } // // New object that is not in the old list, add it to the list: CtrfColumn* pNewObject = new CtrfColumn (pNew); pNewObject->SetBackParent (this); pNewObject->Initialize(); m_listObject.AddTail (pNewObject); delete pNew; } // // Refresh Sub-Branches ? Display (pTree, hItem); return TRUE; }
bool CLightning::EventFrame(const Event &event) { if (m_engine->GetPause()) return true; if (m_engine->GetMovieLock()) return true; m_progress += event.rTime*m_speed; if (m_phase == LP_WAIT) { if (m_progress >= 1.0f) { m_pos.x = (Math::Rand()-0.5f)*(3200.0f-200.0f); m_pos.z = (Math::Rand()-0.5f)*(3200.0f-200.0f); m_pos.y = 0.0f; CObject* obj = SearchObject(m_pos); if (obj == nullptr) { m_terrain->AdjustToFloor(m_pos, true); } else { m_pos = obj->GetPosition(0); m_terrain->AdjustToFloor(m_pos, true); ObjectType type = obj->GetType(); if (type == OBJECT_BASE) { m_pos.y += 120.0f; // top of the rocket } else if (type == OBJECT_PARA) { CAutoPara* automat = static_cast<CAutoPara*>(obj->GetAuto()); if (automat != nullptr) automat->StartLightning(); m_pos.y += 67.0f; // top of lightning rod } else { obj->ExploObject(EXPLO_BOUM, 1.0f); } } Math::Vector eye = m_engine->GetEyePt(); float dist = Math::Distance(m_pos, eye); float deep = m_engine->GetDeepView(); if (dist < deep) { Math::Vector pos = eye+((m_pos-eye)*0.2f); // like so close! m_sound->Play(SOUND_BLITZ, pos); m_camera->StartOver(CAM_OVER_EFFECT_LIGHTNING, m_pos, 1.0f); m_phase = LP_FLASH; m_progress = 0.0f; m_speed = 1.0f; } } } if (m_phase == LP_FLASH) { if (m_progress < 1.0f) { float max = 5.0f; for (int i = 0; i < FLASH_SEGMENTS; i++) { max += 0.4f; m_shift[i].x += (Math::Rand()-0.5f)*max*2.0f; if ( m_shift[i].x < -max ) m_shift[i].x = -max; if ( m_shift[i].x > max ) m_shift[i].x = max; m_shift[i].y += (Math::Rand()-0.5f)*max*2.0f; if ( m_shift[i].y < -max ) m_shift[i].y = -max; if ( m_shift[i].y > max ) m_shift[i].y = max; m_width[i] += (Math::Rand()-0.5f)*2.0f; if ( m_width[i] < 1.0f ) m_width[i] = 1.0f; if ( m_width[i] > 6.0f ) m_width[i] = 6.0f; } m_shift[0].x = 0.0f; m_shift[0].y = 0.0f; m_width[0] = 0.0f; } else { m_phase = LP_WAIT; m_progress = 0.0f; m_speed = 1.0f / (1.0f+Math::Rand()*m_delay); } } return true; }
bool CLightning::EventFrame(const Event &event) { if (m_terrain == nullptr) m_terrain = CRobotMain::GetInstancePointer()->GetTerrain(); if (m_camera == nullptr) m_camera = CRobotMain::GetInstancePointer()->GetCamera(); if (m_sound == nullptr) m_sound = CApplication::GetInstancePointer()->GetSound(); if (m_engine->GetPause()) return true; if (CRobotMain::GetInstancePointer()->GetMovieLock()) return true; m_progress += event.rTime*m_speed; if (m_phase == LightningPhase::Wait && m_lightningExists) { if (m_progress >= 1.0f) { m_pos.x = (Math::Rand()-0.5f)*(3200.0f-200.0f); m_pos.z = (Math::Rand()-0.5f)*(3200.0f-200.0f); m_pos.y = 0.0f; CObject* obj = SearchObject(m_pos); if (obj == nullptr) { m_terrain->AdjustToFloor(m_pos, true); } else { m_pos = obj->GetPosition(); m_terrain->AdjustToFloor(m_pos, true); // TODO: CLightningConductorObject ObjectType type = obj->GetType(); if (type == OBJECT_BASE) { m_pos.y += 120.0f; // top of the rocket } else if (type == OBJECT_PARA) { CAutoPowerCaptor* automat = static_cast<CAutoPowerCaptor*>(obj->GetAuto()); if (automat != nullptr) automat->StartLightning(); m_pos.y += 67.0f; // top of lightning rod } else { assert(obj->Implements(ObjectInterfaceType::Destroyable)); dynamic_cast<CDestroyableObject*>(obj)->DamageObject(DamageType::Lightning); } } StrikeAtPos(m_pos); } } if (m_phase == LightningPhase::Flash) { if (m_progress < 1.0f) { float max = 5.0f; for (std::size_t i = 0; i < m_segments.size(); i++) { max += 0.4f; m_segments[i].shift.x += (Math::Rand()-0.5f)*max*2.0f; if ( m_segments[i].shift.x < -max ) m_segments[i].shift.x = -max; if ( m_segments[i].shift.x > max ) m_segments[i].shift.x = max; m_segments[i].shift.y += (Math::Rand()-0.5f)*max*2.0f; if ( m_segments[i].shift.y < -max ) m_segments[i].shift.y = -max; if ( m_segments[i].shift.y > max ) m_segments[i].shift.y = max; m_segments[i].width += (Math::Rand()-0.5f)*2.0f; if ( m_segments[i].width < 1.0f ) m_segments[i].width = 1.0f; if ( m_segments[i].width > 6.0f ) m_segments[i].width = 6.0f; } m_segments[0].shift.x = 0.0f; m_segments[0].shift.y = 0.0f; m_segments[0].width = 0.0f; } else { m_phase = LightningPhase::Wait; m_progress = 0.0f; m_speed = 1.0f / (1.0f+Math::Rand()*m_delay); } } return true; }
void Permonkey::Update(float dt, vector<unique_ptr<GameObject>> *objectArray){ timer.Update(dt); if (timer.Get() > 6){ hunger += 1; timer.Restart(); } switch (actionCharacter) { case RESTING: rest.Update(dt); if (rest.Get() > 3){ rest.Restart(); if (arrived && found) actionCharacter = DECIDING_OBJECT; if (arrived && !found) actionCharacter = USING_OBJECT; } character.SetFrameTime(-1); character.Update(dt); if (arrived){ } break; case MOVING: soundControl += dt; character.SetFrameTime(0.5); if (soundControl >= 0.5){ step.Play(1); soundControl = 0; } character.Update(dt); Move(dt); break; case DECIDING_ROOM: if (choice == NO_CHOICE){ MakeChoice(); } break; case DECIDING_OBJECT: if (objectSelect == -1){ SearchObject(objectArray); } break; case USING_OBJECT: rest.Update(dt); if (rest.Get() > 5){ UseObject(objectArray, objectSelect); rest.Restart(); actionCharacter = RESTING; found = true; } break; case EXITING: SearchObject(objectArray); cout << arrived << endl; if (arrived){ gone = true; } cout << found << endl; break; } //tile = tileMap.GetTile(box.x+box.w/2, box.y+box.y); }
bool CLightning::EventFrame(const Event &event) { if (m_engine->GetPause()) return true; if (CRobotMain::GetInstancePointer()->GetMovieLock()) return true; m_progress += event.rTime*m_speed; if (m_phase == LightningPhase::Wait) { if (m_progress >= 1.0f) { m_pos.x = (Math::Rand()-0.5f)*(3200.0f-200.0f); m_pos.z = (Math::Rand()-0.5f)*(3200.0f-200.0f); m_pos.y = 0.0f; CObject* obj = SearchObject(m_pos); if (obj == nullptr) { m_terrain->AdjustToFloor(m_pos, true); } else { m_pos = obj->GetPosition(); m_terrain->AdjustToFloor(m_pos, true); // TODO: CLightningConductorObject ObjectType type = obj->GetType(); if (type == OBJECT_BASE) { m_pos.y += 120.0f; // top of the rocket } else if (type == OBJECT_PARA) { CAutoPowerCaptor* automat = static_cast<CAutoPowerCaptor*>(obj->GetAuto()); if (automat != nullptr) automat->StartLightning(); m_pos.y += 67.0f; // top of lightning rod } else { assert(obj->Implements(ObjectInterfaceType::Destroyable)); dynamic_cast<CDestroyableObject*>(obj)->DamageObject(DamageType::Lightning); } } Math::Vector eye = m_engine->GetEyePt(); float dist = Math::Distance(m_pos, eye); float deep = m_engine->GetDeepView(); if (dist < deep) { Math::Vector pos = eye+((m_pos-eye)*0.2f); // like so close! m_sound->Play(SOUND_BLITZ, pos); m_camera->StartOver(CAM_OVER_EFFECT_LIGHTNING, m_pos, 1.0f); m_phase = LightningPhase::Flash; m_progress = 0.0f; m_speed = 1.0f; } } } if (m_phase == LightningPhase::Flash) { if (m_progress < 1.0f) { float max = 5.0f; for (std::size_t i = 0; i < m_segments.size(); i++) { max += 0.4f; m_segments[i].shift.x += (Math::Rand()-0.5f)*max*2.0f; if ( m_segments[i].shift.x < -max ) m_segments[i].shift.x = -max; if ( m_segments[i].shift.x > max ) m_segments[i].shift.x = max; m_segments[i].shift.y += (Math::Rand()-0.5f)*max*2.0f; if ( m_segments[i].shift.y < -max ) m_segments[i].shift.y = -max; if ( m_segments[i].shift.y > max ) m_segments[i].shift.y = max; m_segments[i].width += (Math::Rand()-0.5f)*2.0f; if ( m_segments[i].width < 1.0f ) m_segments[i].width = 1.0f; if ( m_segments[i].width > 6.0f ) m_segments[i].width = 6.0f; } m_segments[0].shift.x = 0.0f; m_segments[0].shift.y = 0.0f; m_segments[0].width = 0.0f; } else { m_phase = LightningPhase::Wait; m_progress = 0.0f; m_speed = 1.0f / (1.0f+Math::Rand()*m_delay); } } return true; }