I have two classes:
class CEnemy : CObject { protected: int hitPoints; }; class COgro : public CEnemy { COgro::COgro() {hitPoints = 100} }; and in other file I have class 'CRocket', which can collide with COgro, there is it function:
void CRocket::OnCollision(CObject *collisionObject) { if (typeid(*collisionObject) == typeid(COgro)) { //collisionObject->hitPoints -= 10; ?? or what? } } I want to shoot 10 times to ogro before it dies. How to do this? I've already tried:
collisionObject->hitPoints -= 10; (CEnemy)collisionObject->hitPoints -= 10; but I can't compile it...how to edit this hitPoints value, but without changing '(CObject *collisionObject)'? Thx
EDIT:
//=============================================================== //------------------------------------CLASS CRocket----------------------- class CRocket : public CObject { protected: void OnAnimate(scalar_t deltaTime); void OnCollision(CObject *collisionObject); void OnDraw(CCamera *camera); public: float pitch; float distanceTravel; CVector forward; bool isExplosion; CTexture *explosionTex; CExplosion *explosion; CRocket(); ~CRocket(); void Load(); void Unload(); }; void CRocket::OnCollision(CObject *collisionObject) { if (typeid(*collisionObject) == typeid(COgroEnemy)) { isExplosion = true; velocity = CVector(0.0, 0.0, 0.0); explosion = new CExplosion(500, position, 8.0, explosionTex->texID); PlaySound(); } } //-----------------------------------------class CObject class CObject : public CNode { protected: virtual void OnAnimate(scalar_t deltaTime) { position += velocity * deltaTime; velocity += acceleration * deltaTime; } virtual void OnDraw(CCamera *camera) {} virtual void OnCollision(CObject *collisionObject) {} virtual void OnPrepare() { ProcessCollisions(FindRoot()); } public: CVector position; CVector velocity; CVector acceleration; scalar_t size; bool isDead; CObject() {isDead = false;} ~CObject() {} ... ... ... } //---------------------------------------class CEnemy class CEnemy : public CObject { public: int hitPoints; protected: float distFromPlayer; float runSpeed; AIState_t aiState; virtual void OnProcessAI() {} void OnCollision(CObject *collisionObject) { // if this enemy collides with another enemy if (typeid(*collisionObject) == typeid(CEnemy)) { modelState = MODEL_IDLE; velocity = CVector(0.0, 0.0, 0.0); } // if this enemy collides with the terrain (always) else if (typeid(*collisionObject) == typeid(CTerrain)) { position.y = ((CTerrain*)collisionObject)->GetHeight(position.x, position.z) + size; } else { } } public: CPlayer *player; ... ... //----------------------------------class COgro------------------------- class COgroEnemy : public CEnemy { protected: void OnProcessAI(); void OnCollision(CObject *collisionObject); void OnPrepare(); public: COgroEnemy() { Load(); } COgroEnemy(float x, float z) { position.x = x; position.z = z; Load(); } ~COgroEnemy() {} void Load(); };
but I can't compile itWhy?CObject? Are you porting from Java?hitPointsmember can only be accessed inside a method from a class derived fromCEnemy, due to theprotectedaccess.)Cobjecthave ahitPointsattribute? Can you access that attribute from outside the class?